DAVID J. MALAN: Muy bien, por lo que esta aquí es el brazo Myo banda, un par de los cuales tener para los proyectos finales CS50. Y eso era una demostración que hizo cola que de antemano donde esencialmente este brazo bastante fuerte banda de hasta aquí escucha a sus movimientos musculares que luego son mapeados en software para el ordenador portátil de Colton por aquí que tenía iTunes y que canción ya en cola. En lugar de esto me demos, Colton ha estado en el laboratorio claramente toda la semana para conseguir una demostración listo para un valiente voluntario. Si alguien quiere venir en up-- vio primero la mano. Vamos arriba. [00:01:09] Bien. ¿Y cuál es su nombre? [00:01:13] AUDIENCIA: Uh, María. [00:01:14] DAVID J. MALAN: María, me alegro de verte. Vamos por aquí. Permítanme presentarles a Colton. Colton, esta es María. [00:01:21] COLTON: Hola, encantado de conocerte. [00:01:23] DAVID J. MALAN: Todos derecho, por lo que el primer paso, estamos va a tener que poner esto a su antebrazo por lo que es bastante apretado hasta cerca de su codo. Y mientras tanto, vamos a tener poner en nuestro Google Glass y vamos a mezclar las tecnologías de hoy. [00:01:33] COLTON: En primer lugar tendremos que conectar esto en las cosas. [00:01:36] DAVID J. MALAN: OK. En realidad, vamos a poner el brazo como cerca de este cable como sea posible para que podamos sincronizar primero para arriba. [00:01:41] COLTON: Vamos a hacer esto. [00:01:42] DAVID J. MALAN: Y mientras tanto, por lo que que todo el mundo puede conseguir una mirada más de cerca, vamos echamos cámara de Andrew en la pantalla allí. Así que tenemos un cable USB que es está conectado a la banda de María. Y permítanme lanzo pantalla de Colton arriba en el proyector siguiente. [00:02:00] Así Colton es el registro del dispositivo ahora como un Myo conectado a este cable. Y ahora lo que María de va a hacer momentáneamente en realidad es caminar a través de los pasos de calibración y enseñar el software cómo sus músculos responden cuando se hacen ciertos predefinido gestos que el software entiende. Si desea ir en delante de la pantalla. Aceptar, seguir intentándolo. [00:02:30] COLTON: Ir como este. Y así. Y todo el camino a la derecha. Volver. [00:02:35] DAVID J. MALAN: OK. Perspectiva diferente. No es usted. Somos nosotros. [00:02:40] MARIA: OK. DAVID J. MALAN: No. Vamos a pasar lo más arriba por lo que es más cerca de su codo, o incluso con más fuerza. Bien. [00:02:52] Aquí vamos. Este sería un buen momento para CS52X. Hay que ir. [00:02:57] Muy agradable. Okay. Pulgar para meñique. [00:03:02] Muy agradable. Extiende tus dedos. Bueno. Ola derecha. Se está mostrando curiosidad que con la mano-- izquierda [00:03:17] COLTON: Sí, eso es extraño. DAVID J. MALAN: Saludo a la derecha y seguir adelante. Un avance rápido para saltar o siguiente. Eso está bien derecho Wave. [00:03:25] MARIA: Yo no-- esperar. [00:03:26] DAVID J. MALAN: ¿Necesita ayuda? [00:03:28] COLTON: Así que te vas de esta manera. MARIA: Se está convirtiendo la otra cosa, sin embargo. COLTON: Es. DAVID J. MALAN: Sí No sé razón por la que usted está mostrando un zurdo. COLTON: ¿Por qué no try-- sólo tratar de ir así. [00:03:38] DAVID J. MALAN: No? Tal vez llegar a su brazo un poco más recto y que sea más abrupto como este. Sí, está bien, vamos. [00:03:48] MARIA: Lo siento. DAVID J. MALAN: No es tu culpa. COLTON: Está bien. DAVID J. MALAN: De acuerdo. Bueno-- [00:03:56] MARIA: ¿Debemos omitir esto, entonces? DAVID J. MALAN: Sí, vamos a te deje fuera del gancho. Así que si alguien quiere hacer un proyecto final utilizando esta vanguardia hardware, darse cuenta de que sólo podría tomar un poco de tiempo para acostumbrarse. Y esto-- la realidad es esta en realidad es muy sangrado borde. [00:04:10] Esto es lo que se llama el kit de desarrollo, que está destinado a ser esencialmente un pre-lanzamiento de modo que la gente puede hacer exactamente esto-- luchar con él, la figura cómo los cuerpos de las personas trabajan con la tecnología. Así que si quieres luego, después de la conferencia, podemos dejar que usted viene y tomar otra puñalada en ella. Pero por lo demás, una ronda de aplausos, si que pudimos, para Maria por venir en adelante. [00:04:26] MARIA: Gracias. [00:04:28] DAVID J. MALAN: Gracias. Nos aferramos a esto, pero vamos a dar usted-- ¿qué tal una bola de la tensión aquí? Oh, y- si: sí, gracias. Bien. Así que para los curiosos, si usted fuera familiarizado con la elección de sonido que hicimos allí antes, una televisión increíble demostrar que usted debe absolutamente ser atracón-viendo en Netflix es este de aquí. [00:04:51] ALTAVOZ 1: Señoras y señores, un mago llamado Josh. [00:05:04] DAVID J. MALAN: Y por lo visto, es una cosa que me de texto durante la conferencia ahora. Estoy siendo dije que María tenía un cumpleaños ayer. Así que feliz cumpleaños de CS50 a María también. [00:05:18] Así que usted puede haber leído en el mes reciente que este caballeros aquí, Steve Ballmer, quien era en realidad clase de 1977 en la universidad, recientemente retirado por Microsoft. Él era estudiante aquí, a continuación, un par de años más tarde se encontró en Stanford Business School cuando recibió un teléfono llamada de un amigo suyo que había vivido en el pasillo de él aquí en Harvard. El nombre de ese amigo era Bill Gates, y en el momento, él estaba tratando de reclutar a Steve para ser la primera persona de negocios, realmente, en una pequeña empresa de nombre de Microsoft. [00:05:45] Una breve historia larga, Steve fue finalmente conquistado, unido a Microsoft cuando tenía sólo 30 empleados. Y para el momento en que se retiró hace poco, la compañía tenía 100.000 empleados en los últimos años. Y por lo que un sitio web conocido como The Verge preparado este homenaje en video que pensamos que sería mejor compartido que le da un sentido de lo mucho que la energía de Steve trae a cualquier presentación que da. [REPRODUCCIÓN DE VÍDEO] -Microsoft Es como un cuarto hijo. Los niños hacen salir de la casa. En este caso, supongo Me voy de la casa. Hey Bill, whazzap? [00:06:23] -Wazzap? [00:06:24] -Oye, Wazzap? Se nos ha dado un enorme oportunidad. Y Bill nos dio esa oportunidad. Quiero dar las gracias a Bill para que. Quiero que también. El ritmo de la innovación no va a reducir la velocidad. [00:06:42] Se va a llegar más rápido y más rápido. Puede haber unos pocos competidores que por desgracia están eliminados! [00:06:54] Me encanta esta empresa. ¡Sí! Soy un PC, y me encanta esta empresa! [00:07:08] Desarrolladores, desarrolladores, desarrolladores, desarrolladores, desarrolladores, desarrolladores, desarrolladores, desarrolladores. ¡Sí! Los desarrolladores web! [00:07:19] Los desarrolladores web! Los desarrolladores web! Escuche lo demás que usted obtener sin costo adicional! [00:07:28] El ejecutivo de MS-DOS, una cita calendario, una pila de tarjetas, un bloc de notas, un reloj, un panel de control. Y, ¿puedes creerlo? Reversie! [00:07:35] Grabarlos en un CD! Póngalas a MSN! Usted les envía por correo a los amigos! [00:07:40] Todo con un solo clic! Uno Microsoft, una estrategia, una team-- centrado, disciplinado, profesional, y experto en todo lo que hacemos. Permítanme utilizar una línea de una vieja película. [00:07:52] Las relaciones son como los tiburones. Se mueven hacia adelante o se mueren. De hecho, creo tecnología empresas son los mismos. [00:08:01] [FIN REPRODUCCIÓN DE VÍDEO] DAVID J. MALAN: Así que estamos muy contentos de anunciar que Steve se unirá a nosotros aquí en CS50 próximo miércoles a las el lugar y la hora de costumbre aquí. Espacio probable será limitado. Y así, a unirse a nosotros en persona, por favor dirigirse hoy o poco después a cs50.harvard.edu/register. [00:08:22] Y vamos a seguir por Martes confirmando manchas. Tenemos ganas de que el próximo Miércoles durante conferencia en CS50. Ahora, en otras noticias, se me ocurrió venir a través de este en The Crimson sólo el otro día. [00:08:34] Resulta que uno de personal de CS50 y al menos uno de los estudiantes del CS50 Actualmente se está ejecutando para UC presidente y vicepresidente, que me trajo de vuelta a mis propios días atrás cuando perdí la elección UC miserablemente. Pero el lado positivo en eso es que siempre contar la historia es que una de la que estoy seguro muchas razones por las que perdieron la elección era una falta completa de un talento para hablar en público. Y así, con toda sinceridad, que me llevó, que la experiencia Creo que mi primer año, para firmar en realidad para Harvard Computer Society, que es el grupo en el campus que ejerce en diversas charlas técnicas y otras cosas. Y me hice cargo de su enseñanza seminarios y, por tanto, tenido una oportunidad, un maravillosa oportunidad, para empezar a trabajar en exactamente esto. Pero también, tuve la oportunidad durante esta experiencia para enseñar a mí mismo tanto más HTML. Y así me demorado anoche por mirando a través de la página web basada en HTML Hice como en 1997, el 98, para mi campaña que se parece a esto aquí. Lo sé. [00:09:29] Porque-- y, por supuesto, previo aviso esta increíble decisión de diseño en 1998 o lo que sea. La primera cosa que usted desea que los usuarios hacer al visitar su sitio web es tener que hacer clic en otro enlace sólo para entrar en su página web con el monje detrás de una cortina cubierto donde al parecer, mi plataforma de campaña era. Y esto es todo lo que obtendrá hoy es sólo una captura de pantalla. Pero yo estaba leyendo a través de, como, mis carteles de la campaña pasada noche y mi plataforma. [00:09:50] Y yo estaba tan enojado con el tiempo. Mi plataforma era-- fue interesante. Así que me he calmado desde entonces. Pero algún día, voy a correr de nuevo y esperemos mejor esta vez. [00:10:03] Así HTML, que el lenguaje en el que hice que en-- pronto tiene mucho más-- es algo que hemos estado hablando de los últimos tiempos y en gran medida dando por sentado ahora que nos hemos movido a otras lenguas. Pero vamos a hacer una pausa por un momento y poner un poco de estas cosas en su contexto. Así que en una frase, ¿qué es HTML? [00:10:18] O, lo que se utiliza? Cualquier persona? Sí. [00:10:20] AUDIENCIA: marcado para los sitios web. DAVID J. MALAN: marcado para el sitio web. Así que es un lenguaje de marcado que le permite estructurar una página web. Encabezado sube aquí, título va aquí, el cuerpo va aquí. Esto está en negrita, esto es italics-- ese tipo de detalle. [00:10:33] Bueno, bueno. Así CSS permite usted-- y yo tomó algunas libertades allí con la negrita y cursiva orientada al debido Eso es mejor implementados con este. CSS es-- qué? Diga en una frase. Cualquier persona en absoluto. Sí. [00:10:46] Audiencia: Adornos y cosas, como la forma de diseñarlo. DAVID J. MALAN: OK, bueno. Los adornos que le permiten diseñarlo o estilizar que con cosas como negrita y cursiva y colores y también más fino posicionamiento de grano de elementos. De alguna manera le permite tomar las cosas última milla de modo que si, por ejemplo, en Pset7, te habrás dado cuenta de su La página de la cartera si estás en este momento ya que una tabla por defecto que usted hacer para mostrar las tenencias de valores del usuario y dinero en efectivo, probablemente, se ve bastante horrible de forma predeterminada, sin espacios en blanco. Todo tipo de atestado de juntos en filas y columnas. [00:11:18] Bueno, con un poco de CSS, como usted puede darse cuenta, en realidad se puede modificar eso y hacer que sea algo mucho más familiar y mucho más más bonito de ver. Así que se trata de la CSS estilización de sitios web. Pero entonces, hemos introducido una nueva lenguaje, PHP, lo que nos permite hacer lo que? [00:11:36] Vamos a hacer qué? Cualquier persona. Tengo que aventurarse más allá el primer par de filas. Sí. [00:11:40] AUDIENCIA: Generar contenido dinámico. DAVID J. MALAN: Perfecto. Generar contenido dinámico. Y usted puede hacer esto en cualquier número de idiomas. Nos pasó a usar PHP porque es en parte, tan similar a la sintaxis de C. [00:11:50] Pero PHP hace exactamente eso. Se le permite generar dinámicamente la salida. Y algunos de los que la producción podría ser HTML, como lo hemos estado haciendo normalmente. Y también, porque es un lenguaje de programación, es el mecanismo a través del cual podemos hablar con las bases de datos. [00:12:03] Y podemos hacer consultas a otros servidores como yahoos y programáticamente hacer nada realmente que te pueden de otro modo quieren obligar a un equipo a hacer. Así que PHP permite a empezar dar salida de forma dinámica el contenido. Así por esta lógica, yo no tenía un sitio web dinámico en 1998. [00:12:16] Era sólo una página web estática. Mi contenido tenía que ser cambiado por manualmente con gedit o algún equivalente. Pero PHP es lo que solíamos o podría haber utilizado, más bien, para algo como la Sitio web Frosh mensajes instantáneos, que se suponía que iba a tomar registros y administrar una lista de cosas que users-- en realidad están cambiando más tiempo, a pesar de que nos ha tocado utilizar Perl, una diferente el lenguaje de la época. [00:12:35] Y luego, por último, hemos introducido SQL-- Structured Query Language. Así que todavía otro idioma que se usa para qué? Se utiliza para qué? ¿Podemos aventurar slight-- Bueno, no vamos para llegar mucho más lejos de la orquesta aquí. AUDIENCIA: Es un protocolo utilizado para hablar con las bases de datos. DAVID J. MALAN: Un protocolo utilizado para hablar con las bases de datos. Permítanme modifico. Es un lenguaje natural utilizado hablar con databases-- selecciona y las inserciones y eliminaciones y actualizaciones y realidad incluso más características que que ni siquiera hemos buceado en pero es posible que desee tener explore-- explorar para, por ejemplo, un proyecto final. Así que hay estas diversas piezas. [00:13:09] Y es de esperar Pset7, a pesar de que su especificación es bastante largo, es deliberadamente largo caminar que a través de cómo estas cosas pueden todos ser escrito juntos. Ahora, el lunes, que introducido nuestro último idioma que vamos a introducir formalmente en la supuesto-- que es, JavaScript. Esto, como PHP, es un lenguaje interpretado. [00:13:25] Sin embargo, una distinción clave Yo propuse el lunes es que mientras que PHP se está ejecutando o siendo interpretado en el servidor, lo que en este caso es el aparato CS50, o podría haber alguna web comercial servidor en Internet, JavaScript general es un lenguaje que se ejecuta el lado del cliente no servidor side-- así en el navegador. Es decir, al igual que cuando abrí Facebook hasta el código fuente y encontró todo de esos archivos .js, la implicación era que cuando usted visita Facebook o más Sitios web en estos días, se obtiene no sólo HTML, no sólo CSS, pero un montón de JavaScript código a menudo en la forma de archivos .js. Y entonces es el browser-- su propio Mac o PC-- que ejecuta ese código. [00:14:03] Pero el navegador ejecuta. Se puede pensar en una especie de caja de arena. Así que el código JavaScript no debería ser capaz de borrar archivos en su computadora. No debería ser capaz de enviar mensajes de correo electrónico en su nombre. Su tipo de navegador restringe lo que puede hacer con ella. [00:14:17] Así que en ese sentido, que es un poco menos potente, tal vez, que C. Pero JavaScript puede, como un a un lado, ser utilizado en el servidor, aunque vamos tendemos a no hablar al respecto en ese contexto. Así que ahora vamos a atar éstos juntos. Una semana más atrás, presentamos algo de HTML en la página web súper aburrido izquierda-. [00:14:34] Sólo dice hola mundo. Y entonces me propuse en la derecha podemos tipo de robar las ideas a partir de la discusión de estructuras de datos en C y pensar en cómo este jerárquica lenguaje de marcado de la izquierda podría ser elaborado o aplicado en la memoria como una estructura de árbol real con nodos y punteros y ese tipo de detalles. A la derecha, que llamamos que un documento DOM-- Objeto Model-- que es justo una forma elegante de decir árbol. [00:14:56] Ahora, ¿por qué es esto útil para pensar en ello de esta manera? Porque ahora con JavaScript, porque tenemos código que llega a jugar en este medio ambiente, el HTML real que es sido enviado al navegador ya y ya tiene ha cargado en la memoria por el navegador en un árbol en su equipo de RAM como éste, podemos utilizar JavaScript para realmente recorrer o caminar o búsqueda o cambiar ese árbol DOM sin embargo queremos. Así que, de hecho, si usted piensa sobre facebook.com, si se utiliza la función de chat, si uso Gmail y la característica Gchat, nada donde tienes mensajes que vienen una y otra vez y de nuevo, esos mensajes son probablemente, como, etiqueta LI, etiquetas lista de elementos, tal vez. [00:15:35] O tal vez son sólo divs que mantienen apareciendo cada vez que reciba un mensaje instantáneo. Y por lo que sólo significa lo que Facebook o Google está haciendo está cada vez que conseguir un mensaje desde el servidor, probablemente están utilizando JavaScript que sólo tiene que añadir otro nodo a este tree-- otro nodo a esta árbol que entonces sólo se ve visualmente como una nueva línea de texto en la pantalla. Pero están insertando en esta estructura de datos. [00:15:57] Así que en las clases como CS124 y otros, podrás en realidad escribir más código contra estructuras de datos como este. Pero por ahora en JavaScript, sólo tendremos que asumir tenemos toda esta funcionalidad de forma gratuita desde el lenguaje mismo. Así que echemos un vistazo a un ejemplo. [00:16:09] Permítanme abrir un archivo llamado form.html. Es súper simple. Sólo se ve como este. [00:16:15] No CSS, sin pensar en la estética. Es puramente funcional y al parecer estoy pidiendo un correo electrónico, una contraseña, contraseña de nuevo, y luego un cheque estar de acuerdo con algunos de los términos y condiciones. Lo que el código fuente de este parece que es probablemente algo se puede adivinar con una poco de pensamiento ahora. Tengo una etiqueta de formulario aquí. [00:16:32] Una acción aparentemente se va a ir a un archivo llamado register.php. El método que voy a utilizar es llegar. Y luego tengo un texto campo cuyo nombre es de correo electrónico. [00:16:40] Tengo un campo de contraseña cuyo nombre es la contraseña. Tengo otra campo de contraseña cuyo nombre es la confirmación de algo arbitrariamente. Es sólo otro parámetro HTTP. [00:16:49] Y entonces nosotros no hemos utilizado estos excepción desde los mensajes instantáneos Frosh Demo en class-- una casilla de verificación que está sólo tipo es igual a cheque. Y voy a llamar a ese acuerdo. Así que he tipo de forma arbitraria, sino convenientemente llamado estos campos. Así que ahora, cuando esta forma consigue presentado, vamos a ver qué pasa. Si lo hago malan@harvard.edu, Voy a hacer una contraseña de carmesí. Voy a hacer una contraseña de nada. No vamos a cooperar. [00:17:10] Y no voy a marcar la casilla. Permítanme haga clic en Registrar. Y dice, hm, que estés registrado. En realidad no. [00:17:16] Pero el URL cambió. Así que esta forma fue claramente permitido a someterse a register.php. Pero es de suponer, que debería ser la captura de algunos de estos errores. Ahora, en Pset7 y algunos de nuestros ejemplos de conferencias, tendríamos generalmente imprimir un gran mensaje de error rojo aquí diciendo, el nombre que falta, o desaparecidos contraseña. Lo hemos hecho antes y que hemos detección de errores del lado del servidor se haga. [00:17:37] Sin embargo, muchos sitios web en estos días hacer la detección de errores en el cliente donde el URL no cambia. Toda la página no se actualiza. Usted obtiene una respuesta instantánea desde el navegador. Tal vez algo sale rojo. [00:17:48] Tal vez usted consigue un pop-up. Pero no pierdas tiempo enviando a el servidor de datos que es incompleta. Así que vamos a ver cómo podemos lograr esa característica también. [00:17:56] Déjame ir a form1.html, que tiene el mismo aspecto. Pero si esta vez lo hago malan@harvard.edu y escribo carmesí y yo no coopero más pero haga clic en Registro, cuenta ahora. No es la solución más sexy. Por lo menos yo he cogido este error. Y yo he usado la alerta función en JavaScript-- que sólo estamos usando en clase. En general, usted no debe utilizar este ya que puede llegar muy rápidamente de control. Pero contraseñas no coinciden es el error. [00:18:19] Déjame ir adelante y haga clic en Aceptar. Pero lo que el punto clave aquí es que la URL no cambió. Emaciación Así que no he molestado hora del servidor pidiéndole que una pregunta que yo pudiera tener descubierto la respuesta a mí mismo. [00:18:30] Y el usuario, aunque estado hablando de esto más largo que el usuario de va a pensar en esto, va a tener una respuesta instantánea. No hay latencia con la conectividad de red. Así que echemos un vistazo a este código fuente. [00:18:40] Miradas form1.html estructuralmente similar aquí. La forma es, de hecho el mismo. Pero vamos a ver lo que hice aquí. Y hay diferentes maneras de hacer esto. Y yo he hecho el más recto seguidor, pero no forma más elegante aún. Tengo una etiqueta de script. Entonces yo llamo document.getElementById ("registro"). Y guardo ese valor en la forma, una variable. [00:19:04] Entonces, ¿qué he hecho? Usted puede pensar en document.getElementById como una función especial que JavaScript le da que las manos, literalmente, que una puntero a uno de los nodos o rectángulos en este árbol. Así que ahora que es lo que nuestra variable de formulario en JavaScript que realmente está apuntando a. [00:19:21] Así que ahora la sintaxis es diferente de C. Pero nos están haciendo algunas cosas aquí. Uno de ellos, éste es un poco extraño buscando, sin duda frente a C. Pero mira a la línea 35. Así que en el form.onsubmit izquierda. Recordemos que es onsubmit como un campo de una estructura. Si usted piensa en la variable de formulario es simplemente ser una estructura C, que podría tener algunos campos. [00:19:42] De vuelta en el día, teníamos nombres de los estudiantes, IDs, casas, ese tipo de campos. Basta pensar en onsubmit como otro campo. Pero es un campo especial porque el navegador está preprogramado para esperar .onsubmit a no ser un valor como un número o una cadena, pero para ser realmente una función o la dirección de una función en la memoria del ordenador. [00:20:02] Y, en efecto, eso es lo que esta palabra clave aquí es así. Esto dice, dame una nueva función. Pero lo que es su nombre va a ser, por lo visto? [00:20:09] Pensando en el lunes. ¿Cuál es el nombre de esta función basada en esta sintaxis? No, quiero decir, no hay claridad sin nombre associated-- duda no en lo que yo he destacado aquí. [00:20:21] Pero eso es en realidad en Aceptar. Esta es una función anónima, o una función lambda como algunos podrían llamarlo. Y eso sólo significa sigue siendo una función. Es sólo que, no se puede llamar por su nombre. Pero eso está bien. Porque de nuevo, el navegador ha sido preprogramada por empresas como Google o Microsoft o Mozilla u otras personas a sólo sé que si el campo .onsubmit dentro de un elemento de formulario tiene el valor, lo tratan como un function-- un puntero a función, si se quiere. Y llamarlo cuando se envía el formulario. [00:20:46] Entonces, ¿qué código debe ser ejecutado cuando se envía el formulario? Al parecer, todo dentro del corchete. Y esto es sólo estilística. [00:20:53] Usted podría hacer esto como tendemos a hacer en CS50. Pero en JavaScript, la mayoría de personas tienden a mantenerlo en la misma línea sólo porque es más claramente es asociada con la función de palabras clave. Así que ahora lo que estoy haciendo? [00:21:03] Si es igual a los iguales form.email.value la cadena vacía o nada, aquí está una alerta en la que voy a decir, usted debe proporcionar su dirección de correo electrónico, y luego regresar falsa. Y es que la falsa retorno que impide que la forma de ser presentado. Mientras tanto, si el valor de la contraseña es en blanco, voy a gritar en el usuario y decir, debe proporcionar una contraseña. [00:21:21] Mientras tanto, las cosas son cada vez un poco más de lujo aquí. Si no lo hace form.password.value igual form.confirmation.value, el otro campo, gritarle a el usuario que las contraseñas no coinciden ya que no lo hizo hace un momento. Y entonces éste es un poco más sexy porque Sé que sabía que conceptualmente comprobado es el nombre de una caja de cheque. [00:21:40] Así que sólo puedo utilizar una exclamación punto de decir si el cheque no es checked-- es la booleana valor, verdadero o false-- Voy a gritar al usuario por este motivo. De lo contrario, si conseguimos a través de todas estas condiciones, vamos a volver realidad. Deje que se envía el formulario. Y esto va a ocurrir a continuación. [00:21:56] Vamos a escribir en carmesí. Vamos cheque de la caja de texto, haga clic en Registro. Y ahora me voy hasta el destino. Ahora, no hay ninguna base de datos allí. No hay nada interesante en register.php. Sólo necesitaba algo que hablar con. Así que permítanme hacer una pausa, aquí. Para cualquier duda sobre lo que acabamos de hacer o lo que algunos de esta nueva sintaxis es? Aceptar, sí? [00:22:17] AUDIENCIA: Así que cualquier casilla es automáticamente un booleano. Usted no tiene que declararlo así. [00:22:21] DAVID J. MALAN: Correcto. Cualquier casilla de verificación que se envía a usted de un formulario HTML con el código JavaScript serán tratados, sí, como una Boole value-- verdadero o falso. Es una buena pregunta. Considerando que los otros valores, de Por supuesto, han sido el texto, cadenas AKA. [00:22:36] Muy bien, así que me dejó rebobinar un poco más lejos. ¿Cuál era el punto entero de esto? Para que quede claro. Al igual, que ya sabemos, incluso desde Pset7 e incluso de la conferencia de la semana pasada ejemplos, que, obviamente, podemos comprobar $ _GET $ _POST Ver si el usuario nos dan un valor vacío. Recuerde que la función de vacío en PHP. [00:22:54] Así que para ser claros, lo que es una razón por la que también podría querer hacer este chequeo de errores dentro del navegador? ¿Cuál es la motivación aquí? Sí. [00:23:06] AUDIENCIA: más rápido, y no lo hace enviar datos inútiles para el servidor. DAVID J. MALAN: Good. Es más rápido. Usted no envía inútil datos al servidor. [00:23:12] Para que pueda obtener de nuevo una más respuesta inmediata. Y, en general, el usuario experiencia es mejor. Piense en la alternativa. [00:23:17] Si por Gmail-- y estaba el caso hace muchos años. Supongamos que usted tiene un nuevo correo electrónico de Gmail cuenta, pero la única manera a través a ver que es, al igual que, recargar toda la página. O supongamos que haga clic en un enlace para leer un correo electrónico. [00:23:29] Todo tiene que recargar tan que se puede ver la dirección de correo electrónico. O Facebook-- se obtiene un mensaje de chat. Usted no lo ve hasta que se vuelva a cargar la página o haga clic en algún enlace. [00:23:36] Al igual, esto sería una muy experiencia del usuario molesto. Y esto es lo que era, claramente, la espalda cuando me postulé para la UC y la banda era mucho menos dinámico y JavaScript no era tan popularizado como lo es ahora. Y las cosas están mucho más dinámico y mucho más lado del cliente en ese sentido. [00:23:49] Pero hay una trampa aquí, y esta es una especie de Gotcha molesto. El hecho de que se agrega en el cliente detección como esto no significa puede o debe abandonar detección del lado del servidor. Usted esencialmente quiere poner su error comprobando en ambos lugares. Porque lo que fue uno de la lección aprendida del artículo que leí algunos extractos de con este estúpido system-- CMS Content Management System-- que era la implementación de su sistema de autenticación, su entrada a través de qué mecanismo? JavaScript. [00:24:20] AUDIENCIA: JavaScript. DAVID J. MALAN: JavaScript, exactamente, ¿verdad? Se estaba usando JavaScript. Y, literalmente, ustedes tienen jugado un poco, probablemente, con el inspector de Chrome. Y si me lo encuentro, inspeccionar elemento. [00:24:30] Déjame ir a hacer todas las opciones de Chrome. Y esto es lo fácil que es desactivar JavaScript en un navegador. Compruebe, no más de JavaScript. [00:24:38] Así que para ser justos, muchos de la web en estos días sólo va a romper, porque Gmail y otra sites-- Facebook-- asumir que JavaScript está habilitado. Pero si usted está haciendo algo estúpido como sólo la validación de entrada de los usuarios y comprueba si existe errores en el lado del cliente, un adversario podría fácilmente hacer esto. Y luego aún más inteligente adversario como ustedes ahora podría utilizar Telnet o Curl o comandos de línea de comandos sólo y en realidad enviar mensajes al servidor que de igual forma no exentos de errores facturado. [00:25:05] Así que esto es más de un decisión interfaz de usuario de lo que es una técnica real improvement-- implementación lado cliente algo como esto. Así que ahora una rápida mirada, pero luego Te remito a la caminata en línea a través de éste. En forma de dos, de hecho fuimos a través de y limpiar el código un poco. Pero permítanme remito a uno de los videos probable que vamos a Insertar en Pset8 que sólo muestra una sintaxis similar usando una biblioteca llamada jQuery, que es un super, super biblioteca popular en JavaScript que francamente la mayoría de la gente sólo tiene que utilizar en estos días e incluso confundir como propio bienestar JavaScript. [00:25:37] Y tiende a involucrar algunos signos de dólar y palabras clave como documento en paréntesis aquí. Pero, de nuevo, déjame remito a algunos tutoriales más lentas en línea en lugar de verse obligados a realizar sólo la sintaxis. Vamos a pasar a algo un poco más fresco en cuanto a las aplicaciones de este. [00:25:50] Así, en particular, que me deje ir por delante y abrir esta aquí. Venga. Hay que ir. [00:25:59] Permítanme abrir este cuadro aquí. Innecesariamente complicado mirando, pero describe una técnica llamada AJAX-- Asynchronous JavaScript y XML, donde X para el XML es en realidad ya no se utiliza realmente. Tiende a usar algo otro llamado JSON. [00:26:13] Pero aquí es cómo algo así como Google Maps o Google Earth funciona. Vamos a probar esto sobre la marcha, en realidad. Déjame ir por delante y abro Chrome en mi navegador. [00:26:21] Y déjame ir en, decir, maps.google.com. Y, de hecho, si usted es viejo Basta recordar lo que, como, MapQuest era como volver en el día, y tal vez todavía funcionan así. Cuando te acostumbras a buscar algo-- 33 Oxford Street, Cambridge, Massachusetts, vamos a hacer esto-- usted haría realidad, si usted quería a la sartén y abajo, izquierda y derecha, que se vería como un gran flecha en la parte superior, y se le mostrará otro marco del mapa aquí. ¿O tendría que hacer clic a la izquierda y usted iría por aquí, o otro clic y va a ir por aquí. Pero en vez éstos días, por supuesto, sólo dan por sentado que podemos ir alrededor de Cambridge con bastante rapidez simplemente haciendo clic y arrastrando. Pero Tenga en cuenta que hay algunos problemas técnicos. [00:26:59] Si hago esto lo suficientemente rápido, lo que parece estar sucediendo como arrastro un poco demasiado rápido para el equipo para mantenerse al día? ¿Qué es lo que ves? Sí. [00:27:07] AUDIENCIA: Los píxeles no se actualizan. DAVID J. MALAN: La píxeles no se actualizan. Hay actually-- y usted podría ver esto, en realidad, si estás viendo en línea y pausa este o en realidad ralentiza las cosas para vez-- verás que hay azulejos, cuadrados, o rectángulos que faltan en el mapa hasta una fracción de segundo más tarde, más datos, más imágenes de realidad aparecerá en la pantalla. Y de hecho, si hacemos esto mirando hasta Chrome's-- digamos, Chrome-- vamos a ver. No podemos hacer eso. [00:27:31] Oh, gritos. Vamos a abrir maps.google.com. Permítanme hacer la ventana más grande de nuevo. [00:27:36] Volver a los 33 Oxford Street. ¿Cuál fue el sitio web estaba en recientemente? Tuve esta, como, diatriba privado a a mí mismo que yo había mensaje instantáneo a continuación cualquier amigo que estaba en línea quien quería oírlo. Hay un poco de sitio web. Creo que es tan Comcast-- un ISP americano muy grande. Puede, al registrarse en nuevo cable servicio de módem o el servicio de TV por cable, que tienen una forma muy razonable donde se le preguntará su dirección. Y tener esta increíble característica llamada completa de automóviles, como Google, que comienza a llenar en la respuesta a su pregunta. [00:28:04] El problema es, que hacen de autocompletado sobre las primeras cosas que usted escribe. Así que si usted comienza a escribir en el 33, que le mostrará literalmente cada casa en Estados Unidos que comienza con el número 33 antes de continuar esperas que escriba más. Así que si escribe 33 Oxford, a continuación te muestra todas las calles en Estados Unidos que tiene 33 en Oxford su nombre, con independencia de la ciudad que usted está en. [00:28:25] Y luego continúa escribiendo. Y, por último, se da cuenta de que no lo hacen oferta de servicio a su casa en Cambridge o algo por el estilo. Pero el punto es, esta es la más aplicación asnal de auto completar nunca. [00:28:34] Y yo sólo voy fuera en esta tangente de nuevo. Pero hay buenas maneras a utilizar JavaScript y malas maneras. Y eso no es necesariamente la mejor. [00:28:40] Pero el punto aquí, antes de que esta diatriba, fue a abrir las herramientas aquí y abrir las herramientas de desarrollo, como hemos alentados antes, y para ver la Red ficha como hago clic muy rápido. Y notar un montón de obtener solicitudes sucedieron. Todo esto sucedió desde que me arrastré. [00:28:57] Y lo más probable, de hecho, una gran cantidad de estas filas ahora son la imagen de roza JPEG Tipos MIME o tipos de contenido. Esto se debe a lo que está haciendo cromo cada vez que haga clic y arrastre, haga clic en y arrastre, es Es darse cuenta, oh, que ir pedir a Google para el azulejo en el mapa que ha terminado aquí, descargar rápidamente a través de HTTP, y luego añadirlo a la llamada DOM a los navegadores web en el árbol de memoria la representación de manera que el usuario, mí, ve que azulejo actualizado. Y esto se debe a una técnica llamada AJAX. De vuelta en el día, lo que realmente era el caso de que si quería cambiar lo que está en la pantalla, usted tendría que hacer clic arriba, abajo, izquierda, derecha. Y a continuación, una nueva página se abriría. Pero en estos días, todo es más dinámico. Sucede en la forma en que los seres humanos lo haría espero que realmente lo haría de forma interactiva. Y lo consigue mediante la medio de una técnica llamada AJAX, que es quizás el más explicado con un ejemplo. En primer lugar, déjame ir por delante y abrir un archivo llamado quote.php en código de distribución de hoy. [00:29:53] Y entonces déjame hacer gritos symbol--. Déjame hacer símbolo = GOOG por sólo un poco de caldo. O en realidad, vamos a hacer la una del juego de parámetros GRATIS. Intro. [00:30:05] Y ahora noto lo que yo vuelva. Así que esto es realmente un archivo PHP corto que yo escribió que simplemente toma prestado código de la función de búsqueda de Pset7 y escupe el uso de esta llave de y citas y notación de colon, al parecer, precio de la acción actual de la empresa que se pasa en medio de get. Así que esto es diferente de la mayor parte de lo que hemos hecho en esa nota de que soy literalmente escupiendo lo que parece ser el código JavaScript. [00:30:27] De hecho, este es un objeto de JavaScript. De hecho, sólo para ser más claro, JavaScript Object Notation-- JSON-- es sólo una forma elegante de decir que pueden representar datos en JavaScript mucho como se hace en PHP utilizando pares de valores clave. Así que si quería declarar una variable en JavaScript a representa Zamyla, por instance-- una estructura para Zamyla-- y lo vamos a llamar estudiante, esta variable. Su identificación es uno, la casa está Winthrop, y el nombre es Zamyla. [00:30:53] Pero también puedo tener una matriz de objetos. Así que si yo realmente quería tener un array en JavaScript que contiene múltiples tales objetos, esta tiempo que representa al personal, Yo podría tener estos tres trozos de código de espalda de nuevo a la espalda de éstos tres ex funcionarios. Así que la sintaxis, bastante similar a ambos-- a PHP. Pero esto es particularmente JavaScript. Es notación objeto. Entonces, ¿qué es esto útil para? [00:31:17] Si escribo código que escupe hacia fuera JSON-- JavaScript Object Notation-- cosas que se parece a esto o cosas que se parece a la estructura de Zamyla, De hecho, me puedo usar esta en los programas que escribo. Déjame ir a ajax0.html. Y esto también-- no mucho pensamiento dado a la estética. Pero observen lo que sucede. [00:31:34] Déjame ir adelante y escribo gratis aquí. Haga clic en Obtener cotización. Y note la URL no ha cambiado. Pero me hizo llegar un pop-up con aparentemente de hoy centavo precio de la acción de US $ 0,15. Así que no todo es tan malo. Pero la diferencia es que de alguna manera, estos datos volvió a mí directamente. Pero vamos a dar un paso hacia algo más familiar. En la versión uno de esto, permítanme escriba libre de nuevo, haga clic en Obtener presupuesto, y ahora-- oh, esto era en realidad la versión de jQuery. Así que no lo hice me-- avance rápido bastante lo suficientemente lejos. Déjame ir a la versión dos, que es donde yo quería. Note lo que he hecho aquí. Tengo una web page-- un super versión simple de cualquier página web usted puede utilizar hoy en día con un campo de texto aquí de forma gratuita y luego al parecer sólo texto. [00:32:14] Esto no es una forma aquí, aparentemente. Pero si hago clic obtengo presupuesto, cuenta de mi página web está a punto de cambiar, como si yo acaba de recibir un nuevo mensaje instantáneo o como si me acabo de mudar la el mapa y la necesaria para obtener más datos añadido de forma dinámica a la página web sin el cambio de URL y el usuario experiencia siendo interrumpido. De hecho, todavía estoy en el exactamente el mismo ajax2.html lugar--. [00:32:35] Así que vamos a ver sólo en este ejemplo y ver cómo esto está sucediendo. Déjame ir a ajax2.html. Y note la forma en primer lugar. [00:32:44] Aquí abajo, me estoy convirtiendo fuera de autocompletado. A veces se pone molesto si el navegador está tratando de mostrar toda su historia. Así que usted puede hacerlo en HTML sólo decir autocompletado apagado. [00:32:53] He dado este campo de texto un symbol-- más bien, un ID de símbolo. Y ahora, esta es una característica interesante. No hemos hablado acerca de lapso, pero se puede pensar en ello como una etiqueta de párrafo o etiqueta div. Es lo que se llama un elemento en línea, que significa que no obtendrá un párrafo romper por encima y por debajo de ella. Es sólo va a permanecer en línea sin golpear el equivalente a entrar. Así que me he dado a este trozo de HTML debe determinarse un identificador único que arbitrariamente llamé precio. Y tengo un botón Enviar. [00:33:21] Porque ahora hasta aquí-- y esto es realmente súper increíble lo poco código usted puede escribir que hacer relativamente limpio cosas-- darse cuenta de lo que he hecho hasta aquí si desplácese hasta la cabeza de esta página. He incluido por primera vez en mi cabeza una etiqueta de script que hace referencia a una realidad Archivo JavaScript en otras partes. Esto es de la organización que escribe jQuery, Y esto es sólo que le da la última versión de su librería jQuery. [00:33:42] Así que esto es algo así como agudo incluir en C o requerir en PHP. Se utiliza la etiqueta script con un atributo de origen. Pero ahora mi propio código es va a estar bien aquí. [00:33:52] Note que tengo una función llamada Cotizaciones. Y parece un poco críptica a primera vista. Pero vamos a burlan de esta separación. Dame una variable llamada URL. Asignar literalmente esta cadena. Así, citas individuales, dobles comillas en JavaScript sólo me da una cadena. ¿Qué hace el plus? La concatenación. [00:34:08] Así que esto ahora es la sintaxis de jQuery que toma un poco de tiempo para acostumbrarse. Pero esto sólo significa ir a buscarme el DOM nodo cuyo identificador único es símbolo. El hashtag no significa símbolo identificador único. [00:34:21] El signo de dólar en el Los paréntesis sólo significa, terminar con esto jQuery en una especie de salsa secreta de modo usted consigue una funcionalidad adicional. Y luego .val es aparentemente una función, o como se dice ahora, un método en el interior de este nodo que sólo le da el valor. Así que en resumen, feo y confuso ya que esto se ve a primera vista, esto sólo significa llegar con el usuario escribió en, lo puso al final de la cadena mediante la concatenación de ella. Eso es todo. [00:34:43] Así que ahora, tres últimas líneas. Usted puede exprimir una gran cantidad de funcionalidad de cada tres líneas. Este signo de dólar, como una a un lado, es sólo un apodo para una variable global especial llamado literalmente jQuery. [00:34:55] Signo de dólar sólo se ve bien. Así que la comunidad jQuery sólo tipo de lo usó como su símbolo especial. No significa lo que significa en PHP. En JavaScript, muestra de dólar es al igual que una letra del alfabeto o un número para una variable. [00:35:07] Usted sólo puede tener como el nombre. Sólo se ve bien. Así la comunidad adoptado como un apodo por su propia biblioteca llamada jQuery. [00:35:13] Y es súper popular. Así que conseguir JSON es exactamente eso. Es una función que la gente de jQuery escribieron que sufre es JSON de un server-- JavaScript Object Notation. Por lo que el URL es que va para obtener esa información? Al parecer, desde este URL aquí. [00:35:27] ¿Y qué debe hacer el navegador como pronto como se pone de nuevo esta respuesta? Y esta es la magia de AJAX, por lo que speak-- Asynchronous JavaScript en XML. Es difícil ver con tal ejemplo sencillo, ya que teníamos aquí. [00:35:41] Pero esto fue asincrónica en el sentido de que mi código cuando ejecutado enviado un mensaje al servidor para ir a buscarme un poco de JSON. Y sucedió muy rápido que me dieron una respuesta. Pero lo que es interesante es que este línea de código no cuelgue mi equipo. [00:35:55] Yo no veo un icono de la hilatura. No perdí el capacidad de mover el ratón. Mi navegador realidad era perfectamente bien. [00:36:01] Debido a la manera maneja el JavaScript respuesta del servidor es como sigue. Usted se registra lo que se dice una función de devolución de llamada, que sólo significa, bueno, JavaScript. Tan pronto como el servidor responde con JSON, por favor llamar a esta función anónima. [00:36:18] Y por favor, pasó a esta función cualquiera que sea la cadena de servidor escupir como un argumento llamado datos. En otras, palabras, si Estoy ensamblar dinámicamente quote.php un URL que pasa en este símbolo como GRATIS o GOOG o lo que sea, Entonces yo digo JavaScript ir a buscar esa URL. Recuerde que el navegador va a devolver algo que se ve como vimos antes les hablé de esto. [00:36:42] Y lo que el segundo argumento aquí para conseguir JSON está diciendo se llame a esta función cuando el servidor vuelva si se trata de 10 milisegundos a partir de ahora ó 10 segundos a partir de ahora. Y tan pronto como usted lo hace, agregar el precio a la página. Esta sintaxis aquí sólo significa ir a buscar el nodo del árbol cuyo único identificador es precio-- ese lapso hemos visto anteriormente. [00:37:01] Este método llamado HTML sólo dice, vaya reemplazar el código HTML que está ahí con data.price. ¿Qué hay data.price? Bueno, el navegador, recordar, me mostró esta regresando. Así que estos son los datos. [00:37:14] Y lo que es un poco críptico para ver las comas aquí. Pero, de hecho, déjame hacer esto. Permítanme pega este muy rápido en gedit y mostrar esto como demostramos La estructura de Zamyla antes. [00:37:27] Lo que el servidor envía de vuelta es una pequeño objeto que se parece a esto. Y así es data.price me acaba de dar a 0,1515. Así que una gran cantidad de movimiento partes aquí todos a la vez. [00:37:39] Pero los robos de balón clave es que tenemos esta capacidad para hacer HTTP adicional peticiones utilizando JavaScript sin tener que recargar la página. Y entonces podemos realmente cambiar la página web sobre la marcha. Y resulta que JavaScript y otros lenguajes se puede utilizar ahora no sólo mutar páginas web, pero en realidad para escribir software en un equipo real, no sólo se limita a Chrome o similares. [00:38:00] De hecho, si: Colton, ¿verdad gustaría unirse a nosotros de nuevo por aquí con su código de laboratorio, y Chang también? Vamos a seguir adelante, después de haber hablado de funciones anónimas y devoluciones de llamada y realmente tentar a la suerte aquí con una demostración en vivo con sangrado tecnología de punta, una de estos dispositivos Elite movimiento. Ahora, este dispositivo, el recuerdo, es un pequeño dispositivo USB así que-- eso es beautiful-- que se conecta a los puertos USB. [00:38:25] Y entonces se proporciona la entrada en forma de gestos humanos mediante la detección de rayos infrarrojos utilizando, esencialmente, los movimientos de su brazo. Así que mientras que lo que María intentó antes era muscular, realmente sentir lo que está cambiando el brazo, esto es infrarrojo basado. Por lo tanto, está buscando a los movimientos dentro de la especie de esfera de un pie más o menos del propio dispositivo. [00:38:46] Entonces, ¿por qué no me tomo una puñalada en esta primera? Y vamos a seguir adelante y tirar para arriba en la sobrecarga aquí. Así que vamos a poner el portátil de Colton hasta aquí. Tenemos Andrew en el televisor. Y ¿qué le gustaría que hiciera primero? [00:39:00] COLTON: Vaya por delante y justo poner sus manos sobre este hombre y usted verá un cierto brillo fabuloso. [00:39:04] DAVID J. MALAN: Very nice. Todo esto sucede en tiempo real. Okay. Muy bien, y sí. Tan agradable. Muy bien, ¿qué otra cosa podemos hacer? [00:39:15] COLTON: Ir a la siguiente pantalla y ver. [00:39:17] DAVID J. MALAN: De acuerdo. [00:39:19] COLTON: Un pequeño juego donde se llega a hacer robots. [00:39:21] DAVID J. MALAN: Muy bien, por lo que este es falso manos me muestran lo que debe hacer. COLTON: Sí Así que adelante y apoderarse de uno de los bloques y lo puso en la parte superior del cuerpo de ese robot. DAVID J. MALAN: Oh, ahí está mi mano. Oh. Aceptar, adorable. Espera un minuto, en Aceptar. Hay que ir. [00:39:41] COLTON: Hice uno en accidente. [00:39:43] DAVID J. MALAN: OK, voy a conseguir este tipo. Maldita sea! Cuando estábamos practicando esta última noche, ya sabes lo que esto degeneró en? [00:39:51] Como este. Okay. Siguiente uno? [00:39:55] COLTON: Claro. [00:39:56] DAVID J. MALAN: Muy bien, y hay una tercera. Bien. COLTON: Y en éste, se obtiene a-- DAVID J. MALAN: ¡Oh, de hermosa éste. COLTON: --yeah, desmenuzar esta flor. DAVID J. MALAN: OK. ¿No? Perdidas. [00:40:14] COLTON: Oh, ahí lo tienes. [00:40:15] DAVID J. MALAN: Ah, mira eso. Muy agradable. Bueno, ¿por qué no 'tomamos a cabo un voluntario aquí que le gustaría venir en adelante. ¿Qué hay allí mismo en el verde, ¿no? [00:40:27] Muy bien, y vamos a tener-- en lugar de hacer eso, algunos de ustedes podrían saber este juego aquí-- cortar la cuerda, tal vez? Vamos a ver. Tenemos nuestras copas por aquí? [00:40:37] Okay. Gracias. Cuál es tu nombre? [00:40:39] AUDIENCIA: Laura. [00:40:40] DAVID J. MALAN: Laura? Es bueno ver. Si no te importa poner Google Glass sobre sus lentes. Esto es Colton. [00:40:46] COLTON: Hola. Encantada de conocerte. [00:40:48] DAVID J. MALAN: OK, vamos alrededor. Muy bien, así que lo que vas a hacer aquí, después de haber jugado esto antes, se pone la mano sobre el Leap Motion aquí. Y ahora su flecha debe moverse. Ah, pues no. [00:40:57] AUDIENCIA: No. [00:40:58] DAVID J. MALAN: Nosotros no quieren dejar de fumar todavía. Aceptar, espere. Por aquí. Así cuenta como usted sostiene su dedo sobre algo, el ratón comienza a ir verde, que es como se hace clic. [00:41:06] Así que se ciernen sobre Play. Y sólo un dedo está muy bien. Y ahora, haga clic en la pequeña hombre verde de la izquierda. Y ahora tienen hasta que se llena de verde. Bueno. Ahora, al igual que, el nivel uno en la superior. [00:41:16] AUDIENCIA: Sí, queremos que el nivel uno, aquí. [00:41:20] DAVID J. MALAN: Good. OK, así que todo lo que tienes que hacer es cortar la cuerda. El cursor es la blanca ahí abajo. [00:41:28] Muy agradable. Muy bien, se trata de conseguir más difícil. Así que mantener el dedo sobre el próximo ahora. Bueno. Éste es difícil. [00:41:39] AUDIENCIA: Oh mierda. Okay. Se quiere ir de esa manera. Oh mierda, que-- [00:41:44] DAVID J. MALAN: Sí. Meta secundaria es conseguir todas las estrellas. De acuerdo, siguiente. [00:41:53] Vamos a ver si usted puede conseguir este tercero. Bueno. Aceptar, ir allí. [00:42:06] Claro. Oh, muy agradable. Bien. [00:42:11] Entonces, ¿por qué no levantar la sesión aquí hoy? Que nadie venga a quién quiere jugar. Muchas gracias a Laura nuestra voluntaria. Y nos veremos el lunes. [00:42:18] AUDIENCIA: Usted probablemente querrá éstos espalda. [00:42:21] ALTAVOZ 2: En el siguiente CS50--