1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID MALAN: Muy bien. 3 00:00:12,360 --> 00:00:15,970 Este es CS50, y esto es Al final de la semana nueve. 4 00:00:15,970 --> 00:00:18,560 Ha sido un torbellino sobre los últimos días. 5 00:00:18,560 --> 00:00:21,580 Y un problema conjunto de siete, si eres de rodilla profundamente en ella, se dan cuenta de que hay un buen 6 00:00:21,580 --> 00:00:23,340 poco nuevo que está ahí. 7 00:00:23,340 --> 00:00:26,660 Pero vamos a ver si no podemos piece todo junto aquí brevemente 8 00:00:26,660 --> 00:00:29,230 antes después de virar en aún otra dirección y visión 9 00:00:29,230 --> 00:00:30,510 ¿dónde más podemos ir. 10 00:00:30,510 --> 00:00:32,630 >> Así que hasta ahora, hemos hablado de HTML. 11 00:00:32,630 --> 00:00:33,740 Hemos hablado de CSS. 12 00:00:33,740 --> 00:00:34,705 Hemos hablado de PHP. 13 00:00:34,705 --> 00:00:36,520 Usted ha comenzado a experimentar SQL. 14 00:00:36,520 --> 00:00:38,360 Hoy, vamos a hablar un poco acerca de JavaScript. 15 00:00:38,360 --> 00:00:41,230 Pero, ¿cómo hacer todas estas dispares idiomas encajan? 16 00:00:41,230 --> 00:00:44,970 >> Así que hablamos la semana pasada acerca de la noción de tener un servidor. 17 00:00:44,970 --> 00:00:48,470 Así que vamos a dibujar este rectángulo como un servidor web aquí. 18 00:00:48,470 --> 00:00:52,200 Y un servidor web sirve seguramente archivos. 19 00:00:52,200 --> 00:00:54,640 Y algunos de esos archivos pueden ser archivos HTML. 20 00:00:54,640 --> 00:00:58,270 Así que una de las cosas que un servidor web puede escupir podría ser un archivo que 21 00:00:58,270 --> 00:01:01,290 sólo tendremos que dibujar como este contiene algo de HTML. 22 00:01:01,290 --> 00:01:04,786 Así que en términos simples, lo que no HTML te deja hacer? 23 00:01:04,786 --> 00:01:06,036 >> AUDIENCIA: Página mirada agradable. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID MALAN: OK, hacer una página se ven bien, aunque creo que he demostrado 26 00:01:12,310 --> 00:01:13,370 que de otra manera. 27 00:01:13,370 --> 00:01:18,250 Así HTML no permiten distribuir las páginas estructuralmente, y que le permite 28 00:01:18,250 --> 00:01:22,410 especie de estética marcar una página, marcar el contenido estático, por lo que 29 00:01:22,410 --> 00:01:23,640 entonces puede verlo con un navegador web. 30 00:01:23,640 --> 00:01:24,690 >> Pero esa es la clave. 31 00:01:24,690 --> 00:01:26,130 Es el contenido estático. 32 00:01:26,130 --> 00:01:28,590 Usted escribe, lo guarda, y luego usted lo envía. 33 00:01:28,590 --> 00:01:31,130 Y el servidor web sirve entonces en manos de sus visitantes. 34 00:01:31,130 --> 00:01:35,700 >> Pero nos estilizan cosas usando una diferente idioma por completo. 35 00:01:35,700 --> 00:01:40,150 Empezamos a utilizar un atributo de estilo en ciertas etiquetas. 36 00:01:40,150 --> 00:01:43,400 Y el atributo de estilo Pongámonos cosas como el tamaño de la fuente y el color. 37 00:01:43,400 --> 00:01:46,460 Y es probable que haya comenzado a descubrir, o pronto lo sabrá por última 38 00:01:46,460 --> 00:01:50,160 proyectos potencialmente, sin embargo, otra propiedades que se pueden utilizar en el CSS. 39 00:01:50,160 --> 00:01:54,710 Y así, en términos sencillos, lo que entonces realmente hace CSS? 40 00:01:54,710 --> 00:01:57,810 Esos son sólo algunos ejemplos de los mismos. 41 00:01:57,810 --> 00:02:00,730 ¿Qué vamos a hacer eso HTML no parece de lo 42 00:02:00,730 --> 00:02:02,606 que hemos visto hasta ahora? 43 00:02:02,606 --> 00:02:04,850 >> AUDIENCIA: Definir estilos por ti mismo. 44 00:02:04,850 --> 00:02:06,700 >> DAVID MALAN: Definir estilos por sí mismo. 45 00:02:06,700 --> 00:02:10,280 Así que definir las cosas como las clases a medida que puede haber encontrado, o únicamente 46 00:02:10,280 --> 00:02:13,800 identificar los nodos de un documento para que se puede estilizar ellos. 47 00:02:13,800 --> 00:02:16,890 Pero más específicamente, yo diría que el CSS realmente le permite tomar las cosas de la 48 00:02:16,890 --> 00:02:20,790 última milla y le permite especificar mucho más precisamente la estética, 49 00:02:20,790 --> 00:02:24,340 mientras que HTML en su mayor parte permite a estructurar sus páginas. 50 00:02:24,340 --> 00:02:27,310 >> Y a pesar de que hay algunos valores por defecto, como vimos la etiqueta para 51 00:02:27,310 --> 00:02:30,690 una etiqueta de partida, que en términos generales hecho cosas grandes y audaces. 52 00:02:30,690 --> 00:02:34,250 Esa es una definición bastante genérico de la etiqueta - grande y en negrita. 53 00:02:34,250 --> 00:02:35,260 ¿Qué tamaño de la fuente es esa? 54 00:02:35,260 --> 00:02:36,080 ¿De qué color es? 55 00:02:36,080 --> 00:02:36,890 ¿Cómo negrita es eso? 56 00:02:36,890 --> 00:02:39,830 Y CSS le permite más precisión cosas afinar el estilo. 57 00:02:39,830 --> 00:02:42,150 Así como el diseño, ya que algunos de que has visto. 58 00:02:42,150 --> 00:02:45,180 >> Y, francamente, CSS es un poco de un lenguaje desordenado. 59 00:02:45,180 --> 00:02:48,370 Es muy poderoso en que usted puede hacer literalmente, cualquier sitio web que usted ha 60 00:02:48,370 --> 00:02:51,880 visto en la web hoy en día con él, pero es un tipo de dolor en el cuello. 61 00:02:51,880 --> 00:02:54,440 Y algunos de ustedes han golpeado la cabeza contra las paredes ya sólo para hacer 62 00:02:54,440 --> 00:02:58,560 algo estúpido como centro de un menú en problema fijó siete si usted ha llegado a 63 00:02:58,560 --> 00:02:59,470 ese punto ya. 64 00:02:59,470 --> 00:03:01,530 >> Pero darse cuenta, esas cosas más fácil con el tiempo. 65 00:03:01,530 --> 00:03:02,820 Se empieza a notar patrones. 66 00:03:02,820 --> 00:03:06,020 Y una vez más, Google va a ser su amigo para las diversas formas en que se puede 67 00:03:06,020 --> 00:03:07,220 resolver este tipo de problemas. 68 00:03:07,220 --> 00:03:11,520 >> Y me atrevo a decir con CSS y HTML más en general, puede resolver los problemas de 69 00:03:11,520 --> 00:03:15,910 muchas más formas, todo lo cual podría muy bien ser correcta, de lo que podría 70 00:03:15,910 --> 00:03:18,900 en algo como C, incluso Ahora PHP o JavaScript. 71 00:03:18,900 --> 00:03:21,080 Hay simplemente muchos diferentes maneras de sentar las cosas. 72 00:03:21,080 --> 00:03:22,570 >> Pero esto empezó a desordenado, dijimos. 73 00:03:22,570 --> 00:03:26,480 Sólo tipo de commingling su HTML y el CSS con el atributo de estilo era 74 00:03:26,480 --> 00:03:27,590 un poco descuidado. 75 00:03:27,590 --> 00:03:31,460 Y así que en vez dijimos, una especie de abstractamente hablando, que usted debe 76 00:03:31,460 --> 00:03:34,050 al menos comenzar con el factor tu CSS probablemente. 77 00:03:34,050 --> 00:03:37,430 Atribuye No es su estilo, pero al menos utilizar la etiqueta de estilo dentro de lo que 78 00:03:37,430 --> 00:03:38,840 parte de la página web? 79 00:03:38,840 --> 00:03:39,560 >> AUDIENCIA: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID MALAN: En la cabeza. 81 00:03:40,120 --> 00:03:43,270 Hasta ahora, sólo teníamos el título hasta allí, pero también se puede añadir un estilo de 82 00:03:43,270 --> 00:03:47,230 etiquetar, y usted puede poner su CSS más o menos hablando hacia la parte superior de la página. 83 00:03:47,230 --> 00:03:52,550 Pero luego nos dimos un paso más cosas y factorizada que más 84 00:03:52,550 --> 00:03:54,130 en un archivo separado. 85 00:03:54,130 --> 00:03:57,240 >> Y por lo que estos dos archivos fueron de alguna manera ahora vinculado. 86 00:03:57,240 --> 00:03:59,550 Y de hecho lo fue el etiqueta que hizo eso. 87 00:03:59,550 --> 00:04:02,920 Y lo que era uno de los objetivos globales motivaciones para factorizar nuestra CSS 88 00:04:02,920 --> 00:04:04,057 aún más? 89 00:04:04,057 --> 00:04:05,280 >> AUDIENCIA: Reutilización. 90 00:04:05,280 --> 00:04:05,785 >> DAVID MALAN: Reutilización. 91 00:04:05,785 --> 00:04:06,150 ¿Cierto? 92 00:04:06,150 --> 00:04:09,470 Usted pudo haber visto en p-set siete ya que gran parte de las páginas, el 93 00:04:09,470 --> 00:04:12,260 página de compra, la página de venta, el página de la cartera, son probablemente 94 00:04:12,260 --> 00:04:13,550 estructurado algo similar. 95 00:04:13,550 --> 00:04:17,579 Hay un logo finanzas CS50 en la parte superior a no ser que te hayas decidido a cambiarlo. 96 00:04:17,579 --> 00:04:19,839 Hay un pie de página en la parte inferior de las páginas. 97 00:04:19,839 --> 00:04:24,315 Y CSS le permite entonces al factor fuera en un archivo separado de modo que si 98 00:04:24,315 --> 00:04:27,780 que desea cambiar algo a nivel mundial a través de todo su sitio, usted puede realmente 99 00:04:27,780 --> 00:04:29,390 sólo cambia en un solo lugar. 100 00:04:29,390 --> 00:04:32,750 >> Pero hay un precio que se paga potencialmente al haber un factor fuera de la 101 00:04:32,750 --> 00:04:38,380 CSS de mi archivo HTML en un aparte File que hace referencia con la 102 00:04:38,380 --> 00:04:40,650 etiqueta, que vimos el lunes. 103 00:04:40,650 --> 00:04:43,850 ¿Cuál podría ser el lado negativo de esto? 104 00:04:43,850 --> 00:04:48,830 Pensando hace una semana para cuando estamos hablando de HTTP y TCP / IP y cómo 105 00:04:48,830 --> 00:04:52,070 Internet funciona. 106 00:04:52,070 --> 00:04:53,530 Algo por aquí? 107 00:04:53,530 --> 00:04:54,730 >> AUDIENCIA: Se necesita más tiempo. 108 00:04:54,730 --> 00:04:55,470 >> DAVID MALAN: Se necesita más tiempo. 109 00:04:55,470 --> 00:04:56,750 ¿Por qué? 110 00:04:56,750 --> 00:04:59,450 >> AUDIENCIA: [inaudible]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID MALAN: Si. 112 00:04:59,750 --> 00:05:01,240 Por lo tanto, podría decirse que tiene un poco más de tiempo. 113 00:05:01,240 --> 00:05:04,290 Porque uno, el CSS es, obviamente, no en el mismo archivo. 114 00:05:04,290 --> 00:05:06,920 Así que ahora usted tiene que no hacer uno, sino dos peticiones. 115 00:05:06,920 --> 00:05:11,230 Y cada una de esas peticiones, como vimos en Chrome en el llamado Inspector, 116 00:05:11,230 --> 00:05:15,740 y nos fijamos en la ficha de red, cada una de esos archivos requiere un HTTP 117 00:05:15,740 --> 00:05:18,360 solicitud, que vimos hace una cierta cantidad de tiempo. 118 00:05:18,360 --> 00:05:19,290 Ahora, tal vez no es mucho. 119 00:05:19,290 --> 00:05:20,670 Tal vez es sólo 20 milisegundos. 120 00:05:20,670 --> 00:05:22,260 Tal vez es 200 milisegundos. 121 00:05:22,260 --> 00:05:25,530 >> Pero pensar en una página como Facebook, o CNN, o Google, que son mucho 122 00:05:25,530 --> 00:05:28,060 más grandes que los ejemplos que hemos mirado hasta ahora. 123 00:05:28,060 --> 00:05:32,070 Esas páginas pueden tener decenas de archivos, cada uno de los cuales puede requerir un 124 00:05:32,070 --> 00:05:33,550 descarga de un archivo. 125 00:05:33,550 --> 00:05:35,800 Así que las cosas pueden potencialmente comenzará a disminuir. 126 00:05:35,800 --> 00:05:39,280 >> Y sobre todo en estos días en que todos tienen teléfonos móviles en el bolsillo y 127 00:05:39,280 --> 00:05:43,010 conexiones de Internet más lentas, teniendo que espere unos milisegundos más, unos pocos 128 00:05:43,010 --> 00:05:46,110 más milisegundos adicional archivos en realidad puede ser lento. 129 00:05:46,110 --> 00:05:50,430 La latencia es la palabra que describe la tipo de esperar que usted tiene que 130 00:05:50,430 --> 00:05:53,110 experimentar cuando se espera alguna pieza de información. 131 00:05:53,110 --> 00:05:54,430 >> Pero hay un lado positivo. 132 00:05:54,430 --> 00:05:56,600 Así que no todo es una especie de - 133 00:05:56,600 --> 00:05:58,170 que en realidad es un poco de un sube y baja aquí. 134 00:05:58,170 --> 00:06:02,970 Lo malo ahora, pero lo que los navegadores pueden hacer si son inteligentes, a fin de evitar 135 00:06:02,970 --> 00:06:08,870 tener que solicitar el mismo styles.css presentar de nuevo puede ser para hacer qué? 136 00:06:08,870 --> 00:06:09,390 >> Caché ella. 137 00:06:09,390 --> 00:06:10,370 Así que el almacenamiento en caché - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 generalmente significa aquí sólo para salvar el presentar su solicitud por primera vez, y 140 00:06:15,810 --> 00:06:17,440 a continuación, compruebe la memoria caché para ello. 141 00:06:17,440 --> 00:06:20,400 Asegúrate de que eres una especie de contenedor de almacenamiento, y si usted ya tiene un 142 00:06:20,400 --> 00:06:24,520 copia de styles.css, incluso si algún otro página en el p-set, o de cualquier sitio web, 143 00:06:24,520 --> 00:06:28,560 pide de nuevo, sólo para dar la usuario que misma copia en caché. 144 00:06:28,560 --> 00:06:30,140 No te molestes en solicitarlo. 145 00:06:30,140 --> 00:06:32,560 >> Downside allí, sin embargo, como algunos de ustedes han tropezado con la p-set. 146 00:06:32,560 --> 00:06:35,870 Si se hace un cambio en el servidor y usted vuelve al navegador y que 147 00:06:35,870 --> 00:06:39,250 recargar, a veces el navegador hace un favor y no se molesta 148 00:06:39,250 --> 00:06:43,660 volver a descargar el archivo styles.css porque, vamos, ¿cuáles son las probabilidades 149 00:06:43,660 --> 00:06:47,620 que estos estilos que Facebook utiliza van a cambiar hora a hora o 150 00:06:47,620 --> 00:06:48,140 día a día? 151 00:06:48,140 --> 00:06:48,800 Es bastante bajo. 152 00:06:48,800 --> 00:06:52,260 Ellos podrían cambiar con el tiempo, pero no por minutos o por horas. 153 00:06:52,260 --> 00:06:55,810 >> Así que un truco, lo digo al hacer web desarrollo, que a menudo se mantenga pulsado el 154 00:06:55,810 --> 00:06:59,500 tecla de mayúsculas, por ejemplo, y luego haga clic en recargar en su navegador, y que la voluntad 155 00:06:59,500 --> 00:07:03,280 suelen decir la recarga del navegador todo, incluso si usted ya tiene 156 00:07:03,280 --> 00:07:04,180 en la memoria caché. 157 00:07:04,180 --> 00:07:06,630 Así que de nuevo, ventajas y desventajas, pero todos ellos 158 00:07:06,630 --> 00:07:08,260 en última instancia, decisiones de diseño. 159 00:07:08,260 --> 00:07:11,520 >> Así que ahora, no lo hicimos sólo terminar la historia aquí. 160 00:07:11,520 --> 00:07:15,790 Si ahora vuelvo y volver y volver y de nuevo, comenzamos a presentar no sólo 161 00:07:15,790 --> 00:07:18,060 HTML, pero PHP. 162 00:07:18,060 --> 00:07:20,786 Así que en términos simples, lo que Qué PHP hagamos? 163 00:07:20,786 --> 00:07:22,770 >> AUDIENCIA: [inaudible]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID MALAN: ¿Qué es eso? 165 00:07:24,258 --> 00:07:25,250 >> AUDIENCIA: Introducir la lógica en el código. 166 00:07:25,250 --> 00:07:26,620 >> DAVID MALAN: Sí, introducir lógica en el código. 167 00:07:26,620 --> 00:07:29,570 Así que es un lenguaje de programación real con bucles y variables, y 168 00:07:29,570 --> 00:07:32,620 funciones y condiciones, y todos las cosas que hemos estado utilizando camino de regreso 169 00:07:32,620 --> 00:07:33,780 cuando desde el principio. 170 00:07:33,780 --> 00:07:36,780 Y PHP, hemos visto, se puede utilizar ya sea en la línea de comandos - es 171 00:07:36,780 --> 00:07:39,190 no tiene por qué tener nada que ver con la web, a pesar de que eso es 172 00:07:39,190 --> 00:07:43,150 realmente sus orígenes y lo que tiende ser bueno y propicio para el - 173 00:07:43,150 --> 00:07:47,130 pero se puede usar PHP simplemente por la naturaleza del hecho de que tiene una impresión () 174 00:07:47,130 --> 00:07:49,660 función, y una función de () printf, o una función () echo. 175 00:07:49,660 --> 00:07:52,440 Hay racimos de formas en las que puede imprimir texto con PHP. 176 00:07:52,440 --> 00:07:56,540 >> Por lo tanto, puede utilizar esta programación lenguaje para salida exactamente 177 00:07:56,540 --> 00:07:58,460 lo que hablábamos antes. 178 00:07:58,460 --> 00:08:01,360 Puede generar dinámicamente su HTML. 179 00:08:01,360 --> 00:08:02,300 Tal vez no todo. 180 00:08:02,300 --> 00:08:06,460 Tal vez las cosas duras de código, como el encabezado y el pie de página y el logotipo, 181 00:08:06,460 --> 00:08:07,950 y las hojas de estilo, y todo eso. 182 00:08:07,950 --> 00:08:11,190 Pero para algo como p-set siete, donde está la manipulación de acciones y 183 00:08:11,190 --> 00:08:14,690 mostrando la cartera del usuario, que es va a cambiar de forma dinámica, se puede 184 00:08:14,690 --> 00:08:18,960 seguramente usar PHP y la lógica que da usted como un lenguaje de programación para 185 00:08:18,960 --> 00:08:22,320 salida de subconjuntos de forma dinámica de la página. 186 00:08:22,320 --> 00:08:25,900 >> Por eso, cuando se habla de sitios web dinámicos, o la programación web, eso es 187 00:08:25,900 --> 00:08:27,200 lo que realmente estás hablando. 188 00:08:27,200 --> 00:08:31,450 El uso de un lenguaje como PHP o cosas llamado Python o Ruby, o Java, o 189 00:08:31,450 --> 00:08:35,900 Aún en otras lenguas, para consultar una base de datos a menudo, u otro servidor, y 190 00:08:35,900 --> 00:08:38,580 luego escupir dinámicamente HTML. 191 00:08:38,580 --> 00:08:42,470 >> Ahora el resultado final, como un aparte, es que la mayoría de sitios web de HTML, 192 00:08:42,470 --> 00:08:45,970 incluyendo su p-set siete, es probablemente va a ser un gran lío si 193 00:08:45,970 --> 00:08:48,060 nos fijamos en la fuente código en un navegador. 194 00:08:48,060 --> 00:08:49,010 Eso no es una gran cosa. 195 00:08:49,010 --> 00:08:51,550 En este punto, cuando nos preocupamos por estilo, nos preocupamos por el 196 00:08:51,550 --> 00:08:52,740 cosas que usted escribe. 197 00:08:52,740 --> 00:08:56,240 No vamos a preocuparse por las cosas que lo que sus salidas de código. 198 00:08:56,240 --> 00:08:59,520 Así que no te preocupes por la sangría aquí si se trata de PHP es 199 00:08:59,520 --> 00:09:01,190 en realidad la salida de material. 200 00:09:01,190 --> 00:09:04,430 Después de todo, el navegador no le importa, y un ser humano no se busca 201 00:09:04,430 --> 00:09:05,400 en la fuente de todos modos. 202 00:09:05,400 --> 00:09:09,000 Tenemos el personal, por ejemplo, haría se busca en su PHP. 203 00:09:09,000 --> 00:09:13,440 >> Así que te voy a dar un ejemplo rápido ahora de por qué esto podría ser más útil. 204 00:09:13,440 --> 00:09:18,620 Así que, francamente, no puedo recordar la última vez que utiliza C para resolver un problema en 205 00:09:18,620 --> 00:09:19,620 el mundo real. 206 00:09:19,620 --> 00:09:22,330 Probablemente fue en la universidad cuando Que necesitaba usar un lenguaje que 207 00:09:22,330 --> 00:09:26,710 era bastante bajo nivel y me dio la oportunidad de hacer algo muy elevada 208 00:09:26,710 --> 00:09:30,720 realizando para salvar realmente el mayor número de CPU ciclos como pude, en gran parte, 209 00:09:30,720 --> 00:09:33,990 porque yo estaba usando enormes conjuntos de datos, y cada ciclo de la CPU contó. 210 00:09:33,990 --> 00:09:37,750 Y, francamente, incluso en cosas como los teléfonos estos días y otros dispositivos 211 00:09:37,750 --> 00:09:39,910 en el que no tiene absolutamente tanto memoria y no tiene absolutamente como 212 00:09:39,910 --> 00:09:44,160 mucha CPU, utilizando lenguajes más rápidos todavía es atractivo. 213 00:09:44,160 --> 00:09:47,290 >> Pero en el mundo real, cuando se acaba de quiere lanzar un programa conjunto para 214 00:09:47,290 --> 00:09:50,340 analizar algunos datos, o que haya recogido un montón de registros para 215 00:09:50,340 --> 00:09:53,330 algún grupo de estudiantes y quiere muy automatizar rápidamente el envío de correos electrónicos 216 00:09:53,330 --> 00:09:56,240 uno por uno para cada uno de los solicitantes de registro, usted va a alcanzar 217 00:09:56,240 --> 00:09:59,240 un lenguaje de alto nivel de C por así decirlo. 218 00:09:59,240 --> 00:10:04,060 Algo así como PHP o Python o Ruby, o una media docena de otros que existen 219 00:10:04,060 --> 00:10:04,550 estos días. 220 00:10:04,550 --> 00:10:07,200 Pero los tres son probablemente el más de moda en estos momentos. 221 00:10:07,200 --> 00:10:10,840 >> Y lo que esto significa es que se puede abrir un editor de texto como gedit o 222 00:10:10,840 --> 00:10:14,030 más cualquier otra cosa y entonces simplemente comenzar escribir código sin tener que preocuparse 223 00:10:14,030 --> 00:10:17,800 sobre la compilación, sin tener que realmente preocuparse por la gestión de memoria, 224 00:10:17,800 --> 00:10:20,820 teniendo en cuenta sin embargo que un poco dejadez eventualmente regresará 225 00:10:20,820 --> 00:10:24,790 a morder si el conjunto de datos se más grande o el problema se agranda. 226 00:10:24,790 --> 00:10:27,230 Pero lo que esto significa para la nosotros es lo siguiente. 227 00:10:27,230 --> 00:10:29,860 >> Déjame ir adelante y corro speller del problema fijó seises. 228 00:10:29,860 --> 00:10:33,480 Así que esta es mi implementación basada en trie que he usado en la gran 229 00:10:33,480 --> 00:10:35,500 tablero donde yo no realicé tan bien. 230 00:10:35,500 --> 00:10:38,720 Volveremos en el plazo de una semana y revisitar aquellos que terminan encima de la 231 00:10:38,720 --> 00:10:40,430 gran tablero en nuestra última conferencia. 232 00:10:40,430 --> 00:10:44,520 Pero por ahora, déjeme ir adelante y sólo ejecutar mi solución en el texto, y lo haremos 233 00:10:44,520 --> 00:10:48,460 la Biblia King James, y aquí vamos. 234 00:10:48,460 --> 00:10:51,080 >> Así que estos son todos los supuestamente palabras mal escritas de 235 00:10:51,080 --> 00:10:52,240 Rey James Bible. 236 00:10:52,240 --> 00:10:55,560 Y mi aplicación se medio segundo en total. 237 00:10:55,560 --> 00:10:58,270 Así que no está mal en este en particular del equipo. 238 00:10:58,270 --> 00:11:01,540 Pero piensa en lo mucho código que tenía que escribir. 239 00:11:01,540 --> 00:11:02,880 Piense en la cantidad de código que tenía que escribir. 240 00:11:02,880 --> 00:11:06,170 Piense cuántas horas pasaste en el D-hall o tu dormitorio o donde sea 241 00:11:06,170 --> 00:11:07,890 en realidad la codificación hasta esa solución. 242 00:11:07,890 --> 00:11:11,850 >> Bien, si en realidad tengo un nivel más alto lenguaje como PHP, tomar nota de 243 00:11:11,850 --> 00:11:13,350 lo que puedo hacer aquí. 244 00:11:13,350 --> 00:11:16,410 En primer lugar, supongamos que esto es en lugar su código de distribución. 245 00:11:16,410 --> 00:11:17,790 Se trata de un archivo llamado abecedario. 246 00:11:17,790 --> 00:11:20,220 Está disponible como parte de la actual código de distribución. 247 00:11:20,220 --> 00:11:22,670 Y yo voy a agitar la mano a lo sumo de los detalles, pero esto es en realidad 248 00:11:22,670 --> 00:11:25,500 un ejemplo interesante de cómo usted puede ser el puerto un lenguaje 249 00:11:25,500 --> 00:11:28,870 como C a PHP. 250 00:11:28,870 --> 00:11:33,420 Yo, literalmente, abrir dos ventanas de texto, uno con mi versión C de speller.c, 251 00:11:33,420 --> 00:11:36,960 y yo sólo empecé a traducir en mi dirigirse a PHP y escribiendo a cabo utilizando 252 00:11:36,960 --> 00:11:38,840 las funciones equivalentes más cercanos. 253 00:11:38,840 --> 00:11:40,100 >> Así que algunas de estas cosas son diferentes. 254 00:11:40,100 --> 00:11:43,730 Nos vimos la última vez que PHP no utiliza incluir en la misma forma. 255 00:11:43,730 --> 00:11:47,050 Se utiliza típicamente requerir, aunque incluir existe. 256 00:11:47,050 --> 00:11:50,330 Definir es un poco diferente de # Define en C, pero eso es 257 00:11:50,330 --> 00:11:51,890 cómo hacemos una constante. 258 00:11:51,890 --> 00:11:55,860 $ Argc resulta que existe en PHP, por lo que hemos visto antes. 259 00:11:55,860 --> 00:11:58,650 Estos son sólo variables, todas de que comenzar con signos de dólar. 260 00:11:58,650 --> 00:12:00,590 Recordemos estos son sólo un montón de flotar puntos. 261 00:12:00,590 --> 00:12:03,970 >> Así que cuento largo, le invitamos a voltear a través de este caso curioso, esto es 262 00:12:03,970 --> 00:12:10,010 casi una conversión de la línea-por-línea de la Versión C de speller.c en PHP. 263 00:12:10,010 --> 00:12:12,630 Y se podría hacer esto de nuevo para media docena de otros idiomas. 264 00:12:12,630 --> 00:12:14,910 >> Pero lo interesante es lo siguiente. 265 00:12:14,910 --> 00:12:16,910 O lo que es francamente desalentador es la siguiente. 266 00:12:16,910 --> 00:12:20,790 Déjame ir adelante y escribo sobre dictionary.php, y afirman que soy 267 00:12:20,790 --> 00:12:23,670 va a seguir adelante y volver a poner en práctica problema establecido seis aquí. 268 00:12:23,670 --> 00:12:27,530 >> Así que vamos a proponer en primer lugar que en este archivo, que se implementará en 269 00:12:27,530 --> 00:12:30,550 PHP, así que vamos a abrir mis etiquetas como eso. 270 00:12:30,550 --> 00:12:34,780 Permítanme dar a mí mismo un mundial variable $ size obtiene cero. 271 00:12:34,780 --> 00:12:36,710 Y yo voy a dar yo mismo una tabla hash. 272 00:12:36,710 --> 00:12:38,110 Voy a usar una tabla hash de esta cosa. 273 00:12:38,110 --> 00:12:42,070 ¿Cómo declaro una tabla hash en PHP? 274 00:12:42,070 --> 00:12:42,990 Hecho. 275 00:12:42,990 --> 00:12:43,980 Aceptar. 276 00:12:43,980 --> 00:12:48,870 >> Soporte de manera abierta corchete de cierre representa lo que en PHP, como hemos visto? 277 00:12:48,870 --> 00:12:51,850 Un arsenal, pero una matriz que pudiera ser un array asociativo. 278 00:12:51,850 --> 00:12:54,320 Una matriz asociativa es una estructura de datos que 279 00:12:54,320 --> 00:12:55,860 asocia claves con valores. 280 00:12:55,860 --> 00:12:59,430 >> Ahora bien, en el más simple numéricamente indexados array, esas llaves son qué? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Cero, uno, dos, tres, ¿no? 283 00:13:03,960 --> 00:13:08,780 Old school cosas de vuelta de C. Pero puede también ser cadenas como foo y bar, 284 00:13:08,780 --> 00:13:12,210 o Maxwell, o cualquier cadena. 285 00:13:12,210 --> 00:13:14,240 Así que puedo aprovechar esa en un momento. 286 00:13:14,240 --> 00:13:17,550 >> Déjame ir por delante y declaro una función como - 287 00:13:17,550 --> 00:13:19,020 vamos a hacer load () en primer lugar. 288 00:13:19,020 --> 00:13:20,690 Así función load (). 289 00:13:20,690 --> 00:13:23,440 Y PHP es un poco diferente, ya que que, literalmente, escribir la función, pero que 290 00:13:23,440 --> 00:13:24,930 no escriba un tipo de retorno. 291 00:13:24,930 --> 00:13:28,760 Voy a seguir adelante y decir que el función load () debe tomar en 292 00:13:28,760 --> 00:13:31,000 argumento $ diccionario, simplemente como la versión C hizo. 293 00:13:31,000 --> 00:13:32,510 Yo voy a hacer eso de la memoria. 294 00:13:32,510 --> 00:13:34,910 >> Y propongo que soy va a hacer esto. 295 00:13:34,910 --> 00:13:37,080 Simplemente voy a hacer foreach. 296 00:13:37,080 --> 00:13:40,710 Voy a llamar a una función llamada file (), pasando el nombre de esa 297 00:13:40,710 --> 00:13:44,990 presentar, que es la variable $ Diccionario como $ palabra. 298 00:13:44,990 --> 00:13:49,410 Y luego en el interior de mi bucle aquí, estoy va a seguir adelante y almacenar en mi 299 00:13:49,410 --> 00:13:57,440 $ $ Tabla que se corra la verdad. 300 00:13:57,440 --> 00:13:57,918 Hecho. 301 00:13:57,918 --> 00:14:01,264 Oh, espera. 302 00:14:01,264 --> 00:14:02,422 Hecho. 303 00:14:02,422 --> 00:14:02,760 Aceptar. 304 00:14:02,760 --> 00:14:04,970 >> Esa es la función load () decir en PHP. 305 00:14:04,970 --> 00:14:05,865 Ahora, ¿por qué funciona eso? 306 00:14:05,865 --> 00:14:07,010 Y yo soy una especie de trampa aquí. 307 00:14:07,010 --> 00:14:09,980 >> Así que, uno, foreach que vimos brevemente la última vez. 308 00:14:09,980 --> 00:14:13,680 Sólo significa que usted puede recorrer en iteración una matriz sin molestarse con i 309 00:14:13,680 --> 00:14:16,150 y n y plus plus, y todo eso. 310 00:14:16,150 --> 00:14:21,350 Diccionario es, por supuesto, el nombre del archivo, algo así como grande o pequeño, los dos 311 00:14:21,350 --> 00:14:22,830 diccionarios que usamos la última vez. 312 00:14:22,830 --> 00:14:26,715 El archivo es una función que abre el texto archivo, lo lee en línea por línea, y 313 00:14:26,715 --> 00:14:29,840 manos hacer una copia de una enorme variedad, cada uno de cuyos elementos es un 314 00:14:29,840 --> 00:14:31,340 línea de ese archivo. 315 00:14:31,340 --> 00:14:36,040 Así que esa es la combinación de fopen, y fread y while, y fclose, 316 00:14:36,040 --> 00:14:37,080 y todo eso. 317 00:14:37,080 --> 00:14:40,150 Por último, como la palabra sólo significa que es la variables que voy a tener acceso a 318 00:14:40,150 --> 00:14:41,890 en cada iteración en este bucle. 319 00:14:41,890 --> 00:14:46,910 >> Así que en resumen, este chiste aquí significa abrir el archivo cuyo nombre está en 320 00:14:46,910 --> 00:14:50,750 diccionario, la variable, iterar sobre línea por línea, y cada vez que reciba 321 00:14:50,750 --> 00:14:54,290 una línea, tienda en una palabra variable llamada, y luego hacer algo con la palabra. 322 00:14:54,290 --> 00:14:55,280 ¿Qué quiero hacer? 323 00:14:55,280 --> 00:14:58,110 Quiero poner palabras en mi tabla hash. 324 00:14:58,110 --> 00:15:00,860 >> Bueno, puedo poner algo en mi la tabla de hash al igual que en C 325 00:15:00,860 --> 00:15:02,140 utilizando corchetes. 326 00:15:02,140 --> 00:15:03,660 Este es el nombre de mi tabla hash. 327 00:15:03,660 --> 00:15:07,180 Voy a índice en el hash mesa en este lugar. 328 00:15:07,180 --> 00:15:08,920 Así que no entre paréntesis cero, no entre paréntesis uno. 329 00:15:08,920 --> 00:15:11,990 Cita Bracket algo unquote, cualquiera que sea esa palabra es. 330 00:15:11,990 --> 00:15:15,200 Y al igual que usted pueda tener en su trie trabajo tabla hash, que acaba de tienda 331 00:15:15,200 --> 00:15:17,650 efectivamente un booleano, implícitamente o explícitamente. 332 00:15:17,650 --> 00:15:18,260 Hecho. 333 00:15:18,260 --> 00:15:20,000 Estoy almacenando el valor verdadero. 334 00:15:20,000 --> 00:15:23,150 >> Ahora hay un par de cosas Voy a cortar las esquinas aquí. 335 00:15:23,150 --> 00:15:27,720 Técnicamente, no va a haber un línea nueva molesto, / n, en el extremo de 336 00:15:27,720 --> 00:15:28,820 cada una de estas palabras. 337 00:15:28,820 --> 00:15:31,770 Así que probablemente debería llamar a una función PHP llamado chop (), que se 338 00:15:31,770 --> 00:15:33,460 literalmente cortar eso. 339 00:15:33,460 --> 00:15:35,020 Y yo realmente necesito hacer una cosa más. 340 00:15:35,020 --> 00:15:38,380 Probablemente debería incrementar el tamaño de cada iteración, así que me quedo con la pista 341 00:15:38,380 --> 00:15:39,560 a nivel mundial de lo que es. 342 00:15:39,560 --> 00:15:43,180 Y la verdad, y esta es una de las aspectos más estúpidos de PHP, si eres 343 00:15:43,180 --> 00:15:46,950 utilizando una variable global, debe decir explícitamente que se encuentre. 344 00:15:46,950 --> 00:15:51,670 Así que voy a extenderme en mundial $ Size, mesa global de $, y ahora 345 00:15:51,670 --> 00:15:52,690 mi función es completa. 346 00:15:52,690 --> 00:15:57,475 >> Así que no es tan simple como antes, pero Probablemente tomó menos tiempo que el C 347 00:15:57,475 --> 00:15:58,220 versión, tal vez? 348 00:15:58,220 --> 00:15:58,730 Aceptar. 349 00:15:58,730 --> 00:16:00,390 >> Así que ahora vamos a hacer la comprobación de la función (). 350 00:16:00,390 --> 00:16:04,300 Vamos a ver si esto tuvo al menos el horas y horas que nos llevó en C. Así 351 00:16:04,300 --> 00:16:06,500 déjame ir por delante y declaro comprobar como una función. 352 00:16:06,500 --> 00:16:09,070 Toma en el argumento la palabra, que es va a venir de ortografía. 353 00:16:09,070 --> 00:16:13,410 Y yo sólo voy a comprobar si el siguiente isset variables, mesa 354 00:16:13,410 --> 00:16:18,400 soporte strtolower de la palabra - 355 00:16:18,400 --> 00:16:20,590 vamos a equilibrar todos mis paréntesis - 356 00:16:20,590 --> 00:16:24,275 a continuación, devolver true. 357 00:16:24,275 --> 00:16:27,020 358 00:16:27,020 --> 00:16:28,460 Otras ventas - 359 00:16:28,460 --> 00:16:30,330 que era realmente el disco parte de este programa. 360 00:16:30,330 --> 00:16:31,940 Si no, devuelve false. 361 00:16:31,940 --> 00:16:32,630 Hecho. 362 00:16:32,630 --> 00:16:33,460 Eso es verificación (). 363 00:16:33,460 --> 00:16:34,520 >> Ahora, ¿por qué funciona esto? 364 00:16:34,520 --> 00:16:37,040 Bueno, uno pasé en una palabra, que es una cadena. 365 00:16:37,040 --> 00:16:41,400 Dos, estoy revisando el interior del hash tabla, que se llama $ tabla. 366 00:16:41,400 --> 00:16:45,470 Estoy forzándolo a minúsculas llamando una función muy similar tolower () en 367 00:16:45,470 --> 00:16:48,580 C, pero esto hace toda la palabra, ni un solo personaje. 368 00:16:48,580 --> 00:16:52,680 Y si eso se ajusta, en otras palabras, se establece un valor, en otras palabras, 369 00:16:52,680 --> 00:16:54,880 si es verdad, entonces sí, se trata de una palabra. 370 00:16:54,880 --> 00:16:56,530 Porque yo puse ahí con load (). 371 00:16:56,530 --> 00:16:59,100 Y si no, voy a devolver false. 372 00:16:59,100 --> 00:17:00,090 >> Ahora los otros son fáciles. 373 00:17:00,090 --> 00:17:03,570 El tamaño de la función (), ¿cómo puedo hacer esto? 374 00:17:03,570 --> 00:17:05,230 Yo básicamente hago devolver $ size. 375 00:17:05,230 --> 00:17:07,770 Pero técnicamente necesito hacer esta cosa molesta. 376 00:17:07,770 --> 00:17:10,640 Y en realidad hasta oír, yo estaba cortando una de las esquinas de más. 377 00:17:10,640 --> 00:17:12,920 Realmente necesito hacer tabla global $. 378 00:17:12,920 --> 00:17:16,260 >> Pero dicho esto, descarga). 379 00:17:16,260 --> 00:17:17,380 Descargue () es increíble. 380 00:17:17,380 --> 00:17:20,500 Función de descarga (). 381 00:17:20,500 --> 00:17:23,990 ¿Cómo me quiero poner en práctica unload ()? 382 00:17:23,990 --> 00:17:25,079 Hecho. 383 00:17:25,079 --> 00:17:25,450 Aceptar. 384 00:17:25,450 --> 00:17:28,900 >> Así que descargar (), la gestión de memoria es completamente atendidos por usted en 385 00:17:28,900 --> 00:17:31,800 algo así como PHP y mucho de lenguajes de alto nivel. 386 00:17:31,800 --> 00:17:32,600 Así que esto es increíble. 387 00:17:32,600 --> 00:17:36,080 Como por qué demonios lo pasamos el pasado ocho semanas más en la escritura C 388 00:17:36,080 --> 00:17:41,030 aparentemente muy lento, realmente el tiempo consumen problemas con decenas de horas 389 00:17:41,030 --> 00:17:42,530 de trabajar en nuestro haber? 390 00:17:42,530 --> 00:17:46,110 >> Bueno, por un lado, esto puede funcionar bien para pequeños programas. 391 00:17:46,110 --> 00:17:47,840 Sin duda aceleró mi tiempo de desarrollo. 392 00:17:47,840 --> 00:17:49,790 Pero vamos a ver qué pasa en el mundo real. 393 00:17:49,790 --> 00:17:52,370 >> Déjame ir en este directorio en una ventana de terminal. 394 00:17:52,370 --> 00:17:53,370 Hay ortográfico. 395 00:17:53,370 --> 00:17:56,570 Y note como un aparte, y es posible que se han encontrado con este problema en conjunto 396 00:17:56,570 --> 00:17:58,190 seis o siete problemas n. 397 00:17:58,190 --> 00:18:01,610 Usted no tiene estrictamente a terminar los archivos PHP con. php. 398 00:18:01,610 --> 00:18:05,250 Si pones una línea como la primera en la parte superior, que es una línea especial 399 00:18:05,250 --> 00:18:10,980 de sintaxis que esencialmente significa encontrar el programa que se llama PHP y lo utilizan para 400 00:18:10,980 --> 00:18:12,270 interpretar este archivo. 401 00:18:12,270 --> 00:18:15,410 Así que ahora nadie sabe realmente que Estoy corriendo un programa PHP. 402 00:18:15,410 --> 00:18:19,860 Puedo correr simplemente como si fueron algo compilado en C. 403 00:18:19,860 --> 00:18:20,650 >> Pero aquí está la cosa. 404 00:18:20,650 --> 00:18:21,600 En realidad, vamos a hacer esto otra vez. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Hay ortográfico. 407 00:18:25,390 --> 00:18:26,720 Aceptar, 0,44 segundos. 408 00:18:26,720 --> 00:18:28,080 Llegó rápido esta vez. 409 00:18:28,080 --> 00:18:29,745 >> Ahora vamos a entrar en la versión de PHP. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Un bonito detalle. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Pero sólo pensar en la cantidad de tiempo Salvé en horario de oficina. 414 00:18:53,285 --> 00:18:56,990 415 00:18:56,990 --> 00:18:57,790 Aceptar. 416 00:18:57,790 --> 00:19:01,020 >> Así 3,59 segundos, que en realidad no suena exacta tampoco. 417 00:19:01,020 --> 00:19:03,710 Pero eso es porque cuento largo, cuando se está imprimiendo una gran cantidad 418 00:19:03,710 --> 00:19:06,840 de cosas a la pantalla, que sí ralentiza las cosas. 419 00:19:06,840 --> 00:19:11,260 Lo que realmente se tomó el CPU en el aparato era 3,59 segundos, en 420 00:19:11,260 --> 00:19:15,260 En contraste con C, que tuvo 0,44 segundo más recientemente. 421 00:19:15,260 --> 00:19:17,620 Eso es realmente un orden de diferente magnitud. 422 00:19:17,620 --> 00:19:20,280 >> Entonces, ¿dónde está ese precio viene? 423 00:19:20,280 --> 00:19:21,790 ¿Por qué es tan lento? 424 00:19:21,790 --> 00:19:24,220 ¿Por qué PHP realizar tan mal? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> AUDIENCIA: Usted realmente no utilizar una tabla hash. 427 00:19:26,550 --> 00:19:27,710 >> DAVID MALAN: Yo realmente no utilizar una tabla hash. 428 00:19:27,710 --> 00:19:28,760 Así que tipo de hecho. 429 00:19:28,760 --> 00:19:29,870 Así que es una matriz asociativa. 430 00:19:29,870 --> 00:19:33,650 Lo más probable, si la gente de PHP son muy inteligente, que utiliza por debajo de la 431 00:19:33,650 --> 00:19:39,520 campana una tabla hash real implementado en algo como C o C + +. 432 00:19:39,520 --> 00:19:41,290 Pero. 433 00:19:41,290 --> 00:19:42,760 Sí. 434 00:19:42,760 --> 00:19:44,010 >> AUDIENCIA: [inaudible]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID MALAN: Si. 437 00:19:47,080 --> 00:19:50,780 Así que cada una de las funciones que escribí ahora - En realidad, se puede decir que una vez más un 438 00:19:50,780 --> 00:19:51,480 poco más fuerte? 439 00:19:51,480 --> 00:19:54,509 >> AUDIENCIA: Cada una de las funciones que Ha incluido tiene mucho más completa 440 00:19:54,509 --> 00:19:56,610 la capacidad de - 441 00:19:56,610 --> 00:19:57,550 >> DAVID MALAN: Así que eso es muy cierto. 442 00:19:57,550 --> 00:20:01,490 Hay mucho más sobrecarga que estamos sin ver realmente al centrarse sólo en 443 00:20:01,490 --> 00:20:03,730 dictionary.php, que sólo escribí. 444 00:20:03,730 --> 00:20:08,020 Por el contrario, hay todo un intérprete va en el fondo. 445 00:20:08,020 --> 00:20:12,040 De hecho, cuando me encontré con este programa, no se estaba ejecutando ceros y unos compilados 446 00:20:12,040 --> 00:20:14,290 diseñada para mi CPU Intel. 447 00:20:14,290 --> 00:20:19,270 Más bien, se estaba ejecutando línea por línea Código PHP que se ve exactamente 448 00:20:19,270 --> 00:20:20,350 como lo escribió. 449 00:20:20,350 --> 00:20:22,475 Y así, cada vez que utilice un lenguaje interpretado, que 450 00:20:22,475 --> 00:20:23,850 en realidad no pagar este precio. 451 00:20:23,850 --> 00:20:27,010 Va a tomar algún tiempo para leer su principal archivo a abajo, de izquierda a 452 00:20:27,010 --> 00:20:30,740 derecha y, a continuación, ejecutar cada línea una y otra vez. 453 00:20:30,740 --> 00:20:34,250 >> Ahora bien, en realidad, sobre todo en la web, en realidad se puede acelerar este proceso 454 00:20:34,250 --> 00:20:38,660 al almacenar en caché los resultados de la Código PHP se interpreta. 455 00:20:38,660 --> 00:20:41,640 Y eso tiene sentido en la web, ya que si usted no tiene un usuario como 456 00:20:41,640 --> 00:20:46,300 yo aquí, pero 1.000 o 10.000 usuarios, tal vez la primera vez que el archivo es 457 00:20:46,300 --> 00:20:49,050 visitada es lento, pero a partir de entonces que es mucho más rápido. 458 00:20:49,050 --> 00:20:51,000 >> Pero esto también, de nuevo, es un fuera de comercio. 459 00:20:51,000 --> 00:20:53,870 Y para algo como un dato de la investigación establecer, o incluso algo tan grande como 460 00:20:53,870 --> 00:20:58,330 esto, sus usuarios con el tiempo se empezar a sentir que la desaceleración. 461 00:20:58,330 --> 00:21:02,670 >> Así que en resumen, interpretan las lenguas son muy de moda, muy popular, y 462 00:21:02,670 --> 00:21:06,710 francamente son probablemente los idiomas le debe llegar a la hora de resolver problemas 463 00:21:06,710 --> 00:21:08,200 después de CS50. 464 00:21:08,200 --> 00:21:12,720 Pero das cuenta de la cantidad que está realmente dando por sentado debajo de la capucha 465 00:21:12,720 --> 00:21:15,910 realmente esas últimas semanas de hachís tablas y árboles, e intenta, 466 00:21:15,910 --> 00:21:20,770 que se utilizan en última instancia a la realidad implementar cosas como abrir el paréntesis, 467 00:21:20,770 --> 00:21:24,200 corchetes, que podemos ahora gratitud dar por sentado. 468 00:21:24,200 --> 00:21:26,360 >> Así que echemos un vistazo ahora en este contexto web. 469 00:21:26,360 --> 00:21:29,890 Y mencioné la última vez que no hay un montón de superglobals en PHP que 470 00:21:29,890 --> 00:21:32,490 no son realmente relevantes en la línea de comandos. 471 00:21:32,490 --> 00:21:36,210 Son más relevante en el contexto de utilizar PHP en un contexto web. 472 00:21:36,210 --> 00:21:41,220 Así se ejecuta PHP en el servidor web con el fin para generar cosas como HTML. 473 00:21:41,220 --> 00:21:44,540 >> Y nos miramos en $ _GET y $ _POST, y ahí es donde automáticamente a los usuarios ' 474 00:21:44,540 --> 00:21:49,100 entrada termina simplemente si usted presenta una formar a un archivo con extensión. php en una web 475 00:21:49,100 --> 00:21:50,460 servidor como el aparato. 476 00:21:50,460 --> 00:21:53,310 Pero vamos a ver brevemente en $ _COOKIE Y $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> En términos sencillos, lo que es una cookie como usted lo entiende en el contexto de 478 00:21:56,670 --> 00:21:58,220 usando la web? 479 00:21:58,220 --> 00:21:59,450 >> AUDIENCIA: archivo de la computadora. 480 00:21:59,450 --> 00:21:59,920 >> DAVID MALAN: Si. 481 00:21:59,920 --> 00:22:03,500 Es un archivo en el ordenador del usuario plantado por cualquier sitio web 482 00:22:03,500 --> 00:22:04,410 le sucede a visitar. 483 00:22:04,410 --> 00:22:07,334 Así que cuando usted va a Facebook, cuando se va a bankofamerica.com, cuando vas 484 00:22:07,334 --> 00:22:10,330 a google.com, cuando usted va a casi cualquier sitio web en el mundo en estos días, 485 00:22:10,330 --> 00:22:14,850 incluyendo cs50.net, una cookie se planta en el equipo, lo cual es 486 00:22:14,850 --> 00:22:19,800 ya sea un valor almacenado en la memoria RAM en su ordenador en la memoria de su navegador, o 487 00:22:19,800 --> 00:22:22,800 de hecho a veces un archivo almacenado en su disco duro. 488 00:22:22,800 --> 00:22:26,960 >> Y lo que normalmente se almacena en el archivo no es su nombre de usuario, no su 489 00:22:26,960 --> 00:22:31,060 contraseña, por lo general no es algo sensible a menos que el sitio web no es tan 490 00:22:31,060 --> 00:22:35,040 bueno con su seguridad, sino más bien es un identificador único grande entre los 491 00:22:35,040 --> 00:22:35,680 otras cosas. 492 00:22:35,680 --> 00:22:38,920 Es un número aleatorio grande plantada en su ordenador, pero se puede pensar en como 493 00:22:38,920 --> 00:22:42,740 una especie de sello virtual de mano como de un club o algún parque de diversiones que 494 00:22:42,740 --> 00:22:47,160 permite que el personal, los dueños de ese servicio, para recordar quién eres. 495 00:22:47,160 --> 00:22:51,030 Así que si el número aleatorio grande es como 12345678, aunque eso es, obviamente, 496 00:22:51,030 --> 00:22:54,180 no demasiado aleatoria, pensar en que a medida que el sello en la mano que cuando usted visita 497 00:22:54,180 --> 00:22:57,930 facebook.com por primera vez, se erradicar ese número en la mano. 498 00:22:57,930 --> 00:23:01,510 Y luego porque usted habla de HTTP, ser un explorador, y porque Facebook 499 00:23:01,510 --> 00:23:06,440 obviamente habla el mismo como una banda servidor, el protocolo HTTP dice que 500 00:23:06,440 --> 00:23:09,930 en cualquier momento que posteriormente visitar facebook.com, si se trata de un segundo 501 00:23:09,930 --> 00:23:13,560 más tarde, una hora más tarde, incluso al día siguiente, siempre y cuando usted no tiene explícitamente 502 00:23:13,560 --> 00:23:17,050 cerrado la sesión, lo que efectivamente es como lavarse las manos. 503 00:23:17,050 --> 00:23:20,280 HTTP dice que usted debe presentar su sello en la mano cada vez que 504 00:23:20,280 --> 00:23:22,020 volver a ese sitio web. 505 00:23:22,020 --> 00:23:24,390 >> Lo que Facebook entonces no es que mira ese sello en la mano y 506 00:23:24,390 --> 00:23:26,850 dicen, oh, 123456789. 507 00:23:26,850 --> 00:23:30,260 No sé a primera vista que este es David Malan en Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, pero se pueden revisar su base de datos y decir, oh, la persona 509 00:23:34,690 --> 00:23:39,930 en cuyo equipo plantamos 123456789 es David Malan de Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Vamos a mostrar a ese usuario y luego su perfil página o su News Feed. 512 00:23:46,000 --> 00:23:49,660 >> Pero hay un problema aquí si esta es de hecho cómo funciona la web. 513 00:23:49,660 --> 00:23:51,390 Echemos un vistazo a un ejemplo rápido. 514 00:23:51,390 --> 00:23:55,190 Vamos a ir en realidad decir facebook.com. 515 00:23:55,190 --> 00:23:58,130 Pero antes de que pudiéramos ir allí, y mucho que me vaya por delante, ya abrir Chrome 516 00:23:58,130 --> 00:23:59,790 Inspector aquí abajo. 517 00:23:59,790 --> 00:24:01,140 Deja que te mire en la ficha red. 518 00:24:01,140 --> 00:24:06,020 Y ahora vamos a seguir adelante y escriba en https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 Y yo voy a hacer eso por lo que no vemos todas esas redirecciones y residuos 520 00:24:09,410 --> 00:24:10,660 tiempo mirando a través de ellos. 521 00:24:10,660 --> 00:24:12,690 Permítanme pulsa enter. 522 00:24:12,690 --> 00:24:13,130 >> Está bien. 523 00:24:13,130 --> 00:24:14,580 Vemos un montón de peticiones. 524 00:24:14,580 --> 00:24:15,640 Llega Facebook. 525 00:24:15,640 --> 00:24:16,930 Hay un montón de archivos. 526 00:24:16,930 --> 00:24:19,290 Y aquí, por mi mención de latencia última vez, eso es 527 00:24:19,290 --> 00:24:21,240 una gran cantidad de peticiones HTTP. 528 00:24:21,240 --> 00:24:23,700 Pero el primero es, probablemente, la más interesante. 529 00:24:23,700 --> 00:24:26,420 >> Así que vamos a desplazarse hasta aquí, y Voy a acercar un en un segundo. 530 00:24:26,420 --> 00:24:29,090 Esto va a ser una especie de un desastre, pero vamos a ver. 531 00:24:29,090 --> 00:24:31,660 Facebook nos está enviando un Todo montón de cosas. 532 00:24:31,660 --> 00:24:33,490 >> Pero espera, interesante. 533 00:24:33,490 --> 00:24:37,880 Están plantando no uno, sino cuatro sellos mano en mi mano aquí. 534 00:24:37,880 --> 00:24:40,400 Set-Cookie, Set-cookie Set-Cookie, set-cookie. 535 00:24:40,400 --> 00:24:44,030 Y hay algunas características aquí. 536 00:24:44,030 --> 00:24:46,170 Todos ellos mencionan algunos tipo de caducidad. 537 00:24:46,170 --> 00:24:50,090 Y parece que Facebook es la esperanza para que me recuerdes hasta 2015. 538 00:24:50,090 --> 00:24:53,670 Así que eso es probablemente el tiempo por el cual Tengo que cerrar la sesión o que sólo va a 539 00:24:53,670 --> 00:24:55,710 asumo automáticamente que soy no volver. 540 00:24:55,710 --> 00:24:57,840 Así que eso es en realidad un decente cantidad de tiempo. 541 00:24:57,840 --> 00:24:59,170 >> Y hay alguna otra cosas que hacer aquí. 542 00:24:59,170 --> 00:25:03,036 Esta cookie parece ser la fuerza borrado diciendo que expiró en 1970 543 00:25:03,036 --> 00:25:04,460 antes de que existieran las cookies. 544 00:25:04,460 --> 00:25:06,510 Así que el navegador sólo va asumir bien, eso es como 545 00:25:06,510 --> 00:25:07,910 lavar el sello manos. 546 00:25:07,910 --> 00:25:11,240 >> Pero ahora, cuando mi navegador hace una solicitud posterior - 547 00:25:11,240 --> 00:25:14,340 déjame ir adelante y hacer esto una y recarga. 548 00:25:14,340 --> 00:25:18,170 Ahora voy a retroceder a la superior petición y bajar 549 00:25:18,170 --> 00:25:20,760 aquí, los encabezados de solicitud. 550 00:25:20,760 --> 00:25:21,390 Note esto. 551 00:25:21,390 --> 00:25:25,280 Así que ahora estoy bajo no cabeceras de respuesta, pero note que dice encabezados de solicitud. 552 00:25:25,280 --> 00:25:29,220 Y note que mi navegador como parte de su solicitud después de golpear recarga tiene 553 00:25:29,220 --> 00:25:32,780 enviado al menos la siguiente información. 554 00:25:32,780 --> 00:25:34,670 No establecido en cookies, pero cookie. 555 00:25:34,670 --> 00:25:38,750 Así que esta es la línea, la cabecera HTTP de modo decirlo, donde mi navegador es una especie 556 00:25:38,750 --> 00:25:43,340 de, sin que yo lo supiera presentar mi mano para la inspección de Facebook. 557 00:25:43,340 --> 00:25:46,020 >> Así pues, estas cookies pueden ser utilizado entonces para qué? 558 00:25:46,020 --> 00:25:49,420 Para recordar quién es usted, o recordar cómo muchas veces que he estado allí, o 559 00:25:49,420 --> 00:25:50,280 realmente nada. 560 00:25:50,280 --> 00:25:52,742 >> Así que aquí está counter.php. 561 00:25:52,742 --> 00:25:53,780 Y permítanme acercar la fuente. 562 00:25:53,780 --> 00:25:58,380 Y cada vez que vuelvo a cargar esta página, previo aviso sea ​​para recordar el número de veces 563 00:25:58,380 --> 00:25:59,250 Yo he estado allí. 564 00:25:59,250 --> 00:26:00,570 Bueno, eso no es tan impresionante. 565 00:26:00,570 --> 00:26:03,140 Vamos a cerrar esa lengüeta, y ahora vamos a volver a 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Oh, eso es interesante. 568 00:26:08,970 --> 00:26:10,960 Todavía recordaba, incluso aunque yo cerré la pestaña. 569 00:26:10,960 --> 00:26:14,010 Y, francamente, si cierro el navegador, si se aplica de la manera correcta, yo 570 00:26:14,010 --> 00:26:18,950 Aún recordaba que este usuario es que él o ella era la primera vez, y 571 00:26:18,950 --> 00:26:22,840 sólo una vez que entro en el menú de Chrome, que aquí está aquí, y vaya a 572 00:26:22,840 --> 00:26:25,990 Historia, y haga clic en Eliminar datos de navegación, como algunos de ustedes pueden tener en el 573 00:26:25,990 --> 00:26:33,050 pasado, sólo entonces las cookies realmente ser borrado durante web 574 00:26:33,050 --> 00:26:33,970 desarrollo. 575 00:26:33,970 --> 00:26:35,340 >> Por lo tanto, si vamos - 576 00:26:35,340 --> 00:26:37,080 vamos a cerrar hasta gedit aquí. 577 00:26:37,080 --> 00:26:38,910 Y si nos vamos ahora a este archivo. 578 00:26:38,910 --> 00:26:44,210 Déjame ir a nuestro vhosts / localhost / público, y déjame hacer 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Tenga en cuenta que esta es una muy programa sencillo. 581 00:26:48,350 --> 00:26:50,250 Es un sitio web muy simple. 582 00:26:50,250 --> 00:26:51,770 >> Así que la parte superior del archivo está a sólo comentarios. 583 00:26:51,770 --> 00:26:54,930 Pero aquí está una nueva línea que usted puede han visto ya en p-set siete, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Se trata de una línea de código PHP que básicamente le dice al servidor web, dar a 586 00:27:00,380 --> 00:27:03,400 Asegúrese de estampar las manos y hacer asegúrate de revisar sellos de mano. 587 00:27:03,400 --> 00:27:06,810 Eso es todo lo que hace la línea, y hace todo ese proceso para nosotros. 588 00:27:06,810 --> 00:27:09,510 Entonces noto Acabo dos sucursales aquí. 589 00:27:09,510 --> 00:27:14,150 Si el contador de llave en el interior de este variable global especial llamado 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Está ajustado - en otras palabras, si hay algo de valor allí - 591 00:27:18,010 --> 00:27:22,440 vamos a hacerlo y lo almacenan en un local de variable llamada $ mostrador. 592 00:27:22,440 --> 00:27:27,000 Si no, vamos a asignar $ counter el valor predeterminado de 0. 593 00:27:27,000 --> 00:27:30,320 >> Ahora, aquí hay un aspecto de PHP que es tanto una bendición como una maldición. 594 00:27:30,320 --> 00:27:32,080 PHP es un poco descuidado. 595 00:27:32,080 --> 00:27:35,160 Así, mientras que en C, ¿cuál sería la ámbito de aplicación de contador de haber sido 596 00:27:35,160 --> 00:27:36,725 ya sea aquí o aquí? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Hubiera sido confinado a esas llaves. 599 00:27:41,690 --> 00:27:42,090 ¿Sabes una cosa? 600 00:27:42,090 --> 00:27:46,920 En PHP, existe incluso fuera de los llaves, aquí, y aquí, 601 00:27:46,920 --> 00:27:49,120 y aquí, y aquí, y incluso por debajo. 602 00:27:49,120 --> 00:27:52,400 Por eso digo que es una bendición en el sentido que usted no tiene que pensar como 603 00:27:52,400 --> 00:27:54,070 duro como lo hicimos hace semanas. 604 00:27:54,070 --> 00:27:56,880 Pero también es un poco de una maldición en la que sin importar dónde se utiliza una variable en 605 00:27:56,880 --> 00:28:00,020 PHP, por lo menos en un programa como este, es accesible a nivel mundial para 606 00:28:00,020 --> 00:28:01,170 bien o para mal. 607 00:28:01,170 --> 00:28:06,130 Así que hay que tener en cuenta ahora que las variables no pueden ser indefinidos. 608 00:28:06,130 --> 00:28:07,640 Es posible que haya que prevén otras disposiciones. 609 00:28:07,640 --> 00:28:09,460 >> Pero, ¿qué voy a hacer, en última instancia? 610 00:28:09,460 --> 00:28:13,160 Voy a guardar en el interior de ese mundial variable como un valor de la 611 00:28:13,160 --> 00:28:17,060 contador de llave el resultado de haciendo contra más 1. 612 00:28:17,060 --> 00:28:18,910 Así que esto es sólo la aritmética que hace el 613 00:28:18,910 --> 00:28:20,590 incrementación de ese contador. 614 00:28:20,590 --> 00:28:24,850 Y el hecho de que estoy almacenando que valor de nuevo aquí significa es que 615 00:28:24,850 --> 00:28:29,970 actualizar la base de datos esencialmente a recuerde que 123456789 de usuario ha sido 616 00:28:29,970 --> 00:28:31,010 aquí dos veces. 617 00:28:31,010 --> 00:28:33,780 Y cuando lo hago de nuevo la próxima vez que recargar la página, se va a comprobar 618 00:28:33,780 --> 00:28:36,710 mi sello en la mano y decir, ah, 123456789 usuario tiene ahora 619 00:28:36,710 --> 00:28:38,410 estado tres veces. 620 00:28:38,410 --> 00:28:43,390 >> ¿Y qué PHP y lenguajes similares están haciendo para nosotros es que están pensando 621 00:28:43,390 --> 00:28:47,720 cómo y dónde y por cuánto tiempo para almacenar los valores en este especial 622 00:28:47,720 --> 00:28:48,830 superglobal. 623 00:28:48,830 --> 00:28:52,750 Y esto superglobal la próxima vez que visite la página es una especie de arte de magia 624 00:28:52,750 --> 00:28:57,440 pre-poblada, llena de valores que Estuvimos allí la última vez que visitó, 625 00:28:57,440 --> 00:29:02,310 si eso fue hace un segundo, una semana hace, o en 2013, y ahora estamos hablando 626 00:29:02,310 --> 00:29:03,790 sobre 2015. 627 00:29:03,790 --> 00:29:07,600 PHP y el servidor web se encargue de todo eso para usted. 628 00:29:07,600 --> 00:29:08,850 >> AUDIENCIA: [inaudible]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID MALAN: Variables en PHP son esencialmente siempre mundial a menos que 631 00:29:15,760 --> 00:29:18,400 declararlos en el interior de una función, y entonces ellos son locales 632 00:29:18,400 --> 00:29:19,420 sólo la función. 633 00:29:19,420 --> 00:29:22,300 Pero como yo no he escrito ningún funciones, ahora son efectivamente 634 00:29:22,300 --> 00:29:25,090 mundial a lo largo de toda mi archivo aquí. 635 00:29:25,090 --> 00:29:26,040 >> AUDIENCIA: ¿Hay una manera para hacerlos local? 636 00:29:26,040 --> 00:29:28,470 >> DAVID MALAN: ¿Hay alguna manera de hacerlos local? 637 00:29:28,470 --> 00:29:30,680 Sólo envolviéndolos en funciones. 638 00:29:30,680 --> 00:29:32,790 Lo que en la última versión del PHP, usted puede hacer esto con 639 00:29:32,790 --> 00:29:34,130 una función anónima. 640 00:29:34,130 --> 00:29:35,930 Pero más sobre esto en el contexto de JavaScript. 641 00:29:35,930 --> 00:29:37,260 Pero la respuesta corta es no. 642 00:29:37,260 --> 00:29:40,888 Una respuesta más larga es sí. 643 00:29:40,888 --> 00:29:42,380 Niza. 644 00:29:42,380 --> 00:29:43,380 Buena pregunta del cuestionario. 645 00:29:43,380 --> 00:29:43,930 Está bien. 646 00:29:43,930 --> 00:29:47,760 >> Así que, por último, la página en sí es En realidad es bastante simple. 647 00:29:47,760 --> 00:29:51,470 Tenga en cuenta que una vez que salgo de código PHP, el recuerdo que todas estas cosas abajo 648 00:29:51,470 --> 00:29:53,700 A continuación es sólo va a conseguir escupir a prima para el navegador. 649 00:29:53,700 --> 00:29:57,050 Lo cual está bien, porque yo no quiero mandar al usuario algo de HTML, pero sí quiero 650 00:29:57,050 --> 00:29:59,140 para actualizar dinámicamente que HTML. 651 00:29:59,140 --> 00:30:03,930 Y una manera de que puedo hacer es clasificar de caer muy rápidamente de nuevo en PHP 652 00:30:03,930 --> 00:30:07,730 modo, el uso de paréntesis abierto pregunta signo igual, y luego la salida el valor 653 00:30:07,730 --> 00:30:08,650 de contador. 654 00:30:08,650 --> 00:30:12,360 >> O si esto parece un poco críptico, este signo igual es en realidad sólo algunas 655 00:30:12,360 --> 00:30:16,190 azúcar sintáctico para este printf ($ contador). 656 00:30:16,190 --> 00:30:19,160 Pero, francamente, eso es sólo un poco fea y un poco molesto con el tipo. 657 00:30:19,160 --> 00:30:23,660 Así que PHP muy bien ofrece esta característica donde sólo se puede decir que sea más 658 00:30:23,660 --> 00:30:25,450 sucinta de la misma manera. 659 00:30:25,450 --> 00:30:26,940 >> Entonces, ¿qué está pasando debajo el capó? 660 00:30:26,940 --> 00:30:31,210 Echemos un vistazo rápido a la red ficha aquí para counter.php. 661 00:30:31,210 --> 00:30:35,090 Y déjame seguir adelante y primera vamos a borrar las cookies. 662 00:30:35,090 --> 00:30:38,670 Vayamos de datos de navegación desde el principio del tiempo. 663 00:30:38,670 --> 00:30:39,680 Ahora vamos a volver por aquí. 664 00:30:39,680 --> 00:30:41,340 Ahora vamos a cargar la página. 665 00:30:41,340 --> 00:30:42,170 Y estoy de vuelta en cero. 666 00:30:42,170 --> 00:30:44,810 Porque mi sello en la mano se ha lavado, Ahora recibe una nueva cookie. 667 00:30:44,810 --> 00:30:48,780 >> De hecho, si me veo en la ficha Red y mirar las cabeceras de respuesta, notificación 668 00:30:48,780 --> 00:30:51,960 que el aparato me está enviando una cookie cuyo nombre es un tanto 669 00:30:51,960 --> 00:30:55,820 arbitrariamente, pero un poco razonablemente, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 Y me está enviando esto realmente número aleatorio grande. 671 00:30:58,440 --> 00:30:59,440 No es un buen número. 672 00:30:59,440 --> 00:31:00,390 No es bastante hexadecimal. 673 00:31:00,390 --> 00:31:03,600 Es una especie de cadena alfanumérica, pero se supone que es al azar. 674 00:31:03,600 --> 00:31:06,830 Y ese es el sello en la mano por lo que hablo lo que me refiero. 675 00:31:06,830 --> 00:31:11,960 >> Mientras tanto, si hago clic en reload y luego mirar a esta segunda línea para mi segundo 676 00:31:11,960 --> 00:31:17,600 solicitud, aviso ahora que mi petición cabeceras incluyen PHPSESSID es igual a este, 677 00:31:17,600 --> 00:31:19,390 no se establece en cookies, pero sólo cookie. 678 00:31:19,390 --> 00:31:22,950 Y eso es la presentación de mi navegador de mi sello en la mano. 679 00:31:22,950 --> 00:31:28,820 >> Así que ahora como un reclamo, y hablaremos más sobre esto en una semana o así, pero 680 00:31:28,820 --> 00:31:31,590 ¿de qué manera esto le crea vulnerable, tu cuenta de Facebook 681 00:31:31,590 --> 00:31:34,137 vulnerable, y el otro tal cuentas vulnerable? 682 00:31:34,137 --> 00:31:35,510 >> AUDIENCIA: Si alguien tiene su cookie. 683 00:31:35,510 --> 00:31:36,750 >> DAVID MALAN: Sí, si alguien tiene su cookie. 684 00:31:36,750 --> 00:31:39,920 Quiero decir verdad, al igual que algunos de ustedes podría haber intentado al igual que un club o un 685 00:31:39,920 --> 00:31:44,030 parque de atracciones, si intenta algo como esta para copiar el sello, aunque 686 00:31:44,030 --> 00:31:47,560 hacia atrás sobre la mano de otra persona, y entonces él o ella lo presenta como 687 00:31:47,560 --> 00:31:53,250 su cuenta, si lo que realmente se ve idéntica, 123456789, entonces la web 688 00:31:53,250 --> 00:31:57,980 servidor está aparentemente sólo va a confiamos en que ese usuario es usted. 689 00:31:57,980 --> 00:32:01,450 >> Y esto es de hecho una fundamental amenaza cada vez que utilice las cookies 690 00:32:01,450 --> 00:32:05,420 porque si alguien falsifica por así hablar su cookie, se da cuenta de lo que 691 00:32:05,420 --> 00:32:08,660 es, ya sea por verdaderamente copiarlo al mirar en su ordenador 692 00:32:08,660 --> 00:32:09,890 y siendo así, bien. 693 00:32:09,890 --> 00:32:14,520 Galletas de David es JJ3JIK y así sucesivamente, y son lo suficientemente inteligentes como para saber 694 00:32:14,520 --> 00:32:18,080 cómo una especie de enviar manualmente que cookie de un navegador o desde un 695 00:32:18,080 --> 00:32:22,350 programa que escriben, que pudieron totalmente iniciar sesión en un sitio web que usted. 696 00:32:22,350 --> 00:32:28,560 No es tan difícil de fingir ser otra persona a menos que volvamos p-set 697 00:32:28,560 --> 00:32:30,790 dos, que introdujo qué? 698 00:32:30,790 --> 00:32:32,065 >> AUDIENCIA: Criptografía. 699 00:32:32,065 --> 00:32:33,860 >> DAVID MALAN: Con unas bits de la criptografía. 700 00:32:33,860 --> 00:32:36,550 Criptografía simple, al menos en el edición estándar, pero cripto 701 00:32:36,550 --> 00:32:36,870 no obstante. 702 00:32:36,870 --> 00:32:37,410 menos. 703 00:32:37,410 --> 00:32:41,440 Así que resulta si cifra todos estas cabeceras utilizando algo que te 704 00:32:41,440 --> 00:32:48,770 ahora podría saber más familiarmente como SSL, secure socket layer, o https:// URLs, 705 00:32:48,770 --> 00:32:51,890 a continuación, todas estas cosas que hemos estado mirando en realidad están encriptados, 706 00:32:51,890 --> 00:32:54,800 lo que significa que es como si no puede leer el sello en la mano. 707 00:32:54,800 --> 00:32:59,350 Sólo facebook.com puede, o google.com, o en este caso, el aparato puede 708 00:32:59,350 --> 00:33:00,550 leer ese sello en la mano. 709 00:33:00,550 --> 00:33:04,020 >> Trágicamente, sin embargo, una y otra vez, esto es muy apropiada con las cosas de la NSA 710 00:33:04,020 --> 00:33:06,410 en los últimos tiempos, incluso SSL se puede romper. 711 00:33:06,410 --> 00:33:09,850 Y en realidad no es tan difícil incluso a agrietarse que el cifrado. 712 00:33:09,850 --> 00:33:12,040 No tanto por las técnicas de encriptación, pero engañando al 713 00:33:12,040 --> 00:33:15,720 navegador en el descifrado los datos prematuramente. 714 00:33:15,720 --> 00:33:17,880 Pero, de nuevo, le toman el pelo con que en poco tiempo. 715 00:33:17,880 --> 00:33:21,242 Por ahora, sólo miedo. 716 00:33:21,242 --> 00:33:23,070 Es trágicamente tipo de verdad. 717 00:33:23,070 --> 00:33:23,760 >> Está bien. 718 00:33:23,760 --> 00:33:27,910 Así que, ¿de dónde viene esto ahora nos deja? 719 00:33:27,910 --> 00:33:29,010 Bueno, vamos a hacer esto. 720 00:33:29,010 --> 00:33:31,790 Vamos a seguir adelante y tomar una rápida bromista antes de tomar un descanso. 721 00:33:31,790 --> 00:33:33,790 Y creo que vamos a detenernos un poco más hoy en día, sino que vamos a bucear en 722 00:33:33,790 --> 00:33:37,850 algo nuevo y atractivo, que se abrir el apetito para más. 723 00:33:37,850 --> 00:33:38,950 Así que ese es el resumen. 724 00:33:38,950 --> 00:33:41,520 >> Así SQL, empezamos a hablar de muy brevemente la última vez. 725 00:33:41,520 --> 00:33:44,670 Usted realmente va a conseguir sus manos sucias con un poco de ella en p-set siete. 726 00:33:44,670 --> 00:33:46,480 Y en términos sencillos, lo que hace SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 hacer por usted? 729 00:33:49,850 --> 00:33:50,310 ¿Qué es? 730 00:33:50,310 --> 00:33:51,546 Sí. 731 00:33:51,546 --> 00:33:53,240 >> AUDIENCIA: te permite acceder a los datos. 732 00:33:53,240 --> 00:33:53,360 >> DAVID MALAN: Si. 733 00:33:53,360 --> 00:33:55,120 Son ustedes los datos de acceso permite a en una base de datos. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 Y este es esencialmente un lenguaje de programación. 736 00:33:59,890 --> 00:34:03,400 Hay características de la misma que ni siquiera a utilizar en clase. 737 00:34:03,400 --> 00:34:04,710 Pero usted puede efectivamente definir funciones. 738 00:34:04,710 --> 00:34:06,870 Se llaman almacenado procedimientos de SQL. 739 00:34:06,870 --> 00:34:09,860 Pero lo mantendremos bastante simple y sólo utilizarlo para algunas operaciones básicas 740 00:34:09,860 --> 00:34:14,320 como la selección de los datos, insertar datos, actualización de los datos y eliminar datos. 741 00:34:14,320 --> 00:34:17,400 >> Y realmente se puede pensar en una base de datos, como una base de datos SQL, como se acaba 742 00:34:17,400 --> 00:34:18,800 siendo de Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Dado que SQL se refiere a una relacional base de datos, donde 744 00:34:21,989 --> 00:34:23,480 relación sólo significa tablas. 745 00:34:23,480 --> 00:34:24,739 Las filas y columnas. 746 00:34:24,739 --> 00:34:27,929 Así que cualquier cosa que usted puede poner en una hoja de cálculo así o Google Docs, 747 00:34:27,929 --> 00:34:32,460 se puede poner en una base de datos SQL por la que se declara una tabla. 748 00:34:32,460 --> 00:34:34,800 >> Ahora, ¿cómo realmente acceso esa información? 749 00:34:34,800 --> 00:34:38,239 Bueno, con los comandos o consultas como esta. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, UPDATE y DELETE. 751 00:34:40,199 --> 00:34:44,489 Y para la mayor parte, esos son los cuatro únicos ingredientes que necesitará para 752 00:34:44,489 --> 00:34:47,370 hacer algo muy poderoso en el problema de establecer siete. 753 00:34:47,370 --> 00:34:49,940 >> Ahora, de vuelta en el día, lo haría realidad interactuar con una base de datos en un 754 00:34:49,940 --> 00:34:52,730 ventana de terminal en blanco y negro en un símbolo parpadeando como esto. 755 00:34:52,730 --> 00:34:56,370 Y la base de datos que nos estamos quedando en el aparato se llama MySQL, que es 756 00:34:56,370 --> 00:34:58,560 motor de base de datos de código libre y abierto. 757 00:34:58,560 --> 00:35:02,240 Si se busca en Google y leer la Wikipedia artículo, usted sabrá que el nombre es 758 00:35:02,240 --> 00:35:05,060 un poco de transición para algunos versiones de Linux. 759 00:35:05,060 --> 00:35:10,460 Base de datos de Maria es en realidad un tenedor por decirlo de MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Larga historia corta, Oracle compró MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle es una empresa grande. 762 00:35:13,870 --> 00:35:17,010 La gente ha estado preocupado de que lo haría Ya no siendo fuente tan abierta, 763 00:35:17,010 --> 00:35:20,930 así que esto es sólo una copia de MySQL, que es siendo libre, todavía de código abierto, y 764 00:35:20,930 --> 00:35:23,550 instalado en Fedora Linux por defecto. 765 00:35:23,550 --> 00:35:26,130 >> Pero este es un tipo de dolor en el cuello de familiarizarse con un 766 00:35:26,130 --> 00:35:27,310 base de datos de esta manera. 767 00:35:27,310 --> 00:35:30,560 Así que incluimos en el aparato CS50 una herramienta de código abierto llamado 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Sólo una coincidencia que está escrito en PHP. 770 00:35:33,940 --> 00:35:36,450 No hay fundamental necesidad de PHP aquí. 771 00:35:36,450 --> 00:35:40,090 Pero esto es sólo una herramienta basada en web que hemos descargado de forma gratuita, instalada en 772 00:35:40,090 --> 00:35:43,850 el aparato, que nos permite tener una interfaz gráfica de usuario con el cual 773 00:35:43,850 --> 00:35:48,610 para explorar la base de datos de siete p-set con que para crear nuevas bases de datos, 774 00:35:48,610 --> 00:35:51,980 decir para su propio proyecto final si lo similar, y en última instancia, crear 775 00:35:51,980 --> 00:35:55,900 sitios web dinámicos como CS50 Finanzas que le permiten consultar datos y 776 00:35:55,900 --> 00:35:58,140 actualizar los datos dinámicamente. 777 00:35:58,140 --> 00:36:01,420 >> No vas a tener que usar sólo un simple archivo de texto o CSV. 778 00:36:01,420 --> 00:36:05,950 En realidad se puede utilizar una base de datos inteligente programa para que pueda ejecutar más 779 00:36:05,950 --> 00:36:10,240 consultas sofisticadas que acaba de leer a través de todo linealmente. 780 00:36:10,240 --> 00:36:14,150 >> Así, por ejemplo, esto es lo que damos que fuera de la caja para el p-set siete. 781 00:36:14,150 --> 00:36:18,280 Esta es una tabla con al menos aparentemente tres columnas, una de las cuales es 782 00:36:18,280 --> 00:36:21,450 nombre de usuario, uno de los cuales es de hash, y el otro de los cuales es ID. 783 00:36:21,450 --> 00:36:26,200 >> Pero lo interesante, y sólo para desentrañar un pensamiento aquí, nombre de usuario 784 00:36:26,200 --> 00:36:29,270 es de suponer que ya único, ¿verdad? 785 00:36:29,270 --> 00:36:31,190 Quiero decir, la mayoría de cualquier sitio web, si usted tiene un nombre de usuario, hay 786 00:36:31,190 --> 00:36:32,370 no puede haber dos césares. 787 00:36:32,370 --> 00:36:33,440 No puede haber dos Malans. 788 00:36:33,440 --> 00:36:34,950 No puede haber dos jharvards. 789 00:36:34,950 --> 00:36:35,600 Su único. 790 00:36:35,600 --> 00:36:38,610 De lo contrario, ellos no saben que jharvard que realmente es. 791 00:36:38,610 --> 00:36:42,710 Entonces, ¿cuál podría ser la motivación para que también que tiene una tercera columna de la izquierda 792 00:36:42,710 --> 00:36:46,970 allí llamado ID, que se parece a una número que es similar único? 793 00:36:46,970 --> 00:36:51,300 Se siente un poco redundante a mí a primera vista. 794 00:36:51,300 --> 00:36:54,910 ¿Por qué podría ser convincente para tener no sólo los nombres de usuario únicos, 795 00:36:54,910 --> 00:36:56,837 sino también un único número? 796 00:36:56,837 --> 00:36:59,460 >> AUDIENCIA: Podrían tener la misma contraseña. 797 00:36:59,460 --> 00:37:01,720 >> DAVID MALAN: La gente puede tener la misma contraseña, claro. 798 00:37:01,720 --> 00:37:03,900 Eso podría suceder absolutamente. 799 00:37:03,900 --> 00:37:08,270 Pero si tienen este nombre de usuario único, I argumentarían que eso realmente no 800 00:37:08,270 --> 00:37:11,630 importa, porque si escribe en su nombre de usuario, sólo tengo que comprobar su 801 00:37:11,630 --> 00:37:15,060 contraseña, su picadillo de la misma. 802 00:37:15,060 --> 00:37:15,970 ¿Por qué más? 803 00:37:15,970 --> 00:37:17,950 >> AUDIENCIA: la búsqueda más rápida. 804 00:37:17,950 --> 00:37:18,680 >> DAVID MALAN: la búsqueda más rápida. 805 00:37:18,680 --> 00:37:19,548 ¿Por qué? 806 00:37:19,548 --> 00:37:21,460 >> AUDIENCIA: ID es sólo uno. 807 00:37:21,460 --> 00:37:24,040 >> DAVID MALAN: ID es sólo un personaje, o para ser más preciso, es un número, 808 00:37:24,040 --> 00:37:26,910 por lo que es probable que los 32 bits o algo por el estilo. 809 00:37:26,910 --> 00:37:30,270 Mientras que el nombre de usuario, por lo visto Jason Arriba de Hirschhorn hay una especie de 810 00:37:30,270 --> 00:37:33,900 ridículamente larga, y que va a me llevará mucho más tiempo para cadena 811 00:37:33,900 --> 00:37:40,910 comparar H-I-R-S-C-H-H-O-R-N, y tal vez a / 0, o algo así, con el fin 812 00:37:40,910 --> 00:37:45,100 para buscar a Jason, en lugar de sólo diciendo dame usuario número dos. 813 00:37:45,100 --> 00:37:46,510 Eso es 32 bits. 814 00:37:46,510 --> 00:37:48,550 Es una sola INT que usted tiene que comparar. 815 00:37:48,550 --> 00:37:52,150 Y, de hecho, eso es exactamente por qué las bases de datos tienden a asignar identificadores únicos a 816 00:37:52,150 --> 00:37:53,710 filas en ellos. 817 00:37:53,710 --> 00:37:56,280 >> Ahora, ¿qué otros tipos de datos están ahí además de INT y al parecer 818 00:37:56,280 --> 00:37:57,160 cadenas como esta? 819 00:37:57,160 --> 00:37:59,700 Bueno, para ser más correcto, Bases de datos SQL, como 820 00:37:59,700 --> 00:38:02,060 MySQL, tiene campos CHAR. 821 00:38:02,060 --> 00:38:05,320 Y CHAR un poco engañosa No es una sola CHAR. 822 00:38:05,320 --> 00:38:10,290 Un campo CHAR en una base de datos MySQL es uno o más caracteres, pero es un 823 00:38:10,290 --> 00:38:11,780 número fijo de caracteres. 824 00:38:11,780 --> 00:38:15,710 >> Así, por ejemplo, si voy a phpMyAdmin como es posible que ya tienen, o 825 00:38:15,710 --> 00:38:21,340 pronto será un problema establecido siete, y me voy a mi base de datos, y sólo por diversión, 826 00:38:21,340 --> 00:38:25,700 vamos a crear una nueva tabla llamada prueba con sólo dos columnas. 827 00:38:25,700 --> 00:38:27,160 Voy a continuación, haga clic en Go. 828 00:38:27,160 --> 00:38:30,070 Y esto será bastante familiar, especialmente a medida que se ocupa vanamente 829 00:38:30,070 --> 00:38:31,130 por su cuenta. 830 00:38:31,130 --> 00:38:34,140 Aquí yo podría escribir ID para crear una nueva tabla de tipo INT. 831 00:38:34,140 --> 00:38:37,770 Pero aquí yo podría escribir nombre de usuario para recrear la tabla anterior. 832 00:38:37,770 --> 00:38:40,700 Y note que tengo un montón de tipos para elegir. 833 00:38:40,700 --> 00:38:43,610 >> Y esto también es la razón por phpMyAdmin es una especie de agradable. 834 00:38:43,610 --> 00:38:46,770 Es una especie de auto-aprendizaje en que puede simplemente especie de punto y haga clic en, y 835 00:38:46,770 --> 00:38:50,730 mirar los menús desplegables, y deducir de que lo que le da poderes SQL. 836 00:38:50,730 --> 00:38:54,090 >> Y de hecho, si elijo CHAR, que luego tiene que especificar la longitud, o cómo 837 00:38:54,090 --> 00:38:55,940 muchos valores, el número de caracteres. 838 00:38:55,940 --> 00:39:00,090 Valores tan comunes son cosas como 255, pero eso es un poco largo. 839 00:39:00,090 --> 00:39:02,250 Comúnmente es ocho para un nombre de usuario. 840 00:39:02,250 --> 00:39:03,590 Pero eso es un poco pequeño en estos días. 841 00:39:03,590 --> 00:39:05,430 Así que esta es una decisión de diseño. 842 00:39:05,430 --> 00:39:08,630 Es 8 caracteres como máximo, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 Es realmente depende de ti. 844 00:39:09,830 --> 00:39:12,350 Pero un campo CHAR es un número fijo. 845 00:39:12,350 --> 00:39:16,420 Así que debes elegir muy pocos y eres un poco atornillado si quieres un nombre de usuario más tiempo. 846 00:39:16,420 --> 00:39:19,132 Elija demasiados y lo que es el inconveniente? 847 00:39:19,132 --> 00:39:20,820 >> AUDIENCIA: [inaudible]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID MALAN: Es un desperdicio. 849 00:39:21,620 --> 00:39:24,835 Al igual que en C, si usted tiene una más grande trozo de memoria que usted necesita, usted es 850 00:39:24,835 --> 00:39:27,190 perdiendo el tiempo y malgastando espacio. 851 00:39:27,190 --> 00:39:31,430 Así como una alternativa, existe VARCHAR, que resuelve este problema 852 00:39:31,430 --> 00:39:36,390 el tratamiento de la longitud no como una longitud fija, sino como una longitud máxima, y ​​el uso de un 853 00:39:36,390 --> 00:39:40,990 número variable de CHAR, que luego tiende a utilizar sólo como muchos CHAR como usted 854 00:39:40,990 --> 00:39:42,710 realmente se necesita. 855 00:39:42,710 --> 00:39:43,670 Eso suena perfecto. 856 00:39:43,670 --> 00:39:45,640 >> ¿Por qué no nos deshacemos de la Datos de tipo char, entonces? 857 00:39:45,640 --> 00:39:48,500 ¿Cuáles podrían ser las desventajas de utilizando datos VARCHAR, que suena 858 00:39:48,500 --> 00:39:51,644 como si fuera una bonita victoria? 859 00:39:51,644 --> 00:39:52,596 ¿Sí? 860 00:39:52,596 --> 00:39:53,846 >> AUDIENCIA: [inaudible]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID MALAN: OK, bueno. 863 00:39:57,790 --> 00:40:01,101 Así que si todos los datos es la misma longitud, ¿cuál es la preocupación? 864 00:40:01,101 --> 00:40:05,250 >> AUDIENCIA: Porque estás perdiendo datos al decirles todo. 865 00:40:05,250 --> 00:40:09,060 >> DAVID MALAN: Entonces, si todos los datos se la misma longitud, sin embargo, yo argumentaría 866 00:40:09,060 --> 00:40:12,300 que especifica una longitud máxima en VARCHAR no es diferente de 867 00:40:12,300 --> 00:40:16,070 especificar una longitud fija en CHAR si usted sabe que el número de anticipación. 868 00:40:16,070 --> 00:40:19,500 Pero no es verdad, y voy a clase de extraer de esa respuesta a la realidad 869 00:40:19,500 --> 00:40:22,610 que todavía hay un máximo, lo que podría ser molesto, especialmente si 870 00:40:22,610 --> 00:40:25,920 encontrar el nombre de una persona que es inusualmente largo que usted no lo hizo 871 00:40:25,920 --> 00:40:26,860 anticipar. 872 00:40:26,860 --> 00:40:31,420 Y también es un poco menos eficiente para buscar realmente en las VARCHAR como 873 00:40:31,420 --> 00:40:35,620 oposición a CHAR de búsqueda, especialmente para mesas largas que tienen un montón y 874 00:40:35,620 --> 00:40:36,510 gran cantidad de datos. 875 00:40:36,510 --> 00:40:40,060 Así que aquí también, temática es de nuevo ninguna opción obvia. 876 00:40:40,060 --> 00:40:42,870 >> Así que para darle un sentido de sí tipos de datos que podrían ser de interés 877 00:40:42,870 --> 00:40:45,400 ya sea para p-set de siete o en el futuro, no es INT. 878 00:40:45,400 --> 00:40:47,270 Hay BIGINT, que es como mucho, mucho. 879 00:40:47,270 --> 00:40:48,880 Tiende a ser de 64 bits. 880 00:40:48,880 --> 00:40:51,640 Hay decimal, que se verá en el conjunto problema, que es un tanto 881 00:40:51,640 --> 00:40:55,300 respuesta más limpia a los problemas que encontrado con el flotador y flotando 882 00:40:55,300 --> 00:40:55,980 señalar imprecisión. 883 00:40:55,980 --> 00:40:57,390 Y luego está DATETIME. 884 00:40:57,390 --> 00:41:01,530 Hay, literalmente, un tipo de datos que tiene para parecerse a un año, un mes, un día, 885 00:41:01,530 --> 00:41:03,730 y una hora, los minutos y segundos. 886 00:41:03,730 --> 00:41:07,470 >> Pero las bases de datos de SQL también tienen cosas que van a llamar a los índices. 887 00:41:07,470 --> 00:41:11,630 Y un índice es algo que usted especificar al crear la tabla a 888 00:41:11,630 --> 00:41:15,720 realizar búsquedas y otras operaciones más eficiente. 889 00:41:15,720 --> 00:41:18,550 En concreto, hay algo que se llama el índice principal que se pudo 890 00:41:18,550 --> 00:41:19,440 declaro lo siguiente. 891 00:41:19,440 --> 00:41:22,330 >> Hicimos esto para usted con el tabla de usuarios que le damos. 892 00:41:22,330 --> 00:41:26,160 Pero fíjate si estuviera recreando manualmente la tabla de usuarios aquí dando 893 00:41:26,160 --> 00:41:27,110 un nombre de usuario. 894 00:41:27,110 --> 00:41:28,125 Ya especifiqué ID. 895 00:41:28,125 --> 00:41:29,330 He especificado INT. 896 00:41:29,330 --> 00:41:32,000 He especificado nombre de usuario con 32 caracteres como máximo. 897 00:41:32,000 --> 00:41:36,140 Pero si seguir desplazándose en esta justa amplia ventana, hay un aviso 898 00:41:36,140 --> 00:41:38,260 montón de otras cosas que puedo especificar. 899 00:41:38,260 --> 00:41:40,950 >> Uno, puedo especificar atributos como, ya sabes qué, esto 900 00:41:40,950 --> 00:41:42,190 INT debe ser UNSIGNED. 901 00:41:42,190 --> 00:41:45,510 No quiero que los números negativos, por lo que vamos a hacer que UNSIGNED. 902 00:41:45,510 --> 00:41:48,660 Null no es relevante aquí porque Yo quiero que todos los usuarios 903 00:41:48,660 --> 00:41:49,640 tener un número único. 904 00:41:49,640 --> 00:41:50,830 Yo no quiero que sea nulo. 905 00:41:50,830 --> 00:41:52,330 >> Pero esto es interesante. 906 00:41:52,330 --> 00:41:57,780 Puedo especificar que ID es o bien el clave principal de esta base de datos, o es 907 00:41:57,780 --> 00:42:00,620 único, o es indexada, o el texto completo. 908 00:42:00,620 --> 00:42:05,630 Así que para los propósitos de hoy, larga historia corto, medio principal que este deberá 909 00:42:05,630 --> 00:42:10,570 ser tanto conceptual como técnicamente el campo que utilizamos para unívocamente 910 00:42:10,570 --> 00:42:12,140 identificar a los usuarios. 911 00:42:12,140 --> 00:42:16,140 >> Así que cuando miramos los usuarios, esto es una especie de la promesa de mirar hacia arriba en su mayoría por 912 00:42:16,140 --> 00:42:17,370 que identificador único. 913 00:42:17,370 --> 00:42:21,930 Y la base de datos se asegurará de que si tener un número de usuario 3, no se puede 914 00:42:21,930 --> 00:42:25,400 insertar físicamente a otro usuario con ese mismo número 3. 915 00:42:25,400 --> 00:42:28,380 La base de datos sólo se negará para guardar los cambios. 916 00:42:28,380 --> 00:42:32,310 Lo cual es una buena cosa, porque se puede protegerse de sí mismo. yo 917 00:42:32,310 --> 00:42:34,270 >> Por otra parte, el nombre de usuario. 918 00:42:34,270 --> 00:42:37,670 Así que la segunda fila, el recuerdo, es el campo de nombre de usuario. 919 00:42:37,670 --> 00:42:41,860 Así que la segunda fila aquí es nombre de usuario, como lo hicimos en el extremo izquierdo allí. 920 00:42:41,860 --> 00:42:43,940 >> Entonces, ¿qué más podría querer especificar? 921 00:42:43,940 --> 00:42:47,840 No se me permite, de acuerdo con SQL, especificar dos claves principales. 922 00:42:47,840 --> 00:42:50,750 puede especificar una clave conjunta en la que mirar a ambos campos, pero no pueden 923 00:42:50,750 --> 00:42:52,260 ser individualmente claves primarias. 924 00:42:52,260 --> 00:42:54,750 Así que eso es fuera de la cuestión. 925 00:42:54,750 --> 00:42:56,040 Entonces, ¿qué podría yo querer elegir? 926 00:42:56,040 --> 00:42:59,710 >> Bueno, UNIQUE es similar en espíritu a un clave primaria donde se especifica este 927 00:42:59,710 --> 00:43:03,570 campo debe ser único, pero es no va a ser el uno 928 00:43:03,570 --> 00:43:04,410 Yo uso todo el tiempo. 929 00:43:04,410 --> 00:43:08,450 Y nosotros no vamos a utilizar éste todo el tiempo para qué otra vez? 930 00:43:08,450 --> 00:43:10,490 Es más lento potencialmente si es un largo nombre de usuario. 931 00:43:10,490 --> 00:43:11,740 Es sólo una pérdida de tiempo. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, por su parte, especifica que se trata de No va a ser único, pero me gustaría 933 00:43:16,140 --> 00:43:19,470 que le permite trabajar su magia debajo de la campana para hacerlo más rápido para mí 934 00:43:19,470 --> 00:43:21,420 buscar en este campo. 935 00:43:21,420 --> 00:43:23,320 Así que esto probablemente no es relevante aquí. 936 00:43:23,320 --> 00:43:26,500 Por nombre de usuario, yo diría que UNIQUE es una buena respuesta. 937 00:43:26,500 --> 00:43:31,200 Pero supongamos que hicimos a los usuarios más interesante que sólo los nombres de usuario, 938 00:43:31,200 --> 00:43:32,430 hashes, y números de identificación. 939 00:43:32,430 --> 00:43:33,860 ¿Y si nos dimos a la gente nombres completos? 940 00:43:33,860 --> 00:43:37,700 ¿Y si les dimos direcciones y otros datos acerca de ellos? 941 00:43:37,700 --> 00:43:43,360 >> Bueno, si se especifica que una columna de una base de datos está indexada, lo que significa que 942 00:43:43,360 --> 00:43:47,730 MySQL u Oracle, o lo que sea la base de datos que está usando, debe trabajar su magia 943 00:43:47,730 --> 00:43:51,300 y el uso de algún tipo de datos de fantasía estructura como un árbol, o un trie, o una 944 00:43:51,300 --> 00:43:55,940 tabla hash, o algo para garantizar que cuando busques entre los datos utilizando 945 00:43:55,940 --> 00:43:58,150 seleccionar en ese campo en particular - 946 00:43:58,150 --> 00:44:01,310 como yo mostrar a todos que vive en Oxford Street. 947 00:44:01,310 --> 00:44:02,540 Una consulta como esa. 948 00:44:02,540 --> 00:44:06,250 Si ha especificado de antemano que usted quiere un índice en ese campo, la 949 00:44:06,250 --> 00:44:09,050 búsquedas serán mucho, mucho más rápido. 950 00:44:09,050 --> 00:44:12,090 >> Si no se especifica un índice, la mejor que puede hacer es una búsqueda lineal si 951 00:44:12,090 --> 00:44:13,030 no está ordenada. 952 00:44:13,030 --> 00:44:16,220 Pero si especifica INDEX, el inteligente personas que hicieron la base de datos - 953 00:44:16,220 --> 00:44:19,340 personas como usted que ahora saben los árboles y países y tablas hash - 954 00:44:19,340 --> 00:44:23,220 construirá automáticamente datos como estructura en la memoria RAM para asegurarse de que 955 00:44:23,220 --> 00:44:26,050 esas búsquedas son mucho más rápidos. 956 00:44:26,050 --> 00:44:29,660 >> FULLTEXT mientras tanto es similar en espíritu, pero le permite hacer comodín 957 00:44:29,660 --> 00:44:35,480 búsquedas, al igual que me demuestran a todos que vive en las calles que comienzan con la 958 00:44:35,480 --> 00:44:36,960 letra O por cualquier razón. 959 00:44:36,960 --> 00:44:38,850 Usted puede hacer búsquedas con comodín así. 960 00:44:38,850 --> 00:44:45,880 O bien, las cosas más atractivas como espectáculo yo todos los que tienen la palabra - 961 00:44:45,880 --> 00:44:49,400 mostrarme todo aquel cuyo nombre comience con una carta particular. 962 00:44:49,400 --> 00:44:51,880 Puedes buscar por palabras clave de esta manera. 963 00:44:51,880 --> 00:44:52,630 Está bien. 964 00:44:52,630 --> 00:44:55,760 >> Así, las oportunidades de diseño hay potencialmente. 965 00:44:55,760 --> 00:44:57,740 Hay otros que lo voy a hacer agitar las manos en. 966 00:44:57,740 --> 00:45:00,530 Resulta que usted puede tener diferentes motores de almacenamiento. 967 00:45:00,530 --> 00:45:04,390 Y esto es más misterioso de lo que necesitamos sin duda para el problema establecido siete. 968 00:45:04,390 --> 00:45:06,920 Por defecto, ustedes están utilizando algo que se llama InnoDB. 969 00:45:06,920 --> 00:45:10,910 Verás mención de esto en algún lugar interfaz de phpMyAdmin más probable. 970 00:45:10,910 --> 00:45:14,130 Pero saben que hay otro diseño decisiones que son de potencial 971 00:45:14,130 --> 00:45:18,030 interés vienen proyectos finales si haces algo basado en la web. 972 00:45:18,030 --> 00:45:19,330 >> Pero vamos a hacer esto. 973 00:45:19,330 --> 00:45:23,130 Vamos a seguir adelante y poner esto en la pantalla como reclamo para una historia 974 00:45:23,130 --> 00:45:26,330 relacionado con usted, un compañero de cuarto, y un vaso de leche. 975 00:45:26,330 --> 00:45:28,240 Tomemos a dos minutos o así romper aquí. 976 00:45:28,240 --> 00:45:31,060 Y si usted puede quedarse, vamos a venir hacia atrás, mire un poco más en SQL, y 977 00:45:31,060 --> 00:45:35,160 a continuación, un poco de JavaScript con p-set de ocho en mente. 978 00:45:35,160 --> 00:45:36,120 >> Está bien. 979 00:45:36,120 --> 00:45:40,420 Por lo tanto, vamos a pensar sobre un caso esquina que puede surgir con mucha facilidad 980 00:45:40,420 --> 00:45:44,240 en el contexto de la utilización de una base de datos, o francamente, incluso con cosas del mundo real 981 00:45:44,240 --> 00:45:46,280 como cajeros automáticos para obtener dinero. 982 00:45:46,280 --> 00:45:47,640 Así que aquí está un refrigerador. 983 00:45:47,640 --> 00:45:50,040 Supongamos que tienes una también en su residencia o su casa. 984 00:45:50,040 --> 00:45:54,990 Y tienes un compañero de cuarto, y ambos te gusta realmente la leche, por ejemplo. 985 00:45:54,990 --> 00:45:57,210 >> Así que llegas a casa de clase un día. 986 00:45:57,210 --> 00:45:58,490 Él o ella no es todavía parte posterior. 987 00:45:58,490 --> 00:45:59,180 Abres la nevera. 988 00:45:59,180 --> 00:46:00,870 ¿De verdad quieres un gran vaso de leche. 989 00:46:00,870 --> 00:46:01,820 No hay leche. 990 00:46:01,820 --> 00:46:02,920 Así que, ¿qué hacer? 991 00:46:02,920 --> 00:46:03,840 Se cierra la nevera. 992 00:46:03,840 --> 00:46:04,670 Usted agarra sus llaves. 993 00:46:04,670 --> 00:46:05,930 Usted sale a la plaza. 994 00:46:05,930 --> 00:46:09,240 Y se obtiene en la cola de CVS en los cosas de autoservicio, que siempre 995 00:46:09,240 --> 00:46:11,180 tomar más tiempo que en realidad tener cajeros. 996 00:46:11,180 --> 00:46:11,820 De todos modos. 997 00:46:11,820 --> 00:46:15,490 >> Así que, mientras tanto, punto punto punto, su compañero de piso llega a casa y él o ella 998 00:46:15,490 --> 00:46:17,440 similarmente tiene un anhelo un poco de leche. 999 00:46:17,440 --> 00:46:20,380 Así que él o ella abre la nevera, se ve en el interior, y oh, maldición. 1000 00:46:20,380 --> 00:46:21,160 No hay leche. 1001 00:46:21,160 --> 00:46:24,750 Así que él o ella se dirige hacia fuera, sucede que ir a la otra CVS, que sólo era un 1002 00:46:24,750 --> 00:46:27,900 cuadra por alguna razón, y él o se pone en la fila para comprar un poco de leche. 1003 00:46:27,900 --> 00:46:30,480 >> Mientras tanto, llega a casa, él o ella llega a casa, y qué hacer 1004 00:46:30,480 --> 00:46:31,980 que en última instancia tiene? 1005 00:46:31,980 --> 00:46:33,080 El doble de leche. 1006 00:46:33,080 --> 00:46:34,620 Pero usted realmente no desea leche que mucho. 1007 00:46:34,620 --> 00:46:37,300 Así que ahora usted tiene tanta leche que ahora uno de ellos es sólo va a ir agria 1008 00:46:37,300 --> 00:46:37,820 eventualmente. 1009 00:46:37,820 --> 00:46:39,370 Así que este es un mal problema. 1010 00:46:39,370 --> 00:46:39,900 ¿Cierto? 1011 00:46:39,900 --> 00:46:41,990 >> Entonces, ¿qué ha sucedido? 1012 00:46:41,990 --> 00:46:44,810 Así que básicamente, esto es una especie de un ejemplo ridículo. 1013 00:46:44,810 --> 00:46:48,580 Pero debajo de la campana, lo que hemos tenido suceder aquí es a la vez de que comprueba 1014 00:46:48,580 --> 00:46:52,390 el estado de alguna pieza de memoria, el refrigerador. 1015 00:46:52,390 --> 00:46:54,420 Ambos comprobado el estado de alguna variable. 1016 00:46:54,420 --> 00:46:57,360 Ambos dibujó una conclusión que luego actuó en. 1017 00:46:57,360 --> 00:47:01,420 Pero, por desgracia, mientras que su compañero de cuarto estaba en la tienda, el estado de ese 1018 00:47:01,420 --> 00:47:05,670 variables cambiado, él o ella regresó y ahora quiere cambiar el estado, pero 1019 00:47:05,670 --> 00:47:07,480 que ya se ha cambiado en él o ella. 1020 00:47:07,480 --> 00:47:11,120 Y, por supuesto, él o ella no tendría ido a la tienda si lo supieran 1021 00:47:11,120 --> 00:47:13,010 que ya estaba en camino. 1022 00:47:13,010 --> 00:47:16,430 >> Así que en el mundo real, ¿cómo pudiste evitar este problema, suponiendo que tiene 1023 00:47:16,430 --> 00:47:18,940 una nevera, tienes un compañero de cuarto, y que realmente te gusta la leche? 1024 00:47:18,940 --> 00:47:19,760 >> AUDIENCIA: La comunicación. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID MALAN: Comunicación. 1026 00:47:20,580 --> 00:47:21,160 Aceptar. 1027 00:47:21,160 --> 00:47:22,500 Pero, ¿cómo puede usted comunicarse? 1028 00:47:22,500 --> 00:47:23,990 >> AUDIENCIA: Deja una nota. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID MALAN: Deja una nota, ¿verdad? 1030 00:47:25,480 --> 00:47:28,025 Siempre deje una nota, fans de la serie. 1031 00:47:28,025 --> 00:47:31,580 Muy bien, así que siempre dejan una nota o poner verdaderamente como un candado o algo 1032 00:47:31,580 --> 00:47:35,440 en el refrigerador que mantiene su compañero de piso a partir de la inspección del estado de 1033 00:47:35,440 --> 00:47:36,540 esa variable. 1034 00:47:36,540 --> 00:47:40,800 >> Ahora, ¿por qué podría ser esto pertinente para problema conjunto de siete, o para los cajeros automáticos. 1035 00:47:40,800 --> 00:47:46,780 Bueno, imagina un mundo en un cajero automático donde usted podría ser capaz de subir a un cajero automático 1036 00:47:46,780 --> 00:47:48,920 máquina de aquí, y otro cajero automático aquí. 1037 00:47:48,920 --> 00:47:50,680 Y esto sucede muy a menudo. 1038 00:47:50,680 --> 00:47:54,150 Y suponga que tiene dos tarjetas de cajero automático, que es posible obtener. 1039 00:47:54,150 --> 00:47:57,420 Y usted registra en ambas máquinas eficazmente a la vez, con suerte 1040 00:47:57,420 --> 00:47:58,660 mientras que nadie está mirando. 1041 00:47:58,660 --> 00:48:01,260 Y a continuación, escriba en el PIN más o menos simultáneamente. 1042 00:48:01,260 --> 00:48:06,280 Y luego haces una consulta equilibrio para ver la cantidad de dinero que tiene. 1043 00:48:06,280 --> 00:48:08,920 Y digamos que usted tiene $ 100 queda en su cuenta. 1044 00:48:08,920 --> 00:48:13,310 Así que, esencialmente de forma simultánea, decir uno, cero, cero, anote. 1045 00:48:13,310 --> 00:48:16,000 Y espero volver algún dinero. 1046 00:48:16,000 --> 00:48:18,440 >> Pero, ¿cuánto dinero te has vuelto? 1047 00:48:18,440 --> 00:48:21,710 Ahora las computadoras al final del día, especialmente si están hablando con 1048 00:48:21,710 --> 00:48:27,360 servidores, no necesariamente se hacen las cosas en el orden de lo que se espera. 1049 00:48:27,360 --> 00:48:30,860 >> Así que supongamos que lo que sucede, por cualquier red de los problemas de velocidad allí 1050 00:48:30,860 --> 00:48:34,530 son, o cuestiones de CPU hay, o nada de eso, supongamos que la 1051 00:48:34,530 --> 00:48:38,530 primero ATM comprueba su equilibrio y ve, oh, esta persona tiene $ 100. 1052 00:48:38,530 --> 00:48:41,840 Pero luego se distrae porque a lo mejor una copia de seguridad está sucediendo y lo que es 1053 00:48:41,840 --> 00:48:42,500 desaceleración. 1054 00:48:42,500 --> 00:48:45,080 O tal vez durante la comprobación, la red conexión se puso un poco más lento porque 1055 00:48:45,080 --> 00:48:45,910 esto sólo sucede. 1056 00:48:45,910 --> 00:48:47,100 Son dispositivos físicos. 1057 00:48:47,100 --> 00:48:49,330 Así que mientras tanto, el segundo cajero automático está haciendo la misma pregunta. 1058 00:48:49,330 --> 00:48:53,030 ¿Cuánto dinero tiene David? $ 100 es la respuesta. 1059 00:48:53,030 --> 00:48:58,930 Pero debido a que el primer cajero automático todavía no ha envía el mensaje de restar $ 100, tanto 1060 00:48:58,930 --> 00:49:03,000 Cajeros automáticos han inspeccionado la bóveda del banco, viendo que hay 100 dólares allí, y ahora 1061 00:49:03,000 --> 00:49:07,160 ambas máquinas son potencialmente va a escupir una respuesta. 1062 00:49:07,160 --> 00:49:12,240 >> Ahora, esto es muy bueno para usted en algún sentido si lo que hace el banco en última instancia 1063 00:49:12,240 --> 00:49:17,200 es cambiar la cantidad a menos de 100 por estableciendo la variable igual a su 1064 00:49:17,200 --> 00:49:21,570 cuenta bancaria igual a 0, en contraposición para hacer menos 100. 1065 00:49:21,570 --> 00:49:24,410 Ahora, en el peor de los casos para el banco - 1066 00:49:24,410 --> 00:49:27,470 o en el mejor para el banco, por su parte, te dan $ 200, y 1067 00:49:27,470 --> 00:49:31,690 su cuenta bancaria ahora muestra negativa $ 100, que en realidad no lo hace 1068 00:49:31,690 --> 00:49:32,950 que beneficiará a todos. 1069 00:49:32,950 --> 00:49:36,500 Pero el punto es que esta carrera condición para que dos compañeros de cuarto que consiguen 1070 00:49:36,500 --> 00:49:40,660 leche, o para dos cajeros automáticos que tratan de obtener dinero en efectivo y cambiar el estado de una bóveda 1071 00:49:40,660 --> 00:49:44,510 al mismo tiempo existe ningún vez que tenga una base de datos. 1072 00:49:44,510 --> 00:49:48,290 >> Ahora en problema planteado siete, esta cuestión surge en el sentido de que si usted compra una 1073 00:49:48,290 --> 00:49:52,110 participación en acciones de Facebook y, a continuación, para ejemplo, usted compra una segunda parte de 1074 00:49:52,110 --> 00:49:55,160 Acciones de Facebook, tienes que hacer una decisión en cuanto al programador. 1075 00:49:55,160 --> 00:49:58,710 Con el fin de decidir la forma de actualizar la base de datos, lo más probable es que vas a 1076 00:49:58,710 --> 00:50:02,250 tener una fila de esa población, y esto es una manera de ponerlo en práctica. 1077 00:50:02,250 --> 00:50:06,640 Y vas a tener una acción de FB, que es su símbolo ticker 1078 00:50:06,640 --> 00:50:10,120 para este nombre de usuario o este usuario Identificación, el identificador único. 1079 00:50:10,120 --> 00:50:12,340 >> Pero la misma historia puede suceder aquí. 1080 00:50:12,340 --> 00:50:15,800 Si haces un SELECT de SQL, como se verá en el problema de establecer siete cuando usted ve, 1081 00:50:15,800 --> 00:50:18,460 oh, David tiene una acción de acciones de Facebook. 1082 00:50:18,460 --> 00:50:23,240 Permítanme ahora cambiar esto para ser dos acciones, porque quiere comprar una 1083 00:50:23,240 --> 00:50:24,120 segunda parte. 1084 00:50:24,120 --> 00:50:27,860 Pero supongamos que David en realidad tenía dos ventanas abiertas del navegador, o suponen que 1085 00:50:27,860 --> 00:50:32,150 es una cuenta conjunta con dos cónyuges, y dos de ellos están tratando de llevar a cabo 1086 00:50:32,150 --> 00:50:36,770 la misma operación, allí, también, la existe la posibilidad de que una decisión sea 1087 00:50:36,770 --> 00:50:39,670 realizado en base a la anterior estado del mundo - 1088 00:50:39,670 --> 00:50:41,290 la cuenta tiene una acción - 1089 00:50:41,290 --> 00:50:45,630 y dos personas, o ambos servidores, ahora tratar de decir incrementarlo a dos acciones. 1090 00:50:45,630 --> 00:50:49,020 Pero en este caso, es posible que haya cargado me de dinero para ambas acciones, pero 1091 00:50:49,020 --> 00:50:50,830 incrementado sólo esa vez. 1092 00:50:50,830 --> 00:50:54,730 >> Así que en resumen, el problema fundamental aquí, al igual que con la broma acerca de dejar un 1093 00:50:54,730 --> 00:50:58,750 tenga en cuenta, o poner un candado en él, es si dos personas, o dos temas - 1094 00:50:58,750 --> 00:50:59,930 pensar de nuevo a cero - 1095 00:50:59,930 --> 00:51:03,220 puede inspeccionar el estado de alguna variable y luego tratar de cambiar esa variable, 1096 00:51:03,220 --> 00:51:07,950 pero esas dos cosas no suceden en el mismo tiempo, pero pueden quedar interrumpido 1097 00:51:07,950 --> 00:51:11,500 por otras cosas que suceden, los datos pueden entrar en un estado muy extraño. 1098 00:51:11,500 --> 00:51:15,450 Y usted puede beneficiar o puedes sufrir en el sentido del ejemplo de dinero. 1099 00:51:15,450 --> 00:51:18,110 >> Así que en conjunto de problemas siete, te damos esta una línea de código, que durante mucho tiempo 1100 00:51:18,110 --> 00:51:21,000 cuento, resuelve este problema en MySQL. 1101 00:51:21,000 --> 00:51:24,950 Esta muy larga instrucción que no hace incluso que quepan en una línea en la 1102 00:51:24,950 --> 00:51:30,370 pantalla aquí asegura que su operación es lo que se llama atómica. 1103 00:51:30,370 --> 00:51:33,720 Todo sucede a la vez, o no sucede en absoluto. 1104 00:51:33,720 --> 00:51:37,530 Esta larguísima frase no puede quedar interrumpido parcialmente. 1105 00:51:37,530 --> 00:51:39,840 >> Y lo que hace es, literalmente, lo que dice. 1106 00:51:39,840 --> 00:51:44,200 Inserte en alguna tabla siguiente tres campos de los valores específicos, 1107 00:51:44,200 --> 00:51:47,280 pero por duplicado de la llave, no haga una inserción. 1108 00:51:47,280 --> 00:51:48,280 Realice una actualización. 1109 00:51:48,280 --> 00:51:52,450 Así que esto es como hacer un SELECT y un INSERT por así decirlo, al mismo tiempo. 1110 00:51:52,450 --> 00:51:55,150 ¿Y cuál es la clave que probablemente se refiere aquí? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Resulta, y verás esto en problema establece las especificaciones de siete, porque 1113 00:52:01,380 --> 00:52:06,040 hemos declarado que existe una clave única en esta mesa en particular de tal manera que 1114 00:52:06,040 --> 00:52:08,480 no se puede tener varias filas para el mismo usuario con la 1115 00:52:08,480 --> 00:52:10,150 misma acción de penique símbolo - 1116 00:52:10,150 --> 00:52:13,780 en este ejemplo aquí, DVN.V es una penny stock tonto que 1117 00:52:13,780 --> 00:52:14,980 consulte en la especificación. 1118 00:52:14,980 --> 00:52:17,860 Porque hemos declarado lo hacen único, lo que esto significa es que si usted 1119 00:52:17,860 --> 00:52:23,580 tratar de insertar una fila duplicada, eres en lugar de ir a actualizarla sin 1120 00:52:23,580 --> 00:52:27,020 cualquier otra persona tienen la oportunidad de cambiar el estado del mundo tampoco. 1121 00:52:27,020 --> 00:52:29,400 Así que en resumen, lo que garantiza cosas son atómicas. 1122 00:52:29,400 --> 00:52:32,530 >> De manera más general aunque, bases de datos como MySQL - 1123 00:52:32,530 --> 00:52:35,460 y usted no necesita esta función para p-set siete, pero tenga en cuenta para 1124 00:52:35,460 --> 00:52:36,200 el futuro - 1125 00:52:36,200 --> 00:52:38,870 apoyar lo que se llaman las transacciones, donde se puede decir 1126 00:52:38,870 --> 00:52:40,990 Iniciar la transacción, literalmente. 1127 00:52:40,990 --> 00:52:43,270 A continuación, puede ejecutar dos sentencias de SQL. 1128 00:52:43,270 --> 00:52:45,710 Y una sentencia SQL, como se verá en p-set siete, se ve un poco 1129 00:52:45,710 --> 00:52:46,750 algo como esto. 1130 00:52:46,750 --> 00:52:48,820 Actualización de una llamada cuenta de mesa. 1131 00:52:48,820 --> 00:52:52,550 Establezca la columna saldo equivalente a lo que la columna de la balanza actualmente 1132 00:52:52,550 --> 00:52:57,280 es menos 1000 cuando el número, la número de cuenta, al igual que el ID de usuario, 1133 00:52:57,280 --> 00:53:00,830 es igual a 2, y luego actualizar cuenta dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> Así que en términos simples, ¿qué es lo que estos dos consultas parecen estar haciendo en el 1135 00:53:04,350 --> 00:53:05,840 verdadero sentido de mundo de la banca? 1136 00:53:05,840 --> 00:53:07,440 >> AUDIENCIA: Transferencia de ahorros. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID MALAN: Exactamente. 1138 00:53:08,020 --> 00:53:10,470 Transferencia de fondos de una en cuenta a la otra. 1139 00:53:10,470 --> 00:53:14,400 Y este es otro ejemplo en el que realmente quieren estas dos cosas que suceden 1140 00:53:14,400 --> 00:53:15,570 o no suceder. 1141 00:53:15,570 --> 00:53:18,880 Usted no quiere que algo se interponga en el medio de ellos y potencialmente estropear 1142 00:53:18,880 --> 00:53:22,220 las matemáticas, o estropear la cantidad dinero que tiene, o cuánto 1143 00:53:22,220 --> 00:53:23,170 dinero que el banco tiene. 1144 00:53:23,170 --> 00:53:26,890 Así que lo que es realmente bueno de las transacciones en MySQL es que, y 1145 00:53:26,890 --> 00:53:30,160 bases de datos de manera más general, es que y las personas inteligentes que han implementados 1146 00:53:30,160 --> 00:53:33,670 estas características de averiguar cómo hacer Asegúrese de que ambas cosas suceden 1147 00:53:33,670 --> 00:53:35,120 o no en absoluto. 1148 00:53:35,120 --> 00:53:38,580 >> Y si usted está realmente aspira a hacer un sitio web que es utilizado por la gente en 1149 00:53:38,580 --> 00:53:41,490 campus, la gente en el mundo real, haciendo algo en el sentido de inicio, 1150 00:53:41,490 --> 00:53:43,300 estos son los tipos de decisiones de diseño que 1151 00:53:43,300 --> 00:53:45,020 cada vez tan importante. 1152 00:53:45,020 --> 00:53:48,240 De lo contrario, usted comienza a perder datos, perder los usuarios, o en el peor caso como 1153 00:53:48,240 --> 00:53:51,800 que hemos visto aquí, lo que podría perder dinero. 1154 00:53:51,800 --> 00:53:56,180 Así que de nuevo, más sobre esto en conjunto de problemas siete, así como tal vez para algunos de 1155 00:53:56,180 --> 00:53:57,530 que en los proyectos finales. 1156 00:53:57,530 --> 00:54:01,870 >> Así que vamos a cambiar esa imagen que teníamos Hace un momento justo a una forma más. 1157 00:54:01,870 --> 00:54:04,070 Así que permítanme realmente ver si puedo - 1158 00:54:04,070 --> 00:54:06,030 pues no, eso se ha ido. 1159 00:54:06,030 --> 00:54:06,690 Ahí está. 1160 00:54:06,690 --> 00:54:09,020 >> Así que esto es donde lo dejamos la última vez. 1161 00:54:09,020 --> 00:54:12,390 Y resulta que vamos a tirar una cosa más en la mezcla aquí - 1162 00:54:12,390 --> 00:54:14,510 un lenguaje llamado JavaScript. 1163 00:54:14,510 --> 00:54:18,060 Así JavaScript realidad se ajusta en esta pieza - 1164 00:54:18,060 --> 00:54:22,086 y yo no acababa de dejar suficiente espacio, así que esto no es ahora a escala. 1165 00:54:22,086 --> 00:54:23,900 OK, esto es realmente patético. 1166 00:54:23,900 --> 00:54:27,075 OK, así que eso es JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Está bien. 1168 00:54:27,340 --> 00:54:28,760 Realmente me estoy haciendo un flaco favor. 1169 00:54:28,760 --> 00:54:29,390 Está bien. 1170 00:54:29,390 --> 00:54:34,790 >> Así JavaScript es otro de programación lenguaje, y nuestro pasado, si eso ayuda 1171 00:54:34,790 --> 00:54:37,770 asegurarle que no hay mucho más de las bocas de incendios aquí. 1172 00:54:37,770 --> 00:54:41,100 Así JavaScript es también una interpreta lenguaje, lo que significa que no lo hace 1173 00:54:41,100 --> 00:54:42,670 compilarlo en ceros y unos. 1174 00:54:42,670 --> 00:54:43,690 Usted acaba de ejecutarlo. 1175 00:54:43,690 --> 00:54:47,680 Pero lo que es fundamentalmente diferente con JavaScript generalmente es que usted 1176 00:54:47,680 --> 00:54:49,815 no se ejecutan en su servidor web. 1177 00:54:49,815 --> 00:54:52,570 No consigue ejecutarse en el aparato de por sí. 1178 00:54:52,570 --> 00:54:57,490 Más bien, se descarga por un usuario a través de HTTP en el navegador - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, lo que sea - 1180 00:55:00,260 --> 00:55:03,860 y es el navegador que ejecuta este en particular lenguaje de programación. 1181 00:55:03,860 --> 00:55:08,000 >> Así que para ser claros, PHP ha sido hasta ahora ejecutado ya sea en la línea de comandos en 1182 00:55:08,000 --> 00:55:11,290 nuestra ventana en blanco y negro, en un servidor como el aparato, una computadora 1183 00:55:11,290 --> 00:55:14,490 gustaría que el aparato, o que ha sido ejecutado por un servidor web 1184 00:55:14,490 --> 00:55:15,860 que se ejecuta en un ordenador. 1185 00:55:15,860 --> 00:55:20,490 Pero el tema aquí es que PHP hasta ahora se ha ejecutado en el servidor, por lo que 1186 00:55:20,490 --> 00:55:24,820 el usuario y el navegador del usuario nunca se vea una línea de código PHP. 1187 00:55:24,820 --> 00:55:28,530 >> De hecho, si alguna vez abrir un navegador para su sitio web u otro y que 1188 00:55:28,530 --> 00:55:32,400 realmente ver el código PHP en su ventana, alguien ha metido la pata. 1189 00:55:32,400 --> 00:55:34,950 Debido a que no está destinado a ser enviado a un navegador directamente. 1190 00:55:34,950 --> 00:55:38,150 Se supone que debe ser ejecutado y se volvió en algo parecido a HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Pero JavaScript es esencialmente lo contrario. 1192 00:55:40,120 --> 00:55:44,350 Se supone que debe ser ejecutado por lo general dentro de de la ventana del navegador del usuario. 1193 00:55:44,350 --> 00:55:46,840 Y ¿qué tipo de sitios web utilizar JavaScript entonces estos días? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Al igual que, literalmente, todos los sitios web populares. 1196 00:55:52,180 --> 00:55:55,430 Cada sitio web que ustedes probablemente utilizar todos los días el uso de JavaScript para la 1197 00:55:55,430 --> 00:55:57,330 más sencilla e incluso la características más atractivas. 1198 00:55:57,330 --> 00:55:59,800 >> Así que algo como Facebook Chatear si usa eso. 1199 00:55:59,800 --> 00:56:01,040 ¿Cómo se trabajan realmente? 1200 00:56:01,040 --> 00:56:05,090 Pues hasta ahora, todas las cosas que hemos hacer con HTML y PHP asume que 1201 00:56:05,090 --> 00:56:08,750 que tire hacia arriba de una URL, y pulse la tecla Enter, y ves algo de contenido HTML. 1202 00:56:08,750 --> 00:56:11,970 Y hacer clic en el enlace, que cambia la URL, cambia la página y vuelve a cargar 1203 00:56:11,970 --> 00:56:12,740 nuevos contenidos. 1204 00:56:12,740 --> 00:56:16,340 Haga clic en otra URL o enviar un formulario, conseguir trasladados a otra página y 1205 00:56:16,340 --> 00:56:17,420 ves algún contenido nuevo. 1206 00:56:17,420 --> 00:56:22,710 >> Pero el uso de algo como Facebook Chat, o Gchat o Google Maps, raramente 1207 00:56:22,710 --> 00:56:27,350 no toda la página a cargar tal que Si ve una pantalla en blanco momentáneamente y 1208 00:56:27,350 --> 00:56:28,470 a continuación, el nuevo contenido. 1209 00:56:28,470 --> 00:56:32,610 Por el contrario, las páginas web de hoy son dinámicamente tener actualizada una y 1210 00:56:32,610 --> 00:56:35,570 una y otra vez todo tipo de detrás de las escenas. 1211 00:56:35,570 --> 00:56:38,560 Y resulta que cuando tienes que ir a algo como Facebook o Gchat, 1212 00:56:38,560 --> 00:56:43,050 o Gmail, y las actualizaciones de la página automáticamente sin necesidad de recargar la 1213 00:56:43,050 --> 00:56:47,630 toda la pantalla, lo que ha pasado es que su navegador ha hecho una especie de secreto 1214 00:56:47,630 --> 00:56:49,410 peticiones HTTP adicionales - 1215 00:56:49,410 --> 00:56:52,740 no para páginas web enteras, pero sólo para pequeños fragmentos de datos, como el 1216 00:56:52,740 --> 00:56:55,740 mensajes instantáneos que su amigo sólo usted, o la actualización de estado enviado que 1217 00:56:55,740 --> 00:56:58,210 alguien que, o el tweet enviado que alguien acaba de enviar. 1218 00:56:58,210 --> 00:57:02,120 Es sólo haciendo pequeños pedidos de de datos y, a continuación, utilizando JavaScript, este 1219 00:57:02,120 --> 00:57:06,370 lenguaje de programación, para cambiar lo que la página web se ve igual que sin el 1220 00:57:06,370 --> 00:57:09,860 servidor de ayuda, sin que el servidor generar código HTML que. 1221 00:57:09,860 --> 00:57:13,820 >> Así que en resumen, JavaScript se puede utilizar a continuación no sólo para recoger nuevos datos de 1222 00:57:13,820 --> 00:57:16,750 el servidor sin necesidad de recargar en su totalidad página o enviar un formulario. 1223 00:57:16,750 --> 00:57:20,060 También se puede utilizar para el cambio el llamado DOM - 1224 00:57:20,060 --> 00:57:21,520 modelo de objetos de documentos - 1225 00:57:21,520 --> 00:57:24,620 que es sólo la forma de lujo para diciendo que el árbol de HTML 1226 00:57:24,620 --> 00:57:26,220 que vimos la última vez. 1227 00:57:26,220 --> 00:57:31,640 >> Así que para tranquilizar, JavaScript es sintácticamente de manera similar a C también. 1228 00:57:31,640 --> 00:57:32,820 No hay función principal. 1229 00:57:32,820 --> 00:57:35,430 Usted acaba de empezar a escribir el código y va a ejecutar, o 1230 00:57:35,430 --> 00:57:36,900 interpretarse de manera más adecuada. 1231 00:57:36,900 --> 00:57:38,660 Condiciones se verá así. 1232 00:57:38,660 --> 00:57:41,230 No es diferente de C o PHP para el caso. 1233 00:57:41,230 --> 00:57:43,890 Expresiones booleanas o-ed juntos se verá así. 1234 00:57:43,890 --> 00:57:45,590 Asocian con un AND tener este aspecto. 1235 00:57:45,590 --> 00:57:47,750 >> Los canjes se verá así. 1236 00:57:47,750 --> 00:57:49,440 Para bucles se verá como esto. 1237 00:57:49,440 --> 00:57:51,060 Mientras que los bucles se verá como esto. 1238 00:57:51,060 --> 00:57:53,316 Haga bucles while se verá como esto. 1239 00:57:53,316 --> 00:57:54,780 >> Esto es nuevo. 1240 00:57:54,780 --> 00:57:58,753 Así que JavaScript no tiene un foreach construir per se, pero este constructo 1241 00:57:58,753 --> 00:58:03,870 para i variable en la matriz, y yo en este caso se convierte en un valor de índice. 1242 00:58:03,870 --> 00:58:06,880 Así que es un poco diferente de la foreach, aunque las nuevas versiones de 1243 00:58:06,880 --> 00:58:10,280 JavaScript están saliendo todo el tiempo, por lo que incluso las características del lenguaje 1244 00:58:10,280 --> 00:58:10,880 están evolucionando. 1245 00:58:10,880 --> 00:58:16,920 >> Y en un aparte, JavaScript estos días también puede ser utilizado en un servidor de igual 1246 00:58:16,920 --> 00:58:19,920 PHP usando un marco llamado Node.js. 1247 00:58:19,920 --> 00:58:24,670 Uno de TFS de CS50, Kevin, ha llevado a un seminario sobre Node.js que está disponible en 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Así que si eres curioso, saber que usted puede utilizar esto en el lado del servidor como 1250 00:58:28,830 --> 00:58:33,870 bueno, pero eso es una tendencia relativamente reciente, pero un potente en eso. 1251 00:58:33,870 --> 00:58:35,270 >> Esto es un poco diferente. 1252 00:58:35,270 --> 00:58:37,910 Se trata de una matriz en JavaScript. 1253 00:58:37,910 --> 00:58:40,115 Y lo que se antoja diferente frente a C o PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Hay algunas historias rápidas que podemos decir aquí. 1256 00:58:47,420 --> 00:58:49,367 Lo que falta en comparación con PHP? 1257 00:58:49,367 --> 00:58:51,652 >> AUDIENCIA: [inaudible]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID MALAN: ¿Sí? 1259 00:58:52,110 --> 00:58:53,322 Lo sentimos, decir de nuevo? 1260 00:58:53,322 --> 00:58:54,740 >> AUDIENCIA: No declarar el tipo de variable. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID MALAN: No estamos declarando el tipo de variable. 1262 00:58:56,390 --> 00:58:59,630 Así que en realidad bastante como PHP, no estamos especificando los tipos de esta variable. 1263 00:58:59,630 --> 00:59:02,670 Más bien, estamos más genéricamente diciendo var para la variable. 1264 00:59:02,670 --> 00:59:06,690 No tenemos molestia de PHP de la signo de dólar, que aunque tedioso 1265 00:59:06,690 --> 00:59:09,160 tipo, no hacen más claro que algo es una variable. 1266 00:59:09,160 --> 00:59:11,830 Mientras que aquí, somos una especie de regreso a El enfoque de C con sólo llamar a un 1267 00:59:11,830 --> 00:59:14,500 la variable con el nombre que queramos para darle, como números. 1268 00:59:14,500 --> 00:59:17,170 Y también como PHP, tenemos corchetes para el 1269 00:59:17,170 --> 00:59:19,170 valores dentro de esa matriz. 1270 00:59:19,170 --> 00:59:22,490 >> Así variables en JavaScript también podría tener este aspecto. 1271 00:59:22,490 --> 00:59:26,900 Nótese aquí esto es una cadena llamada s, pero del mismo modo que nosotros no especificamos 1272 00:59:26,900 --> 00:59:28,750 que es una cadena. 1273 00:59:28,750 --> 00:59:33,160 Aquí, sin embargo es una característica que no es así existir exactamente de la misma manera en PHP, 1274 00:59:33,160 --> 00:59:34,460 pero un poco de manera similar. 1275 00:59:34,460 --> 00:59:36,530 Este es un objeto en JavaScript. 1276 00:59:36,530 --> 00:59:42,110 Y los objetos son una especie de ejército suizo Cuchillo de una estructura de datos en que se 1277 00:59:42,110 --> 00:59:43,900 puede utilizarlos para cualquier número de cosas. 1278 00:59:43,900 --> 00:59:46,860 >> Aquí, por ejemplo, estamos declarando una variable llamada cotización. 1279 00:59:46,860 --> 00:59:49,110 El tipo de esa variable es un objeto. 1280 00:59:49,110 --> 00:59:53,550 Usted puede pensar en esto como una estructura C que tiene las claves y valores. 1281 00:59:53,550 --> 00:59:55,250 Symbol es una clave. 1282 00:59:55,250 --> 00:59:57,350 FB es un valor, aparentemente un símbolo de cotización. 1283 00:59:57,350 --> 00:59:57,930 Comma. 1284 00:59:57,930 --> 01:00:02,180 El precio es otra de las claves, y su valor es al parecer un punto flotante, o una 1285 01:00:02,180 --> 01:00:06,510 número de manera más general en JavaScript, de 49,26 dólares. 1286 01:00:06,510 --> 01:00:09,030 >> Así que PHP no tiene - 1287 01:00:09,030 --> 01:00:12,980 que no hemos visto en los objetos de PHP muy como esto, pero nos hicieron ver un análogo, 1288 01:00:12,980 --> 01:00:14,093 que era lo que? 1289 01:00:14,093 --> 01:00:14,980 >> AUDIENCIA: [inaudible]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID MALAN: Las matrices asociativas. 1291 01:00:16,110 --> 01:00:19,990 Así, mientras que PHP tiene matrices asociativas cuya sintaxis es siempre un poco para 1292 01:00:19,990 --> 01:00:20,370 diferente - 1293 01:00:20,370 --> 01:00:21,780 vimos los corchetes. 1294 01:00:21,780 --> 01:00:23,860 Vimos las flechas extraños símbolos. 1295 01:00:23,860 --> 01:00:27,330 JavaScript tiene objetos, pero esto es sobre todo una diferencia semántica y una 1296 01:00:27,330 --> 01:00:29,260 diferente sinónimo de ahora. 1297 01:00:29,260 --> 01:00:35,060 Sin embargo, en un aparte, PHP también tiene objetos de una manera que Java y otra 1298 01:00:35,060 --> 01:00:37,810 lenguas tienen objetos en programación orientada a objetos. 1299 01:00:37,810 --> 01:00:40,440 Pero vamos a utilizar estos sólo para tipos de datos por ahora. 1300 01:00:40,440 --> 01:00:42,170 Objetos y matrices asociativas. 1301 01:00:42,170 --> 01:00:44,140 >> Éste puede que sea un poco más clara. 1302 01:00:44,140 --> 01:00:45,890 He aquí por qué un objeto es útil. 1303 01:00:45,890 --> 01:00:48,760 Cuando se quiere declarar un estudiante, como Zamyla, podemos realmente 1304 01:00:48,760 --> 01:00:52,630 encapsular por así decirlo en el interior de ese objetar el uso de llaves igual 1305 01:00:52,630 --> 01:00:55,060 antes de todo un manojo de llaves y los valores de aquí. 1306 01:00:55,060 --> 01:00:59,150 Tenemos una identificación, una casa y un nombre para Zamyla, seguido por un punto y coma como 1307 01:00:59,150 --> 01:01:00,690 habitual en el extremo. 1308 01:01:00,690 --> 01:01:04,840 >> Aquí abajo también, esto es ligeramente diferente, pero también muy potente 1309 01:01:04,840 --> 01:01:05,690 estos días. 1310 01:01:05,690 --> 01:01:08,780 Aquí hay una gran variedad, y yo sé que ya hay un corchete arriba 1311 01:01:08,780 --> 01:01:11,090 superior y un corchete en la parte inferior. 1312 01:01:11,090 --> 01:01:16,050 Y esta es una matriz de los datos que escriba al parecer en JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Este es un arreglo de la misma se ve como tres objetos. 1314 01:01:21,260 --> 01:01:24,580 Y yo sé que es un objeto único debido a las llaves. 1315 01:01:24,580 --> 01:01:28,760 Y note que hay llave de apertura, algunas cosas, cerca de corchete, coma, 1316 01:01:28,760 --> 01:01:31,180 luego un poco más, coma, y luego un poco más. 1317 01:01:31,180 --> 01:01:33,800 Así que eso es tres argumentos separados por dos comas. 1318 01:01:33,800 --> 01:01:36,810 >> Así que esto es una serie de tres objetos. 1319 01:01:36,810 --> 01:01:39,940 Y cada uno de esos objetos parece haber un estudiante o miembro del personal de algunas 1320 01:01:39,940 --> 01:01:42,370 tipo, cada uno con una identificación, casa, y el nombre. 1321 01:01:42,370 --> 01:01:45,060 Pero yo he llamado a ese algo llamado JSON - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 Y este es un formato de datos que en realidad es muy popular y en 1324 01:01:52,060 --> 01:01:55,100 boga en estos días que si usted escribe un aplicación que utiliza el Facebook 1325 01:01:55,100 --> 01:01:59,150 API, la API de Twitter, realmente casi cualquier API que hay en estos días, 1326 01:01:59,150 --> 01:02:02,820 incluyendo algunos de la propia CS50, la los datos a recuperar no se encuentra en 1327 01:02:02,820 --> 01:02:04,720 formato CSV de la vieja escuela. 1328 01:02:04,720 --> 01:02:06,780 >> Porque recordemos que CSV es super simple. 1329 01:02:06,780 --> 01:02:10,230 Está a sólo columnas separadas por comas. 1330 01:02:10,230 --> 01:02:13,190 Datos JSON le da más metadatos. 1331 01:02:13,190 --> 01:02:17,800 Se asocia una clave con cada valor, de modo que no tienen que asumir que simplemente 1332 01:02:17,800 --> 01:02:22,460 la columna cero es un valor, la columna uno es otro, la columna dos es otra. 1333 01:02:22,460 --> 01:02:26,790 Todo en un objeto JSON que aquí es una especie de la auto-descripción, ya que cada 1334 01:02:26,790 --> 01:02:30,940 uno de los nombres en este archivo tiene, literalmente, nombrar delante de él como un 1335 01:02:30,940 --> 01:02:32,510 cadena entre comillas. 1336 01:02:32,510 --> 01:02:34,950 >> Así que echemos un vistazo a una par de ejemplos. 1337 01:02:34,950 --> 01:02:36,800 Déjame ir en el aparato. 1338 01:02:36,800 --> 01:02:41,000 Y déjame ir a nuestro host virtual directorio en el público. 1339 01:02:41,000 --> 01:02:45,590 Y déjame ir a la JavaScript directorio. 1340 01:02:45,590 --> 01:02:49,610 Y vamos a seguir adelante y abrir dom-0.html, donde DOM sólo significa 1341 01:02:49,610 --> 01:02:51,010 modelo de objetos de documentos. 1342 01:02:51,010 --> 01:02:53,490 Son las cosas del árbol al que Me he referido antes. 1343 01:02:53,490 --> 01:02:54,950 >> Y permítanme proponer lo siguiente. 1344 01:02:54,950 --> 01:02:57,720 Aquí hay una página web cuya cuerpo es bastante simple. 1345 01:02:57,720 --> 01:03:00,170 Así que aquí abajo en la parte inferior, notar que tengo un formulario. 1346 01:03:00,170 --> 01:03:01,500 Hemos visto los de antes. 1347 01:03:01,500 --> 01:03:07,600 Tiene dos entradas, una de las cuales tiene un Identificación de nombre, uno de los cuales tiene un tipo de 1348 01:03:07,600 --> 01:03:09,830 presentar, y la primera su tipo es texto. 1349 01:03:09,830 --> 01:03:11,900 Así que esto realmente suena bastante simple. 1350 01:03:11,900 --> 01:03:13,090 >> Vamos a ir aquí. 1351 01:03:13,090 --> 01:03:15,390 Volvamos a esta página aquí. 1352 01:03:15,390 --> 01:03:21,030 Vamos a entrar en localhost, y entrar en nuestro directorio JavaScript, e ir a 1353 01:03:21,030 --> 01:03:24,640 dom-0, y aquí tenemos este formulario. 1354 01:03:24,640 --> 01:03:26,550 Así que eso es al parecer toda esta página hace. 1355 01:03:26,550 --> 01:03:28,740 Tiene un campo de nombre con un botón Enviar. 1356 01:03:28,740 --> 01:03:30,340 Pero yo no voy a usar PHP aquí. 1357 01:03:30,340 --> 01:03:34,310 Voy a hacer todo lo que el lado del cliente por así decirlo en JavaScript de la siguiente manera. 1358 01:03:34,310 --> 01:03:39,100 >> Nótese que en verdad le he dado el nombre campo de esta entrada una única 1359 01:03:39,100 --> 01:03:42,350 identificador, que hará realidad me ahorrar algo de tiempo en un momento. 1360 01:03:42,350 --> 01:03:45,480 Y noto que he introducido otra etiqueta en la cabeza de mi página web, la 1361 01:03:45,480 --> 01:03:46,565  tag. 1362 01:03:46,565 --> 01:03:50,120 >> Así que es en este sentido que JavaScript está un lenguaje de programación del lado del cliente. 1363 01:03:50,120 --> 01:03:55,020 En este caso, al igual que CSS, he puesto ella hacia el interior de mi HTML. 1364 01:03:55,020 --> 01:03:58,810 Pero note he declarado una función que se ve un poco como PHP 1365 01:03:58,810 --> 01:04:01,530 sintácticamente, pero esto es en realidad JavaScript, porque una vez más, es 1366 01:04:01,530 --> 01:04:03,920 del lado del cliente en el navegador. 1367 01:04:03,920 --> 01:04:07,590 Y tomar una conjetura de lo que esto va a hacer, a pesar de que algunas de la sintaxis 1368 01:04:07,590 --> 01:04:09,338 aquí es nuevo. 1369 01:04:09,338 --> 01:04:11,760 >> AUDIENCIA: Saluda a quien sea. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID MALAN: Se va a saludar a quien visita esta página. 1371 01:04:14,020 --> 01:04:15,120 Entonces, ¿cómo? 1372 01:04:15,120 --> 01:04:18,070 >> Así cuenta, resulta que en JavaScript hay una función () de alerta. 1373 01:04:18,070 --> 01:04:22,840 Esta es una función muy poco triste que realmente sólo tiende a molestar a los usuarios. 1374 01:04:22,840 --> 01:04:25,440 No es uno que realmente debe utilizar normalmente, pero es un rápido y sucio 1375 01:04:25,440 --> 01:04:27,710 camino de la especie de imprimir algo a un usuario gráfica 1376 01:04:27,710 --> 01:04:29,180 interfaz, como un navegador. 1377 01:04:29,180 --> 01:04:31,400 Nótese aquí que tengo una cadena entre comillas simples. 1378 01:04:31,400 --> 01:04:36,010 Resulta que a diferencia de C, JavaScript puede tener en realidad se utiliza sola 1379 01:04:36,010 --> 01:04:38,730 cita, y, francamente, es sólo un poco de la convención estilística entre 1380 01:04:38,730 --> 01:04:41,180 JavaScript programadores utilizar comillas simples. 1381 01:04:41,180 --> 01:04:43,750 PHP, que en realidad tienen poco significado diferente. 1382 01:04:43,750 --> 01:04:45,810 Pero, por ahora, sólo sé que esa es la única razón. 1383 01:04:45,810 --> 01:04:49,270 La convención en JavaScript es a menudo para usar comillas simples, pero podríamos utilizar 1384 01:04:49,270 --> 01:04:50,950 comillas dobles en ambos lugares también. 1385 01:04:50,950 --> 01:04:52,610 >> Así que esto es interesante. 1386 01:04:52,610 --> 01:04:56,430 Recuerde la última vez que tuvimos que imagen en la pantalla que atrajo a un árbol 1387 01:04:56,430 --> 01:04:59,720 en el que tuvo el nodo HTML y el la cabeza nodo, y el nodo de cuerpo, 1388 01:04:59,720 --> 01:05:00,800 y luego un poco de texto. 1389 01:05:00,800 --> 01:05:04,700 Pero había un nodo especial en el muy superior que llamé el documento. 1390 01:05:04,700 --> 01:05:08,260 Bueno, resulta que en JavaScript, cualquier vez que se escribe un programa en JavaScript 1391 01:05:08,260 --> 01:05:11,040 en un navegador, usted tiene acceso a una variable global especial. 1392 01:05:11,040 --> 01:05:14,130 Similares en espíritu a superglobals de PHP, éste se llama en 1393 01:05:14,130 --> 01:05:16,050 todo documento minúsculas. 1394 01:05:16,050 --> 01:05:21,480 >> Es como una estructura, pero esta estructura También tiene funciones dentro de ella. 1395 01:05:21,480 --> 01:05:23,790 Así que una estructura C sólo tiene datos normalmente. 1396 01:05:23,790 --> 01:05:29,060 Pero un objeto de JavaScript, ya que esto técnicamente es también tiene funciones, 1397 01:05:29,060 --> 01:05:31,830 conocido de otra manera como métodos, dentro de ella. 1398 01:05:31,830 --> 01:05:35,750 Y usted puede llamar a una función en el interior de este objeto, literalmente, haciendo su 1399 01:05:35,750 --> 01:05:39,610 nombre, punto, y luego el nombre de la función, o de nuevo método. 1400 01:05:39,610 --> 01:05:41,160 Es sólo un sinónimo, de verdad. 1401 01:05:41,160 --> 01:05:42,450 >> ¿Y qué hace esta función? 1402 01:05:42,450 --> 01:05:43,840 Puede especie de adivinar por su nombre. 1403 01:05:43,840 --> 01:05:45,590 Obtenga elemento por ID. 1404 01:05:45,590 --> 01:05:50,040 Así que esto va a buscar en la página web, buscar ese árbol, en busca de 1405 01:05:50,040 --> 01:05:55,210 cualquier nodo, elemento de AKA, tiene un ID único de cotización nombre de la cita. 1406 01:05:55,210 --> 01:05:56,560 Y entonces, ¿qué voy a hacer? 1407 01:05:56,560 --> 01:06:00,350 Voy a obtener el valor en el interior de ese nodo en el árbol, y me voy 1408 01:06:00,350 --> 01:06:02,580 decir de alguna manera hola a ese nombre. 1409 01:06:02,580 --> 01:06:05,360 >> Así que tomar una conjetura, a pesar de que no hemos visto esto todavía, ¿qué hacer en el signo más 1410 01:06:05,360 --> 01:06:07,396 símbolos significan aquí y aquí probablemente? 1411 01:06:07,396 --> 01:06:08,230 >> AUDIENCIA: Concatenar. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID MALAN: Concatenar. 1413 01:06:09,220 --> 01:06:11,290 Cierto, y estos son sólo tipo de decisiones de diseño 1414 01:06:11,290 --> 01:06:12,280 la gente hizo hace años. 1415 01:06:12,280 --> 01:06:15,190 En PHP, concatenar cosas con puntos. 1416 01:06:15,190 --> 01:06:18,800 En C, saltar a través de varios aros y llamar a funciones como strcopy () o 1417 01:06:18,800 --> 01:06:20,600 strcat () o otras funciones similares. 1418 01:06:20,600 --> 01:06:22,060 Pero en JavaScript se utiliza ventajas. 1419 01:06:22,060 --> 01:06:24,770 Así que esto es simplemente concatenando tres cadenas - 1420 01:06:24,770 --> 01:06:27,850 hola, un nombre, y luego un signo de exclamación. 1421 01:06:27,850 --> 01:06:30,390 >> Por eso, cuando y por qué es esta función llamada sin embargo? 1422 01:06:30,390 --> 01:06:33,150 Bueno, tener una pista de la HTML en la parte inferior. 1423 01:06:33,150 --> 01:06:35,810 ¿Por qué se saludan () llamado, o cuando? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Al parecer, lo mejor que puedo decir, en presentar, cuando se envía el formulario, 1426 01:06:44,030 --> 01:06:47,200 Voy a hacer lo que sea dentro de estas citas. 1427 01:06:47,200 --> 01:06:50,900 Y en concreto, voy a llamar a saludar () y luego devolver false. 1428 01:06:50,900 --> 01:06:53,090 >> Bueno, vamos a ver que la red efecto es de primera. 1429 01:06:53,090 --> 01:06:58,290 Así que déjame ir adelante y escribo en, digamos, Loren, en Enviar. 1430 01:06:58,290 --> 01:06:59,440 Hola Loren. 1431 01:06:59,440 --> 01:07:02,990 Vamos a ver si tal vez esto era sólo una implementación de la suerte. 1432 01:07:02,990 --> 01:07:03,200 Nope. 1433 01:07:03,200 --> 01:07:05,990 Así que ha de escribir a cabo lo que sea name I realmente puse ahí. 1434 01:07:05,990 --> 01:07:07,970 >> Pero note lo que no está cambiando. 1435 01:07:07,970 --> 01:07:10,360 La URL es todavía dom-0.html. 1436 01:07:10,360 --> 01:07:11,820 No hay register.php. 1437 01:07:11,820 --> 01:07:13,110 No hay segundo archivo. 1438 01:07:13,110 --> 01:07:14,930 No hay atributo action. 1439 01:07:14,930 --> 01:07:19,720 Entonces, ¿qué es este falso retorno presumiblemente haciendo? 1440 01:07:19,720 --> 01:07:23,660 ¿Por qué estoy llamando a saludar () y luego volviendo falsa probablemente? 1441 01:07:23,660 --> 01:07:26,420 Lo que normalmente sucede al hacer clic Enviar en un formulario que aún tenemos 1442 01:07:26,420 --> 01:07:27,854 visto en la última semana? 1443 01:07:27,854 --> 01:07:29,900 >> AUDIENCIA: [inaudible]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID MALAN: Se va a alguna parte, ¿verdad? 1445 01:07:30,860 --> 01:07:32,720 Va a alguna URL de destino. 1446 01:07:32,720 --> 01:07:34,120 Pero yo no quiero que eso suceda aquí. 1447 01:07:34,120 --> 01:07:37,620 Quiero que mi página web para ser completamente dinámico como Gmail, donde una vez que estás 1448 01:07:37,620 --> 01:07:38,650 allí, te quedas allí. 1449 01:07:38,650 --> 01:07:42,900 La dirección URL no cambia en una forma que indica la página entera está recargando. 1450 01:07:42,900 --> 01:07:46,680 Más bien, sólo quiero cambiar algo como imprimir algo 1451 01:07:46,680 --> 01:07:48,320 aquí en la pantalla. 1452 01:07:48,320 --> 01:07:49,630 >> Pues déjame limpiar esto un poco. 1453 01:07:49,630 --> 01:07:55,370 Permítanme abro no dom-0, pero déjame abro dom-2. 1454 01:07:55,370 --> 01:07:57,350 Para que lo has visto alguna sintaxis aquí. 1455 01:07:57,350 --> 01:08:02,080 >> Resulta que lo que acabamos de DID se utiliza JavaScript prima. 1456 01:08:02,080 --> 01:08:04,420 Así que esto es realmente el idioma JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Algunos de ustedes podrían saber de una librería llamada jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> Así jQuery no es la misma cosa como JavaScript. 1459 01:08:09,980 --> 01:08:14,110 Es sólo una biblioteca que un muy inteligente chico escribió y popularizó como 1460 01:08:14,110 --> 01:08:18,100 que casi todos en el mundo ahora utiliza jQuery utilizando JavaScript. 1461 01:08:18,100 --> 01:08:20,890 Y a primera vista, honestamente, se ve un poco más críptica. 1462 01:08:20,890 --> 01:08:24,990 Pero te vas a encontrar, sobre todo si vas allí para su proyecto final con la web 1463 01:08:24,990 --> 01:08:29,029 desarrollo, usted encontrará que este limpia las cosas y le ahorra bastante 1464 01:08:29,029 --> 01:08:30,229 pocas líneas de código. 1465 01:08:30,229 --> 01:08:33,189 >> Así que vamos a echar un vistazo a cómo Este formulario está trabajando. 1466 01:08:33,189 --> 01:08:35,664 Note lo que me quito aparentemente de mi HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 No hay en enviar manejador por así decirlo. 1469 01:08:40,630 --> 01:08:41,470 No hay ningún atributo. 1470 01:08:41,470 --> 01:08:43,359 Porque usted sabe, lo que No me gustaba de verdad? 1471 01:08:43,359 --> 01:08:45,640 Me sentí como si estuviéramos cayendo en viejos hábitos allí. 1472 01:08:45,640 --> 01:08:49,340 Al igual que estaba empezando a sentirse descuidado al mezclarse tanto con CSS 1473 01:08:49,340 --> 01:08:52,149 HTML, porque eres un poco de tirar diferentes idiomas de todo el 1474 01:08:52,149 --> 01:08:56,180 lugar, del mismo modo hizo esto comienza a sentirse como un mal camino para ir hacia abajo, donde 1475 01:08:56,180 --> 01:09:01,069 Voy a poner el código JavaScript dentro de mi HTML en vez de factoring a cabo. 1476 01:09:01,069 --> 01:09:02,279 >> Así que esa es la lección aquí. 1477 01:09:02,279 --> 01:09:05,080 En dom-2.html, estoy factoring a cabo. 1478 01:09:05,080 --> 01:09:07,399 Y yo estoy haciendo las cosas un poco de manera diferente. 1479 01:09:07,399 --> 01:09:09,630 Por ahora, voy a agitar mis manos a lo que esta realmente 1480 01:09:09,630 --> 01:09:10,590 debajo de la capucha. 1481 01:09:10,590 --> 01:09:14,210 Pero sólo por ahora suponer que ese primer línea de código en esta biblioteca 1482 01:09:14,210 --> 01:09:18,170 llama jQuery sólo cuando el documento está listo, haga lo siguiente. 1483 01:09:18,170 --> 01:09:20,080 >> Dado que las páginas web pueden tener algún tiempo para cargar. 1484 01:09:20,080 --> 01:09:23,029 Usted podría estar en un internet lento conexión, y podría estar girando 1485 01:09:23,029 --> 01:09:25,290 y girando, y finalmente se ha cargado. 1486 01:09:25,290 --> 01:09:29,060 Esa línea de código justo dice esperar hasta toda la página está lista, el documento 1487 01:09:29,060 --> 01:09:31,189 está listo, antes de ejecutar este código. 1488 01:09:31,189 --> 01:09:34,390 >> Y ahora note, este es probablemente el más útil primero 1489 01:09:34,390 --> 01:09:36,189 quitar de jQuery. 1490 01:09:36,189 --> 01:09:42,140 Esta línea aquí es muy similar en espíritu a esta línea mucho más tiempo aquí. 1491 01:09:42,140 --> 01:09:46,920 Mientras que en el código JavaScript en bruto, hay existe un objeto global documento que 1492 01:09:46,920 --> 01:09:50,460 tiene una función llamada getElementById (), la gente que escribió 1493 01:09:50,460 --> 01:09:55,720 jQuery simplifica que decir simplemente signo de dólar, y luego dentro de 1494 01:09:55,720 --> 01:10:00,250 paréntesis ponen dos citas, y luego poner un símbolo de hash seguida de la 1495 01:10:00,250 --> 01:10:02,250 único ID que desee capturar. 1496 01:10:02,250 --> 01:10:06,170 Así que este es equivalente a document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Mientras tanto,. Presentar sólo significa el presentación de la forma que sea que estés 1498 01:10:11,090 --> 01:10:14,240 refiriéndose a la izquierda, vaya adelante y ejecutar este. 1499 01:10:14,240 --> 01:10:16,600 Pero esto es ahora la curiosidad también. 1500 01:10:16,600 --> 01:10:19,560 Lo raro de lo que He destacado en esta lista? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 No sólo es clase de sintácticamente nueva, también hay algo que falta. 1503 01:10:28,594 --> 01:10:29,558 >> AUDIENCIA: Simplemente llama función? 1504 01:10:29,558 --> 01:10:31,970 No se llama alerta? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID MALAN: Si. 1506 01:10:32,440 --> 01:10:35,450 Bueno, tan alerta () se ha reducido aquí, para ser justos. 1507 01:10:35,450 --> 01:10:39,520 Pero no hay mención de un nombre, como usted sabe, foo o 1508 01:10:39,520 --> 01:10:40,980 algo aquí. 1509 01:10:40,980 --> 01:10:43,830 Y de hecho, esta es una de las características de JavaScript que es bastante 1510 01:10:43,830 --> 01:10:45,370 de gran alcance, pero también bastante nueva. 1511 01:10:45,370 --> 01:10:47,460 Y PHP tiene en realidad esto también. 1512 01:10:47,460 --> 01:10:49,500 >> Déjenme seguir adelante y hacer algo muy rápido. 1513 01:10:49,500 --> 01:10:52,030 Déjame ir adelante y poner esto aquí. 1514 01:10:52,030 --> 01:10:52,600 Déjame hacer esto. 1515 01:10:52,600 --> 01:10:53,690 Función. 1516 01:10:53,690 --> 01:10:56,455 Vamos a llamar a este controlador (). 1517 01:10:56,455 --> 01:10:58,290 Una función de controlador por así decirlo. 1518 01:10:58,290 --> 01:11:00,110 Algo que se encarga de alguna operación. 1519 01:11:00,110 --> 01:11:02,700 Voy a limpiar mi sangría. 1520 01:11:02,700 --> 01:11:04,380 Y poner esto aquí. 1521 01:11:04,380 --> 01:11:06,090 Y puesto que aquí. 1522 01:11:06,090 --> 01:11:06,470 Sip. 1523 01:11:06,470 --> 01:11:07,060 Aceptar. 1524 01:11:07,060 --> 01:11:10,300 >> Así que ahora tengo una función llamada handler () que no se sabe muy bien 1525 01:11:10,300 --> 01:11:10,890 lo que hace aún. 1526 01:11:10,890 --> 01:11:12,710 Simplemente todavía tiene esas cosas. 1527 01:11:12,710 --> 01:11:13,900 ¡Vaya. 1528 01:11:13,900 --> 01:11:15,820 Tomó demasiado. 1529 01:11:15,820 --> 01:11:18,490 Vamos a hacer esto. 1530 01:11:18,490 --> 01:11:18,990 Está bien. 1531 01:11:18,990 --> 01:11:20,240 Lo siento. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Está bien. 1534 01:11:23,690 --> 01:11:24,720 Déjame hacer esto. 1535 01:11:24,720 --> 01:11:25,020 Aceptar. 1536 01:11:25,020 --> 01:11:27,040 Esto se ve muy bien y recto enviar ahora. 1537 01:11:27,040 --> 01:11:29,090 Déjame hacer esto. 1538 01:11:29,090 --> 01:11:29,860 Haga esto. 1539 01:11:29,860 --> 01:11:30,950 Y en Aceptar. 1540 01:11:30,950 --> 01:11:33,080 Así que ahora, vamos a poner esto aquí. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 No más de programación sobre la marcha. 1543 01:11:37,270 --> 01:11:37,900 Aceptar. 1544 01:11:37,900 --> 01:11:40,000 >> Así que ahora, vamos a volver a donde comenzó la historia. 1545 01:11:40,000 --> 01:11:43,530 Anteriormente, he dicho que esta línea aquí significa que cuando el documento esté listo, vaya 1546 01:11:43,530 --> 01:11:44,380 adelante y hacer esto. 1547 01:11:44,380 --> 01:11:45,660 ¿Qué quiero hacer? 1548 01:11:45,660 --> 01:11:49,070 Bueno en concreto, quiero ir adelante y hacer lo siguiente. 1549 01:11:49,070 --> 01:11:53,700 Ejecutar esta línea de código, y luego lo que quiero que hagas es llamar a este 1550 01:11:53,700 --> 01:11:56,370 funcionar cuando se envía el formulario. 1551 01:11:56,370 --> 01:11:57,730 >> Ahora bien, esto es lo interesante. 1552 01:11:57,730 --> 01:11:59,170 Esto no es en sí mismo una función. 1553 01:11:59,170 --> 01:12:02,540 Noten que no estoy poniendo paréntesis aquí en la forma normal. 1554 01:12:02,540 --> 01:12:06,800 Estoy literalmente pasando una función llamada Handler () a otra función 1555 01:12:06,800 --> 01:12:10,800 llamado presentar () como argumento como aunque es como una variable. 1556 01:12:10,800 --> 01:12:14,290 Y esta es una de las características de JavaScript es a sí mismos funciones 1557 01:12:14,290 --> 01:12:15,710 son en realidad objetos. 1558 01:12:15,710 --> 01:12:18,350 De hecho, son realmente sólo las variables de algún tipo. 1559 01:12:18,350 --> 01:12:21,340 Y si el nombre de la función es handler (), no hay ninguna razón por la que no puede 1560 01:12:21,340 --> 01:12:23,390 pasarlo como argumento aquí. 1561 01:12:23,390 --> 01:12:27,530 Y esto significa que cuando la forma con el ID de la demo es 1562 01:12:27,530 --> 01:12:29,320 presentado, llamar a esta función. 1563 01:12:29,320 --> 01:12:32,770 >> Pero ahora si me deshago de todo esto, ¿por qué entonces me hago tal vez 1564 01:12:32,770 --> 01:12:34,850 hace de este un momento? 1565 01:12:34,850 --> 01:12:36,840 Bueno, esta es una función anónima. 1566 01:12:36,840 --> 01:12:41,080 Porque, francamente, me di cuenta de por qué estoy tomarse la molestia de perder el tiempo que se declara una 1567 01:12:41,080 --> 01:12:45,540 función llamada controlador () sólo para llamar en uno y sólo un lugar? 1568 01:12:45,540 --> 01:12:48,640 Si yo no necesito el nombre, y yo no lo hago tenga que llamarlo más de un lugar, 1569 01:12:48,640 --> 01:12:51,200 vamos a poner en práctica la función justo donde lo necesito. 1570 01:12:51,200 --> 01:12:55,190 Y así, JavaScript y PHP apoyan lo se llaman funciones anónimas que 1571 01:12:55,190 --> 01:12:57,900 me permite hacer exactamente eso aquí. 1572 01:12:57,900 --> 01:12:59,570 >> Pero sólo estamos arañando la superficie. 1573 01:12:59,570 --> 01:13:02,430 Vamos burlan con sólo un par ejemplos finales aquí. 1574 01:13:02,430 --> 01:13:04,600 >> Si entro en quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Tenga en cuenta que esto es en realidad un PHP función, un programa PHP, que escribí 1577 01:13:11,870 --> 01:13:15,270 que espera un parámetro HTTP llamado símbolo, y puedo pasar en 1578 01:13:15,270 --> 01:13:16,730 un valor como FB. 1579 01:13:16,730 --> 01:13:20,010 Y si en realidad nos fijamos en la fuente código, esto está consultando un sitio web gratuito 1580 01:13:20,010 --> 01:13:23,680 llamado Yahoo Finanzas, al igual que p-set siete, y se está volviendo a mí 1581 01:13:23,680 --> 01:13:26,580 algo aparentemente el formato conocido es JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 Es sólo un objeto. 1584 01:13:28,810 --> 01:13:32,500 Note las llaves, las comillas, el colon, y las comas. 1585 01:13:32,500 --> 01:13:34,720 >> Ahora mientras tanto, esto es muy bueno. 1586 01:13:34,720 --> 01:13:38,520 Debido a que es probable que pueda utilizar una programación idioma para generar direcciones URL 1587 01:13:38,520 --> 01:13:40,370 que se parecen a esta dinámica, ¿no? 1588 01:13:40,370 --> 01:13:43,340 Puedo cambiar esto a Google y volver de Google 1589 01:13:43,340 --> 01:13:47,930 precio de las acciones de $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Así que vamos a ver si no podemos usar esto ahora. 1591 01:13:49,640 --> 01:13:56,590 >> Déjame ir a ajax-0 aquí, lo que se parece a lo siguiente. 1592 01:13:56,590 --> 01:13:59,750 Es sólo un sitio web que tiene un formulario con un botón. 1593 01:13:59,750 --> 01:14:05,860 Déjame aquí seguir adelante y escribo en YHOO de símbolo de cotización de Yahoo, haga clic en Obtener 1594 01:14:05,860 --> 01:14:10,530 Cita, y ahora noto que he recibido una alerta con 32.86. 1595 01:14:10,530 --> 01:14:14,050 >> Déjame ir en realidad a una versión más de lujo de esta página, la versión dos, y 1596 01:14:14,050 --> 01:14:17,530 escriba en digamos Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Reciba una oferta. 1598 01:14:18,410 --> 01:14:19,850 Y ahora fíjense, no hay alerta. 1599 01:14:19,850 --> 01:14:22,770 Aviso donde dice precio que se determine? 1600 01:14:22,770 --> 01:14:27,060 No es el más simple de ejemplos que alude a lo Gchat y Facebook 1601 01:14:27,060 --> 01:14:30,070 Chatea, y Gmail, y el otro tal sitios web están haciendo por el hecho 1602 01:14:30,070 --> 01:14:31,290 el cambio de la página web. 1603 01:14:31,290 --> 01:14:31,800 >> Note esto. 1604 01:14:31,800 --> 01:14:33,120 Permítanme volver a cargar la página. 1605 01:14:33,120 --> 01:14:35,080 Permítanme abro Inspector de Chrome. 1606 01:14:35,080 --> 01:14:36,890 Déjame ir a los elementos ficha aquí abajo. 1607 01:14:36,890 --> 01:14:42,310 Ahora note si puedo ampliar hasta aquí y abrir esto, observe que este es mi 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - mi modelo de objetos de documentos. 1609 01:14:44,500 --> 01:14:45,920 Este es mi HTML. 1610 01:14:45,920 --> 01:14:48,750 Pero ahora cuenta, a pesar de que va a ser un poco difícil de ver, tanto en 1611 01:14:48,750 --> 01:14:52,080 lugares a la vez, si escribo en FB aquí, mire la parte inferior 1612 01:14:52,080 --> 01:14:54,110 de la pantalla solamente. 1613 01:14:54,110 --> 01:14:57,720 >> En realidad está cambiando mi HTML sobre la marcha. 1614 01:14:57,720 --> 01:15:01,670 Y lo está haciendo esto, sencillamente, haciendo algo como esto. 1615 01:15:01,670 --> 01:15:06,800 Si abro ajax-2, la notificación implementación algo tan sexy como 1616 01:15:06,800 --> 01:15:09,560 que, a pesar de que es bastante feo, pero tan sofisticado como que 1617 01:15:09,560 --> 01:15:11,910 funcionalmente, tiene algunos HTML en la parte inferior. 1618 01:15:11,910 --> 01:15:13,810 Pero noto que solía etiquetar. 1619 01:15:13,810 --> 01:15:16,640 Nosotros no hemos usado esto antes, pero esto es como una, pero no obliga a 1620 01:15:16,640 --> 01:15:17,840 todo en una nueva línea. 1621 01:15:17,840 --> 01:15:20,830 Simplemente tiene una región rectangular en la misma línea en esencia. 1622 01:15:20,830 --> 01:15:22,870 >> Fíjate que yo le di un ID de precio. 1623 01:15:22,870 --> 01:15:26,800 Y resulta que mediante el uso de la misma JavaScript biblioteca, tengo una función 1624 01:15:26,800 --> 01:15:30,440 llamada cita () que se llama cada vez que se envía el formulario. 1625 01:15:30,440 --> 01:15:31,800 Y lo que hago es la siguiente. 1626 01:15:31,800 --> 01:15:35,730 Estoy declarando una variable en JavaScript llamado url, guardar el valor 1627 01:15:35,730 --> 01:15:38,650 quote.php? símbolo =. 1628 01:15:38,650 --> 01:15:44,220 En otras palabras, yo mismo estoy empezando para preparar una solicitud HTTP, y luego 1629 01:15:44,220 --> 01:15:49,250 Estoy concatenando en que con un plus cualquiera que sea el elemento con el ID de 1630 01:15:49,250 --> 01:15:54,190 del símbolo es que cuenta es que campo de texto justo aquí abajo. 1631 01:15:54,190 --> 01:15:56,630 Así que al igual que teníamos formas en el pasado. 1632 01:15:56,630 --> 01:16:01,450 >> Y luego resulta que en jQuery, si llamar. val (), que llama de un val 1633 01:16:01,450 --> 01:16:05,900 función, una función de valor, que obtiene cualquiera que sea el usuario ha escrito pulg 1634 01:16:05,900 --> 01:16:08,920 Y entonces todo el tráfico de la red lo que sucede es esto. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> Y en un aparte, muestra de dólar es sólo una notación abreviada. 1637 01:16:13,720 --> 01:16:16,860 Es realmente jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Tráeme a JSON desde esta dirección, y cuando la petición viene de vuelta, llame a este 1639 01:16:21,520 --> 01:16:26,550 función y pase como argumento lo volvieron desde el servidor. 1640 01:16:26,550 --> 01:16:31,205 >> Así que en otras palabras, si vuelvo a ir a la navegador y vuelva a quote.php, 1641 01:16:31,205 --> 01:16:35,590 lo que mi navegador está haciendo es conseguir este fragmento de datos. 1642 01:16:35,590 --> 01:16:38,930 Y cuando voy a esta página web aquí, observe si en lugar de ir a la red 1643 01:16:38,930 --> 01:16:43,820 ficha y desactivarla y, a continuación, escriba en algo así como GOOG para Google y obtener 1644 01:16:43,820 --> 01:16:46,340 Cita, observe la página no ha cambiado. 1645 01:16:46,340 --> 01:16:50,990 Pero una petición HTTP se hizo, y lo que regresó aquí si nos fijamos en el 1646 01:16:50,990 --> 01:16:56,130 la respuesta es un montón de JSON que accedimos finalmente con 1647 01:16:56,130 --> 01:16:58,070 esta simple línea aquí. 1648 01:16:58,070 --> 01:17:00,150 >> De datos es lo que se llegó desde el servidor. 1649 01:17:00,150 --> 01:17:02,120 El precio es el nombre de la llave que me importa. 1650 01:17:02,120 --> 01:17:05,230 Así data.price me da eso. 1651 01:17:05,230 --> 01:17:07,540 >> Ahora mientras tanto, y esta es el último ejemplo. 1652 01:17:07,540 --> 01:17:09,280 Usted puede hacer aún más con la página. 1653 01:17:09,280 --> 01:17:12,440 Una realidad, así dos. 1654 01:17:12,440 --> 01:17:14,780 Podemos traer de vuelta el etiquetar, si te acuerdas de esto. 1655 01:17:14,780 --> 01:17:15,850 Eso es JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Podemos hacer eso. 1657 01:17:17,110 --> 01:17:17,690 Muy emocionante. 1658 01:17:17,690 --> 01:17:18,800 Dejaremos que a medida que un cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Pero lo más emocionante, puede hacer cosas como esta. 1660 01:17:21,590 --> 01:17:25,940 Si voy a la geolocalización-1, resulta que que Chrome sabe que estamos en 1661 01:17:25,940 --> 01:17:30,672 Longitud Latitud 42.37. -71.10. 1662 01:17:30,672 --> 01:17:32,940 Así que hay mucho más allí a su disposición. 1663 01:17:32,940 --> 01:17:34,290 Pero más sobre esto la próxima semana. 1664 01:17:34,290 --> 01:17:35,540 Nos vemos el lunes. 1665 01:17:35,540 --> 01:17:37,558