HANNAH BLUMBERG: Hola a todos. Vamos a empezar sólo un par de minutos antes ya que tenemos mucho de material para pasar. Soy Hannah. Soy un TF. María se va a unir nosotros en sólo un par de minutos. Es profesora de la sección de la derecha antes. Enseño sección derecha después, por lo que vamos para mantenerlo a la hora y media. Así como se verá aquí, tenemos bastante algunos temas que tienen que pasar, así que vamos a ir un poco más rápido. Pero si en algún momento decimos algo demasiado rápido o no entiende, no dude en interrumpir con preguntas. Queremos ser capaces de hacer de esto una revisar sesión tan útil para todos ustedes como sea posible. Impresionante. Así que vamos a saltar a la derecha adentro con algunos temas que en realidad muy, muy brevemente cubierta para el cuestionario de 0 en la revisión sesión de prueba 0. Así que a partir de listas enlazadas. Así que asegúrese de que tiene alguna conocimientos básicos sobre listas enlazadas y se sienten cómodos haciendo algunas de las operaciones básicas. Así que para opinar, vinculado listas son mejores que las matrices porque pueden crecer de forma dinámica. Así que tenemos que gran ventaja. Hemos visto los usaban en tablas hash cuando no sé exactamente cuántos cosas que van a querer para insertar en nuestra estructura de datos. Por desgracia, tenemos piezas de la lista enlazada todo de memoria, así que no vamos a ser necesariamente capaz de hacer el acceso constante de tiempo a cualquier elemento de la lista enlazada. Con el fin de encontrar una particular, elemento, nos tener que repetir todo el así desde el principio. Así que tener en cuenta que la mayor parte del operaciones básicas son omega de 1. Así inserto es sólo va a tomar 1. Eliminar va a tomar n ya que tienen que ir a buscar en la lista. Y la búsqueda podría tomar, en el peor, n. No podemos hacer algo como búsqueda binaria en una lista enlazada Ya que no podemos simplemente saltar al azar para el medio. Guay. Impresionante. Un poco de pilas. Esto, de nuevo, apareció en concurso 0, por lo que debe ser súper cómodo con él. Pero para las pilas, le pedimos que recordar una pila de bandejas. Y va a ser primero en entrar, último en salir. Así apilamos las cosas en la pila, y luego si estamos tratando de tomar algo off-- que llamamos haciendo estallar fuera el stack-- venimos de la parte superior. Y si queremos poner algo en la pila, lo llamamos empujando. Por lo que siempre va a estar creciendo desde el fondo como una pila de bandejas. Impresionante. Hemos implementado pilas vistos con las dos listas enlazadas y matrices. Si está implementando con matrices, desea para asegurarse de no perder de vista tanto el tamaño y la capacidad. Así tamaño va a ser la corriente número de cosas en su pila, mientras que la capacidad es el número total de cosas que puede almacenar en su pila. Guay. Muy similar, tenemos colas. En este caso, en lugar de pensar una pila de bandejas, piensa en una línea. Esto va a ser primero en entrar, primero en salir. Así que si usted está haciendo cola para algo en la tienda, esperamos que la persona por primera vez en línea va a ser ayudado a primera. En lugar de decir empuje y pop como lo hacemos para la pila, nos limitamos a decir enqueue y quitar de la cola. Y de nuevo, si usted es implementar esto con una matriz, tenemos que seguir la pista de no sólo el tamaño y la capacidad, sino también la cabeza, que va a ser el frente de nuestra cola. Guay. ¿Tiene preguntas sobre nada de eso? Impresionante. La derecha móvil adelante. OK, tablas hash. Aquí es donde empieza a conseguir realmente interesante. Así que una tabla hash es una implementación de una matriz asociativa. Así que básicamente lo que pasó es que tenemos todo esto de entrada, y le damos a un hash función que dice, OK, aquí es donde en el tabla hash pertenece. Así que la función hash más simple que hemos visto está diciendo, OK, supongamos que queremos poner cadenas en nuestra tabla hash. Y una idea muy simple podía decir, OK, vamos a ordenar por el primera letra de la palabra. Así que usted puede ver aquí, tomamos el plátano, lo sometemos a una función hash, y dice, bueno, eso debe ir en el índice 1. Así podemos pensar esencialmente en un hash mesa como un montón de diferentes cubos. Y cada uno de esos cubos va para sostener la cabeza de una lista enlazada. Y en esa lista enlazada es donde podemos realmente poner diferentes piezas de datos. Así buceo un poco más en una función hash, aquí está el ejemplo que acabo de descrito en el que acaba de decir, OK, toma la primera letra de la palabra y estamos va a solucionar el problema en los cubos. Así que, presumiblemente, habrá 26 cubos, uno por cada letra del alfabeto. ¿Por qué no es esto una gran función hash? Lo que hace que este no ideal? Sí. AUDIENCIA: ¿Vas tener colisiones. HANNAH BLUMBERG: Sí, exactamente. Vas a tener colisiones. Así que eso es una cosa. Y hablaremos de cómo podemos arreglar las colisiones en tan sólo unos segundos. Otro problema con este en particular función hash es que nuestro diferente cubos van a ser de bastante drásticamente diferentes tamaños. Sabemos que hay mucho mas palabras que comienzan con A de X, así que vamos a tener muy cubos desequilibradas en nuestra tabla hash. Guay. Así que sí, vamos a volver a el punto de colisiones. ¿Qué hacemos si hay una colisión? Tenemos un par de opciones diferentes. Así que uno, por lo que suponemos que estamos tratando poner baya en nuestra tabla hash. Y vemos, oh, queremos para decirlo en el índice 1, pero plátano ya vive allí. ¿Qué vamos a hacer? Tenemos dos opciones principales. El número uno es lo que podemos decir, OK, no hay lugar en el índice 1, pero vamos a seguir buscando a través hasta que podamos encontrar otro lugar abierto. Así que vamos a decir, OK, vamos a ponerlo en el punto 3. Esa es una opción. Eso se llama sondeo lineal. Y una segunda opción está diciendo, bien, bien, vamos a hacer cada uno de estos cubos ser cabezas de listas enlazadas. Y está bien si hay más de una cosa en un cubo. Sólo vamos a anexarlo en la parte frontal. Así que aquí se puede ver, está bien, cuando insertamos baya, que acaba de tomar plátano, tipo de empujado sobre un poco y lanzó una baya allí. Y eso es también totalmente bien. Esto se conoce como encadenamiento separado. Usted puede pensar en esto como una especie de una serie de cabezas de listas enlazadas. ¿Tiene preguntas sobre picadillo tablas, funciones de hash? Impresionante. Los árboles y los intentos. Así que un árbol es cualquier tipo de la estructura de datos en la que hay una especie de la jerarquía o algún tipo de clasificar a sus diferentes objetos. Y esto se convertirá en súper claro cuando vemos un ejemplo. Y vimos intentos, a lo largo con tablas hash, en pset5-- que, de nuevo, juego totalmente justa para este quiz-- de datos como otro estructuras que podemos almacenar diferentes cosas. En el caso de diccionario, nos guardaron un montón de palabras. Así que echemos un vistazo a algunos árboles. Así que este es un ejemplo de un árbol. Tiene un tipo de estructura, que la estructura jerárquica, donde se puede ver que este nodo 1 en la parte superior tiene algún tipo de rango por encima de 2 y 3, que están por encima de 4, 5, y 6 y 7, que están por encima de 8 y 9. Así que eso es todo lo que queremos decir con un árbol, por lo que puede sólo tipo de imaginar esto en su cabeza. Ahora, tenemos un par de árboles más especializados. Así que un ejemplo es un árbol binario. Y un árbol binario es, de nuevo, sólo va a ser una estructura de datos con algún tipo de jerarquía, pero cada uno de los nodos puede tener como máximo dos hijos. Ahí es donde la palabra binaria viene. Así que este es un ejemplo de un árbol binario. Así que esa es una categoría más pequeña de árboles. Ahora vamos a llegar aún más específico y hablar binaria trees-- búsqueda binaria árboles, más bien. Así que aquí la idea es no sólo hace cada nodo tiene como máximo dos hijos, pero todos los niños a la izquierda van a ser más pequeños y todos los niños a la derecha van a ser más grande. Así notar en sólo nuestra árbol binario, hay ninguna relación entre los números. Pero en nuestra búsqueda binaria árbol, vemos, OK, aquí está 44. Y cada número a la izquierda de 44 es más pequeña y todo a la derecha es más grande. Y eso vale en cada nivel del árbol. Así que aquí, esta es menor que 22 y esto es mayor que 22. Y eso es árbol binario de búsqueda. ¿Por qué pensamos que se llama un árbol de búsqueda binaria? Qué algoritmo Qué te recuerda? AUDIENCIA: La búsqueda binaria. HANNAH BLUMBERG: La búsqueda binaria. Porque si usted está buscando un número particular en este árbol, en cada punto, sólo puede tocar medio fuera del árbol, lo cual es genial. Y para que nos va a dar algo que se parece mucho a la búsqueda binaria. ¿Alguna pregunta? Muy bien, fresco. Muy bien, lo intenta. Favorito de todos. Así que este es el ejemplo que hemos visto un montón de clase. Y de nuevo, esto es sólo otra manera que podemos almacenar datos. En el caso de diccionario, de nuevo, este es sólo va a ser cadenas. Así que vamos a ver lo que en realidad esto se parece a un nivel ligeramente inferior. Así que vamos a echar un vistazo en un nodo en un trie. Y vemos, está bien, no va ser un valor booleano y un nodo, un puntero a un nodo. Y vemos que la Boole se llama is_word. Así que, esencialmente, eso es va a corresponder a estos pequeños triángulos que dice, si usted ha llegado aquí, que ha encontrado una palabra completa. Sabemos que "Turing" sobre aquí hay una palabra completa, mientras que solo T-U-R no es una palabra porque no vemos ese pequeño delta. Y ese pequeño delta, de nuevo, corresponde a esta is_word, este is_word booleana. Y luego tenemos una gran variedad de los niños. Así que en cada nivel, tener un nodo en particular, y que los puntos de nodo a un conjunto de todo el alfabeto. Así se puede ver, de nuevo, en este picture-- estoy va a seguir saltando hacia atrás y forth-- que esa matriz en la parte superior tiene un montón de diferentes nodos que salen de ella. Tiene 26 años, o 27 si quieres para incluir un carácter adicional. Y esto nos da una manera de almacenar nuestros datos de manera que se pueden miraba que usted puede mirar hacia arriba súper rápido. ¿Cuál es el tiempo de búsqueda de un trie? AUDIENCIA: [inaudible]. HANNAH BLUMBERG: Sí. En teoría, es tiempo constante. Sólo va a ser del tamaño de la palabra que desea buscar. Incluso si añadimos un trillón Más palabras para nuestra trie, no va a llevarnos más tiempo para determinar si una palabra dada es en el trie. Así que eso es realmente agradable. AUDIENCIA: ¿Acabas inicializar esa matriz? Se ha perdido un punto o dos. ¿Puedes hablar eso por un segundo? HANNAH BLUMBERG: Claro, por supuesto. Buena pregunta. La pregunta era, nos tienen una matriz que es va a tener estrellas nodo como a diferencia de nodo solo, ¿verdad? Guay. Así que aquí lo que estamos diciendo es nuestra matriz es simplemente va a ser punteros a otras matrices. Así que ha essentially-- que tipo de se siente como una lista enlazada de esta manera donde cada uno de estos niños simplemente apunte al siguiente nodo. Y la forma en que nosotros determinar realmente, bueno, está bien, hemos itera a través de un entero palabra, es esta palabra en el diccionario, acabamos de comprobar esto is_word. Muy buena pregunta. Sí. AUDIENCIA: OK. Entonces, ¿cuál era el tiempo de ejecución para el trie? HANNAH BLUMBERG: Claro. Así que el tiempo de ejecución para un trie de búsqueda va a ser la constante de tiempo. Así que sólo va a ser el número de letras de la palabra. No es dependiente de la tamaño del diccionario o el tamaño de la estructura de datos. Así que aquí está un ejemplo un poco más simple. En este caso, se puede ver que la palabra murciélago está en el diccionario y usted tiene zoom, pero no tener algo como zoológico. ¿Cómo podríamos hacer zoológico? ¿Cómo nos sumamos a nuestro zoológico diccionario, a nuestro trie? Sí. AUDIENCIA: Hacer is_word cierto para el [inaudible]. HANNAH BLUMBERG: Good. Entonces diríamos Z-O-O, y entonces tendríamos que desee comprobar fuera de esa caja también. Excelente. Comparemos brevemente intenta frente tablas hash. Tries son realmente grandes porque, como hemos dicho, que proporcionan las operaciones de búsqueda en tiempo constante. Sin embargo, la gran desventaja es que son gigantescos. Usted puede obtener el sentido, incluso con sólo mirarlo, que va a tomar una enorme cantidad de memoria. Así que van a ser mucho más grande que las tablas hash, pero que van a dar nos tiempos de búsqueda mucho más rápido. Así que esa es la clase de su compensación, lo que te importa, si se trata de la velocidad o la memoria. ¿Tiene preguntas sobre nada de eso, todas las estructuras de datos C. Hermosa. OKAY. Vamos a pasar a un pequeño poco de desarrollo web con María. MARIA ZLATKOVA: Lovely. OKAY. HANNAH BLUMBERG: Usted puede usar mi ordenador portátil. MARIA ZLATKOVA: Niza. Vale, guay. A medida que avanzamos ahora a la web desarrollo, hablamos un poco sobre el cambio de permisos de archivos y directorios de modo que puede ser accesible a otros usuarios, para el mundo, y para que podamos ver cómo Básicamente podemos transmitirlas cuando desarrollamos cosas como sitios web que sobre todo hemos estado haciendo. Así vimos el comando chmod, que es el modo de cambio, básicamente. Eso es un comando Linux y modifica los permisos de acceso de los objetos del sistema de archivos. Y un objeto del sistema de archivos es sólo un directorio, un archivo, nada que pueda cambiar los permisos de. Así que para ver los permisos de archivos, tecleamos el comando ls, lista, -l. Y cuando escribimos eso, suele ver algunos permisos esa mirada algo así como este delante de un nombre de directorio. Así que d se refiere al directorio. Y luego tenemos tres tríadas que, básicamente, consulte los permisos de cualquiera un usuario, un grupo, o del mundo. Los tipos de permisos que podemos tener para estos tres grupos de personas son o bien r para lectura, w para escribir, y x para ejecutar. Y podemos tener las de el grupo y el mundo también. Lo complicado es que a veces cuando tecleamos el comando chmod, nos escriba algún número que consistía en tres bits. Así que podríamos hacer como 777 y que básicamente a que se refiere el valor añadido de cada una de estas tríadas porque r se referiría a 4, w haría se refieren a 2, y x se referirían a 1, así que cuando se suman, cada uno de los números vendría abajo a un número acumulado a un valor acumulado entre 0 y 7. Así también podríamos tener 0 de ningún permiso en absoluto. Y que en el fondo nos daría los permisos para el usuario, ya sea el grupo, o el mundo. ¿Tiene preguntas sobre este hasta el momento? AUDIENCIA: Usted dijo Read era 4? MARIA ZLATKOVA: Sí. AUDIENCIA: [inaudible]. HANNAH BLUMBERG: Sí. AUDIENCIA: Y luego añadiendo todos aquellos otros lo indique su número. MARIA ZLATKOVA: Sí. Sí. Estas son las grandes preguntas. Encantador. A continuación, nos metió en HTML y un poco más sobre el desarrollo web. Así HTML sólo significa HyperText Markup Language. Y ese es el margen de beneficio lenguaje que es una norma que se usa para crear páginas web. Se llama un lenguaje de marcas porque no es en realidad compilado. No dice cómo algún código debe ser ejecutado ni nada de eso. Simplemente delinea y describe cómo un web página debe configurarse con cada uno de sus elementos y cómo deben mirar hacia el usuario. Algunas de las etiquetas HTML que nos se fue por arriba son los siguientes. Todos nuestros documentos HTML comenzó con el DOCTYPE html. Entonces siempre tenemos la etiqueta html. Tenemos una cabeza y un cuerpo. Y es importante que HTML tiene este tipo de estructura anidada porque es muy claro. Y entonces se hace muy claro cuando deberá abrir y cerrar de hecho las etiquetas. Y siempre necesitamos para cerrar etiquetas que hemos abierto. Y aquí tenemos algunos de los tipos de las cosas por delante que queremos tener. Así tenemos, por ejemplo, el título de CS50. Y luego que en realidad puede vincular una hoja de estilo que define la forma en que estilo de nuestro sitio web. Es decir CSS. Vamos a ir sobre ella en el próximo par de diapositivas también. Dentro del cuerpo, establecemos algunas clases y los identificadores. Y como un recordatorio, una vez más, IDs son únicos y clases pueden ser asignados a varios elementos. Y eso sólo significa que podemos utilizar las clases y los identificadores dentro de otra structures-- así, por ejemplo, dentro de los archivos CSS o el estilo sheets-- para referirse a elementos específicos y básicamente decimos que queremos que el estilo o diseñar algún elemento de alguna manera en particular. Y nos referimos a ellos por sus identificadores y clases. Y también podemos hacer referencia a diferentes cosas por las etiquetas, así, pero identificadores y clases sólo nos dan una versatilidad y lo que específicamente nos quiera consultar. Tan sólo un ejemplo. Podemos, de nuevo, en el plazo un archivo CSS en el que desee definir algunos style-- lo colores, fuentes, y cosas así que-- podemos definir el estilo de un cuerpo. Así que lo definiría para todo el cuerpo de la etiqueta. Pero entonces también podemos definir un estilo para un #title. Y de nuevo, el hashtag se refiere a nuestra ID y el punto se refiere a nuestra clase. Y luego por los .info, nos También puede establecer algunos atributos. Y otra vez, cuando volvamos, tuvimos nuestra clase llamada información y nuestro título ID. Y podemos ver que nos referimos que les #title y .info. AUDIENCIA: ¿Dirías etiqueta [? ¿adoptarme? ?] MARIA ZLATKOVA: Lo siento? AUDIENCIA: ¿Dirías etiqueta [? ¿adoptarme? ?] MARIA ZLATKOVA: Hashtag significa ID, por lo #title se refiere a cualquier elementos tener este ID llamado título. Y entonces el punto se refiere a una clase. Así .info se refiere a este elemento porque tiene la información de clase. Sip. AUDIENCIA: ¿Por qué tienes distinguirlos en el HTML? ¿Por qué dice ciertas cosas son Identificaciones y ciertas cosas son de clase? MARIA ZLATKOVA: Eso es sólo hasta usted-- HANNAH BLUMBERG: Repite la pregunta. MARIA ZLATKOVA: Oh, lo siento. ¿Por qué nos distinguimos ciertos elementos como identificaciones y otros elementos como las clases? Eso es sólo porque es muy a menudo una opción de diseño. Le da una gran cantidad de versatilidad en ser capaz de decir quiero que este artículo específico tener este ID porque quieren que hacer un montón de cosas con él, y yo sólo desee definir un estilo, cierto estilo o color que sea para ese elemento. Y la manera de hacerlo es simplemente dándole un ID. Y luego si quiero tener un par de diferentes artículos que tiene que, en lugar de ir y establecer their-- en lugar de hacerlo por etiqueta porque la etiqueta haría establecer la célula para toda la etiqueta por cada vez que se usa esa etiqueta, puede definir una clase para varios elementos. Y luego simplemente acceder a esa clase y decir Quiero el estilo de esta clase de esa manera. Y de nuevo, la clase puede haber varios artículos diferentes y el ID tiene que ser único. Grandes preguntas. ¿Alguna otra pregunta? OK, impresionante. Una vez más, se trata de cómo estos selectores se hace referencia en CSS, con el hashtag, con el punto, o sin nada por asignando el estilo de alguna etiqueta, como el cuerpo. Y aquí tenemos al general sintaxis de cómo se hace esto. Para repetir algunas de las mejores prácticas para HTML y CSS, tenemos que, de nuevo, cerca de todo las etiquetas HTML que se pueden abrir. Y lo que te recomendamos hacer para sus proyectos finales, así como para CS50 Finanzas, es hacer Asegúrese de que todos los de su HTML valida. Y eso se hace con el W3 Validator. Y entonces lo que hicimos y lo que se recomienda hacer se separa el estilo, por lo CSS de HTML marcado. Así que cualquier cosa que se relaciona con cómo tu página se va a ver visualmente y cómo va a ser modificada debe ir en un documento CSS. Y entonces su margen de beneficio diciendo cómo las cosas están en relación entre sí es HTML, y que debe ir dentro de de los documentos HTML. ¿Alguna pregunta? Mhm. AUDIENCIA: ¿Qué es exactamente que está pasando con la validación página cuando estamos validando el HTML que [inaudible] creó? MARIA ZLATKOVA: Así que-- piensas. Entonces, ¿qué está pasando con la validación de la página y ¿por qué tenemos que hacer eso? Básicamente, tenemos que hacer eso porque muchas veces, su navegador, si no cierras una etiqueta o algo así, tu navegador es todavía va a representar una página y todavía podría funcionar, pero es la mejor práctica para asegurarse de que usted tiene, de nuevo, cerró todas sus etiquetas, que todos sus elementos son la forma en que deberían ser, y, básicamente, que es por el convenciones que vienen predeterminados. Es, de nuevo, sólo un Lo que usted debe debe aprender a hacer, en lugar de tener código descuidado y cosas por el estilo. Sí. Oh, lo siento. Pensé que estaba criando a su mano. AUDIENCIA: No, yo era [inaudible]. MARIA ZLATKOVA: OK. AUDIENCIA: Gracias. MARIA ZLATKOVA: Por supuesto, gracias. Así que de nuevo, pasando de cómo la información se transfiere y modelos de comunicación para transferir información. TCP / IP. TCP sólo significa Transmisión Protocolo de control e IP se refiere al Protocolo de Internet. Y eso solo se refiere a los datos de forma se entrega. Si tenemos algunos datos que necesita entregado a usted-- por lo usted hace una solicitud para un determinado servidor. Por ejemplo, cuando tratar de acceder cs50.net, hacemos una solicitud a el servidor CS50 y nos vemos que queremos llegar este tipo de información. Y a continuación, se basan en este protocolo para cómo se entrega esta información, el servidor proporciona información de nuevo a nosotros, el cliente. Y entonces somos capaces de ver la información de la página y luego usarlo. Entonces Protocolo de transferencia de hipertexto es sólo otro protocolo o conjunto de las convenciones que define cómo el navegador web y el servidor web debe comunicarse. Y poner todo esto juntos, HTTP, de nuevo, simplemente define cómo define este hipertexto por el HTML que hemos estado trabajando es, cómo debe ser entregado a usted y lo que los datos que se entrega a usted llega a ti. Y por eso, si ustedes recuerden de una clase, teníamos un montón de peticiones y teníamos un montón de sintaxis para estas solicitudes que estamos va a pasar ahora. Así que de nuevo, cuando enviamos una solicitud a un servidor, tenemos que definir un par de cosas. Así que tenemos que encontrar el tipo de la solicitud de que estamos configurando. Y de nuevo, tenemos, por ejemplo, GET es un tipo de método que tenemos en nuestra petición. Y luego HTTP / 1.1 es sólo el protocolo que estamos utilizando actualmente. La mayoría de las veces, eso va al protocolo que estamos utilizando. Así que si usted tiene una pregunta al igual que en el cuestionario. Eso es los convenios que tenemos hasta ahora. Barra invertida se refiere a qué tipo de las cosas que estamos solicitando. Entonces, nuestro anfitrión es, por ejemplo, en este caso, estamos tratando de ir a google.com. Así que este es el valor de un host. Este es un tipo de solicitud que podrían ser enviados. Y entonces un tipo de respuesta que podrían ser enviado, de nuevo, basado en este protocolo, es más, HTTP / 1.1. Así que esa es la versión HTTP de nuevo. 200 OK es sólo el código de estado. Y eso bien es sólo una frase sobre la base de que el código de estado. Y entonces el Content-Type se refiere al tipo que se devuelve a usted que es para esa página web que usted recibe y que su navegador puede hacer después. Y eso es text / html. AUDIENCIA: ¿Qué significa 1.1? MARIA ZLATKOVA: Eso es sólo el Versión de-- oh, ¿qué significa 1.1? Eso es sólo la versión, el HTTP versión de un protocolo que estamos utilizando. Muy buena pregunta. ¿Otras preguntas? AUDIENCIA: ¿Podrías resumir Content-Type muy rápido? MARIA ZLATKOVA: Para que es lo que el servidor. el tipo de información-- lo es tipo de contenido fueron las preguntas. Así que era el tipo de información que se obtiene de vuelta desde el servidor, el tipo de datos que el navegador puede entonces rindes que está utilizando. AUDIENCIA: ¿Eso es lo que este protocolo que está diciendo que hacer? MARIA ZLATKOVA: Lo siento? AUDIENCIA: ¿Es eso lo que dice el protocolo? MARIA ZLATKOVA: El protocol-- AUDIENCIA: --¿Qué el Content-Type es o qué-- MARIA ZLATKOVA: El protocolo se basa en-- ¿cuál es el protocolo que le dice? Eso es sólo la forma que esta información fue entregado a usted, basado de qué tipo de protocolo Se obtuvo esta información entregado de nuevo a usted. ¿Eso tiene sentido una especie de? HANNAH BLUMBERG: Usted puede pensar en el protocolo como A-- Creo que el profesor Malan describió en la clase como una especie de A-- es como el equivalente de handshaking humano. Decir, como, hey, soy un pedido y yo saber manejar HTTP de la versión 1.1. Y entonces el servidor dice, oh, bien, existen yo-- y ambos. También sé cómo lidiar con HTTP / 1.1. Y yo voy a dar hacer una copia de algún contenido. En este caso, se va al ser de tipo text / html. Así que es una especie de sólo una forma de ellos por communicating-- MARIA ZLATKOVA: Es sólo confirmando que eres tanto siguiendo el mismo protocolo y que tanto el cliente y el modo server-- su navegador y el server-- tipo de sabes lo que eres hablando y tienen la convención para el paso de datos. AUDIENCIA: Así que el Content-Type parcialmente: el texto Content-Type / html-- que es una parte separada del mismo mensaje? ¿O es parte de, digamos, 200? ¿Tiene 200 les digo que o es-- MARIA ZLATKOVA: 200 dice todo ha ido bien. Y luego el tipo de contenido es una especie de parte separada del mismo mensaje, y diciendo lo que yo vuelto tiene este tipo de text / html. Es simplemente dar más información. Tiene algo que añadir? OKAY. ¿Alguna otra pregunta sobre esto? Impresionante. Así que algunos otros estados HTTP que que pudimos conseguir, además de 200 OK, Los que hemos visto tal vez posiblemente muchos son 403 y 404. Así que 404, si intentabas Acceso algo que no existe. Así, por ejemplo, en su Conjuntos de procesadores CS50 Finanzas, si hubieras estado rindiendo quote.html y usted no tiene ese archivo, sino que tenía quote.php, que daría lugar a un 404 no encontrado porque el archivo podría no existir. Para un 403 prohibido, que se refiere a los permisos. Así que si algún archivo no es legible por el mundo, usted puede ser que consiga un 403 regresado. Algunos otros que usted puede ser get-- 301 Movido permanentemente; 302, que se encuentra; 304, modificado; 400 Petición Incorrecta; y Error interno del servidor para luego 500 y 503, Servicio no disponible. Sí. AUDIENCIA: ¿Será que nos espera memorizar todos esos estados? MARIA ZLATKOVA: Tendría en tu hoja de trucos. [RISA] AUDIENCIA: ¿Estamos esperábamos saber lo que desencadena cada uno? MARIA ZLATKOVA: ¿Lo son? HANNAH BLUMBERG: Para los que hemos ejecutar into-- así que la pregunta era-- MARIA ZLATKOVA: Son esperaban saber lo que cada uno de estos estados códigos podría ser desencadenada por? Así que para los que hemos usado y corrió hacia, yo diría que sí. Así que hemos visto definitivamente 200 Aceptar y dado conferencias en conjuntos de procesadores. Hemos visto 403, 404. Para otros? HANNAH BLUMBERG: lo haría dicen 500 parece un juego justo. MARIA ZLATKOVA: 500, sí. HANNAH BLUMBERG: Sí. Sólo tienen un sentido general de lo que los causa. Y también con sólo éstas nombres, puede tipo de como hacer una conjetura como a lo que realmente les causó. Por ejemplo, moverse de forma permanente, probablemente el archivo se ha movido de forma permanente. AUDIENCIA: Pero en un anterior examen, por lo que había una ¿cómo esperas que responder a eso? HANNAH BLUMBERG: Eso valía cero puntos. La pregunta sobre 418 en la tetera es técnicamente un estado HTTP, pero valió la pena cero puntos. Obviamente, usted no está espera que conocerlos. AUDIENCIA: ¿Es uno de verdad? HANNAH BLUMBERG: Es un verdadero uno, pero no quiere decir nada. Es sólo una broma. La gente de Internet son divertidos. MARIA ZLATKOVA: Grandes preguntas, chicos. ¿Alguna otra pregunta? AUDIENCIA: ¿Cuál es el error interno del servidor? MARIA ZLATKOVA: Interna error de servidor solo significa que ha sido incapaz de comunicarse con el servidor por alguna razón. Así que no es necesariamente algo que tiene que ver con el cliente o algo por el estilo. Yo no conozco ningún ejemplo específico que hemos ido a explicar, pero sí. HANNAH BLUMBERG: Claro. Así, por ejemplo, como vamos a dice que estaba trabajando mashup y un servidor de Google bajó para algunos razón, un corte de energía, digamos. Eso sería un servidor interno error o algún tipo de-- gustas no obtener una respuesta de vuelta. MARIA ZLATKOVA: Sí. Es sólo cuando estás incapaz de comunicarse con el servidor por alguna razón porque de ella bajando o alguna otra razón. Así que saltar en PHP. PHP, a diferencia de HTML, es un lenguaje de programación. Y empezamos a usarlo porque es muy útil para el desarrollo web. Primero usamos en CS50 Finanzas. Y, básicamente, nos ayuda a traer juntos esta marcado, el diseño, y la forma en que realmente utilizamos la información para mostrar las cosas en una página web. Así PHP en sí significa PHP Pre-procesador de hiper-texto, así que es una backnorym recursiva por sí mismo. Y la apertura de las etiquetas para PHP que la izquierda y flechas derecha con los signos de interrogación y php. Así que ya hemos visto un montón de él. Ahora, sólo vamos a ir algunas de las cosas básicas acerca de ella. Así que con PHP, la variable nombres comienzan con el signo de dólar. No especificamos, de nuevo, escriba más de una variable. Al igual que hicimos con C, no necesitamos hacer eso. Podemos hacer un montón de diferentes cosas con variables. Podemos ponerlos juntos concatenando ellos con la notación de puntos, lo que no podíamos hacer en C de nuevo. Una vez más, tenemos un poco más de versatilidad con PHP en términos de variables. Una vez más, no tenemos una función principal. Y PHP se interpreta en contraposición a compilado, Así que lo que hicimos para los archivos de C, no tenemos que hacer eso para PHP. Pero más bien, la forma en que el idioma se ejecuta por sí mismo, se interpreta. Y después se pasan libremente simplemente significa que tenemos no tiene que especificar una variable tipo y los tipos de variables se entienden en tiempo de ejecución. AUDIENCIA: Pero lo que hizo decir con la concatenación de puntos? MARIA ZLATKOVA: Claro. Cuando queremos poner las cosas juntos-- por lo que si teníamos alguna variable que tenido el valor de 3 y tuvimos otra variable que tenía el valor de cadena, podríamos poner las variables juntas poniendo un punto en entre ellas y la concatenación de ellos. O podríamos crear un llamado nombre de la variable y poner juntos por concatenar dos cadenas. Así que si tuviéramos una cadena en doble cotizaciones y nos pusieron un punto después de que, y luego tuvimos otra cadena, que crearía una cadena por completo. AUDIENCIA: OK. MARIA LETONIA: Fue claro? AUDIENCIA: Sí. MARIA ZLATKOVA: OK. Sí. AUDIENCIA: Cuando usted dice interpretado en lugar de compilado, estás hablando no lo hace tienen que ser lo más específico cuando se trata de PHP frente a C? MARIA ZLATKOVA: Cuando decimos interpretado en oposición a compilado, ¿qué queremos decir? Así que eso significa que no necesitamos archivos ejecutables para ejecutar PHP. Esto significa que se ejecuta como va. Tiene sentido? Un poco más. HANNAH BLUMBERG: ¿Así que puede pensar en un intérprete como otro programa que es responsable para ir línea por línea en PHP y en realidad ejecutarlo, en oposición a compilar todo abajo a binario. En realidad, no significa nada sobre cómo específica que tenemos que ser. Todavía tenemos que ser precisos, y no lo hacemos olvide su punto y coma, y ​​asegúrese usted tiene su signo de dólar, y cosas asi. Buena pregunta. MARIA ZLATKOVA: Sí. Así línea por línea, como a diferencia de con los archivos de C, tenemos que hacer que toda la final antes de que realmente podemos ejecutarlo. Esa es la principal diferencia. Pero, de nuevo, no podemos realmente ser menos específico. Así matrices en PHP representan en realidad un mapa ordenado. Así que los valores de las matrices asociadas a las teclas. Las dos maneras de declarar una array, basado en esta sintaxis, podemos ser más explícita al decir que tenemos una matriz y tenemos este key1 que se asigna a este valor1, valor2 key2 que se asigna. O simplemente podemos crear una matriz que contiene los valores en sí y luego las teclas son entendida de una manera. Para cualquier duda sobre esto? Audiencia: ¿Cuáles serían las claves estar en el segundo ejemplo? 0, 1, 2, 3? MARIA ZLATKOVA: Por ejemplo, es sólo las claves en esto no hacen necesariamente Hacer la diferencia. Ellos simplemente definir cómo se puede utilizar los valores dentro de ella. Así que si teníamos un foreach bucle en PHP que lo haría nos permite ir a través de todos los valores, podemos ir a través de todos los valores, incluso si teníamos o no habíamos definido una tecla específica en el sitio de sintaxis anterior. Así que incluso con este tipo de la matriz, que todavía podía tener un bucle foreach que va a través de cada de los valores de la clave en la matriz. Así que la sintaxis de un foreach lazo, empezamos con una matriz. Esta variable $ arr es nuestra gama actual que definimos en la diapositiva anterior como valor que va, literalmente, a través de cada uno de los valores, independientemente de si tuvimos una llave o no. Y entonces podemos hacer algo con el valor en el interior del bucle foreach. Así que de nuevo, si tuviéramos un arsenal como esto aquí created-- así que tenemos la clave de foo y el valor de bar, la clave de Baz y el valor de qux-- podemos tener un bucle foreach que pasa por matriz como valor clave y luego hacer algo con la llave y / o valor. Pero no lo hacemos siempre necesariamente tiene que tener un foreach bucles que pasa a través de la matriz como un mapa clave de valor. Podemos pasar por el array bucle foreach como valor. HANNAH BLUMBERG: Y creo que a-- era su pregunta, lo que es el índice implícito? AUDIENCIA: Un poco. MARIA ZLATKOVA: Oh. HANNAH BLUMBERG: Sí, sí. Así que, básicamente, si no se especifica una clave, que va a ser 01. MARIA ZLATKOVA: Sí. Al igual que con C, es cero indexados si no se especifica una clave. AUDIENCIA: Lo sentimos. ¿Podrías tratar de hablar un poco más fuerte? Estoy teniendo un poco de problemas para oír todo. MARIA ZLATKOVA: lo siento mucho. Sí, por supuesto. Así que es lo que quieres de mí para repasar de nuevo? ¿O es esto-- AUDIENCIA: Así que en la anterior si slide-- usted podría volver para un segundo. MARIA ZLATKOVA: Por supuesto, lo siento. AUDIENCIA: Así que el segundo array aquí no parecen tener un valor de clave, especie de [? causalidad. ?] MARIA ZLATKOVA: Cierto, cierto. AUDIENCIA: Entonces, ¿cómo funciona eso cuando usted dice que es todo o nada. Para mí, eso parece la [? foo?] ya. MARIA ZLATKOVA: Sí, sí. Así que de nuevo, se trata de una mapa ordenado en este sentido que no se entienden, por ejemplo, los índices aquí puede entenderse como 0, 1, 2, 3. Una vez más, eso es tener los índices es nuestro equivalente de tener teclas mapeadas en valores. Así que si nuestra clave fue 0-- lo siento. HANNAH BLUMBERG: No, Hay apuntarse aquí. En realidad es muy agradable. MARIA ZLATKOVA: Eso es genial. OKAY. Así que de nuevo, $ arr 0 sería la clave para el valor 1. 0 sería la clave para el valor 1. AUDIENCIA: Lo siento. Es invisible. HANNAH BLUMBERG: Muy bien, no importa. Chalk era una mala idea. Me retracto. Usted puede pensar en las teclas como mapas 0 al valor 1. MARIA ZLATKOVA: Sí. Así que este es 0, esto es 1, 2, 3. Estas pueden ser las llaves. Usted puede pensar en ellos como-- sí. Así que en lugar de tener claves explícitas, son tipo de entenderse como siendo los índices a partir de 0. La tiza no ayudó. Sí. AUDIENCIA: Para el bucle foreach, si queríamos ver el como el valor, lo haría solo índice automáticamente a 0? MARIA ZLATKOVA: Sí. Sería ir a través de cada uno de los valores. AUDIENCIA: [inaudible] como 0 o habría que acaba de hacer de 0? MARIA ZLATKOVA: Tendrías decir, como signo de dólar y luego algún nombre de variable, el valor. AUDIENCIA: [inaudible]. MARIA ZLATKOVA: Lo siento? AUDIENCIA: Lo siento, estoy tratando de recordar. ¿Cómo usted que si usted puede hacerlo automáticamente la indexación es de 0? MARIA ZLATKOVA: Entonces, ¿cómo lo harías si usted no tiene los nombres claves específicas? AUDIENCIA: Sí. MARIA ZLATKOVA: usted acaba de define-- sólo decir a ti mismo como un nombre. Así que en sus conjuntos de procesadores, ustedes podrían recuerde $ row foreach como $ filas, hemos creado nosotros mismos estos $ fila diciendo queremos pasar por fila como $ filas. A pesar de que no teníamos esta $ explícita filas definidas, pudiéramos ir y dicen que esto puede ser la llave, y sólo tiene que ir a través de cada uno de los valores. AUDIENCIA: Así es el valor de una variable nueva estamos creando para almacenar [inaudible]? MARIA ZLATKOVA: Así que no es inherentemente una nueva variable. Es una variable que hace referencia a la en el interior de la matriz a cada uno de ellos. HANNAH BLUMBERG: Es un nuevo nombre de la variable. MARIA ZLATKOVA: Sí, es un nuevo nombre de la variable, pero no es inherently-- sí. Es sólo una nueva variable que se puede hacer eso. Entonces, ¿cómo hacemos que hicimos $ remar como $ filas, filas era un nuevo nombre de la variable que podría crear en nuestro bucle foreach. No tiene que preexistir antes de eso. AUDIENCIA: ¿Podría pasar por el lógica para cada uno, utilizando el ejemplo allí? MARIA ZLATKOVA: Mhm. Oh, lo siento. Aquí está el ejemplo. Por supuesto. Así que para cada array-- lo eso significa ir a esta matriz como clave value-- que está pasando que pasar por esta matriz y primero ir a buscar foo, la foo llave y la barra de valor. Y luego en el segundo iteración del bucle for, que va a pasar y tomar el baz clave y el QUX valor. Y entonces usted puede hacer algo con cualquiera de ellos o ambos de ellos. AUDIENCIA: Así que la idea detrás de que tiene un punto clave para el valor, ¿qué es lo que terminan el acceso? MARIA ZLATKOVA: ¿Cuál es la idea de tener un señalador clave para valorar? Es sólo otra convención, otro forma de recorrer la matriz y ser capaz de acceder a cualquiera de los llave o el valor o ambos y utilizarlos. AUDIENCIA: ¿Cuál es el papel de la ordenar que el foreach se ejecuta en? Así que si tuviéramos que añadir elementos a la matriz después, habría quienes serán los primeros llamada en la matriz foreach, o sería más tarde? MARIA ZLATKOVA: Entonces, ¿qué es el fin de que el foreach bucle pasa por una serie de? Pasa a través de la primera elemento para el último elemento, hasta el último elemento añadido. Si agrega elementos más tarde, lo harían accessed-- ser los primeros elementos serían ser visitada como la primera elementos de la matriz, y luego te gustaría ir a través de cada uno de los elementos como una especie de ordered-- no un ordenado, pero la forma en que que se han puesto en la matriz. AUDIENCIA: Entonces nuevos elementos se añaden más tarde? Así que están added-- van a ser el los últimos en el [? iteración. ?] MARIA ZLATKOVA: Nuevos elementos can-- Básicamente, cuando se añaden nuevos elementos, se añadieron a la final de la matriz? AUDIENCIA: Sí. MARIA ZLATKOVA: Creo que sí. Sí. Y luego, con su bucle foreach, después de añadir nuevos elementos y usted va a través de ellos, los nuevos elementos haría ser accessed-- el nuevo elemento, si es agregado última, sería acceder pasado. AUDIENCIA: ¿Puedes dar un ejemplo de algo que haría [inaudible] con algo de valor como [inaudible] o el valor, gusta cómo te formatea eso? MARIA ZLATKOVA: Claro. ¿Puedo dar un ejemplo de lo que que íbamos a hacer con el valor? Así que lo que ustedes podrían estar familiarizados con es que hemos pasado por una serie y básicamente impreso cada uno de los elementos, por ejemplo, como parte de una lista ordenada o algo de eso. ¿Eso tiene sentido o queremos a-- AUDIENCIA: ¿Podemos imprimir estos valores fuera? MARIA ZLATKOVA: Sí, podríamos imprimir y luego básicamente $ valor porque en ese valor específico, que sería imprimir el valor dentro de ella. Así que si estábamos en nuestra primera iteración de la misma y imprimimos $ valor, estaríamos imprimiendo bar. AUDIENCIA: ¿Hay también son para bucles en PHP o simplemente bucles foreach? MARIA ZLATKOVA: No también para bucles en PHP. Y su lógica es sobre todo el mismo que lo que usted ha estado acostumbrado. AUDIENCIA: Por lo que su valor es nulo. MARIA ZLATKOVA: Es como el mismo. Sí. AUDIENCIA: sólo voy a preguntar. Así que cuando se declara un matriz, no es necesario para decirle lo que el tamaño que va a ser, lo que significa que usted puede simplemente agregar y quitar elementos de [inaudible]. MARIA ZLATKOVA: Sí. Sip. Exactamente. Cuando declaramos una matriz, que no es necesario decir qué tamaño es, así que sólo podemos añadir elementos en él más adelante también. ¿Más preguntas? Por lo tanto trayendo PHP y HTML juntos, lo que hemos seen-- así, Por ejemplo, en este ejemplo, tenemos un formulario HTML que tiene un campo de entrada. Y el campo de entrada es nombrar sólo y entonces tiene un botón Enviar. Y cuando se pulsa el Presentar botón, en nuestro fichero hello.php, porque el método para la forma es conseguir, podemos acceder a lo que esté a nombre de por esta obtener la variable global que es-- la sintaxis es $ _GET. Y luego podemos acceder a cualquiera que sea el entrada del usuario en el interior de esa forma para el nombre especificando el nombre de ese campo. ¿Alguna otra pregunta o cualquier preguntas sobre este ejemplo específico? AUDIENCIA: ¿Dónde está el PHP? MARIA ZLATKOVA: Aquí. Así que esta es nuestra etiqueta de apertura para el PHP. AUDIENCIA: ¡Oh, derecha. MARIA ZLATKOVA: Sí. HANNAH BLUMBERG:? El = es la taquigrafía porque esta es PHP y apenas eco. AUDIENCIA: Oh. MARIA ZLATKOVA: Sí, lo siento. Debería haber dejado claro. HANNAH BLUMBERG: Imprimir. MARIA ZLATKOVA: Es sólo la función que nos permite imprimir algo. Muy buena pregunta. Así going-- sí. AUDIENCIA: ¿Va a ser bastante un poco de codificación manual de PHP y HTML el cuestionario 1? MARIA ZLATKOVA: No puede ser un buena cantidad de interpretación de PHP y HTML, no necesariamente como una enorme cantidad de codificación, aunque puede que tenga que escribir una bucle foreach, sin embargo, un bucle for. Cualquiera de los bucles que nos cubrir aquí es un juego justo. Y eso es sobre todo ello. HANNAH BLUMBERG: Yo estaría preparado. De la misma manera que les pedimos que escribir un montón de funciones C en concurso 0, Yo estaría dispuesto a hacer lo misma en PHP y JavaScript. MARIA ZLATKOVA: Sí. HANNAH BLUMBERG: Yo diría que un poco-- como no estamos va a hacer que usted escribe un enorme HTML página porque eso es un poco tedioso, pero es posible que tenga partes. Eso es juego totalmente justo. Como pequeña página HTML, totalmente justo. AUDIENCIA: OK. ¿Qué tal en JavaScript también? HANNAH BLUMBERG: Sí. Presa fácil de JavaScript. MARIA ZLATKOVA: Sí. Eso es juego completamente justo. HANNAH BLUMBERG: Vamos a llegar a la de como 10 minutos. MARIA ZLATKOVA: SQL, de nuevo, Lenguaje de consulta estructurado. Básicamente nos permite gestionar los datos en una gestión de base de datos relacional sistema. Eso significa que sólo básicamente que tenemos en algún lugar para almacenar algunos datos que podríamos querer utilizar en un sitio web o en alguna otra forma. Y luego tenemos las consultas para obtener información de nuestra base de datos, o para insertar información en ellos. Gran parte de la ACTUALIZACIÓN ones-- común, INSERT, SELECT y DELETE. Así que para UPDATE, esta es la sintaxis para la actualización de datos en una base de datos. La actualización de esta tabla llamada mesa diciendo SET, podemos establecer algunos valores en todo filas a la igualdad de algo más. Así también podemos especificar algunas específicas entradas que queremos modificar y que puede ser utilizando WHERE. Y podemos especificar que sólo queremos modificar algunas filas donde la casa para, si tuviéramos una mesa de estudiantes y todos los estudiantes tenían casa, por lo que sólo sería modificar algunos valores donde una casa es igual Currier, por ejemplo. Para INSERT, podemos insertar ciertos valores en una tabla. Así INSERT INTO tabla, y luego los valores, y luego entre paréntesis, especificamos que los valores que desea insertar. Así INSERT INTO tabla, col1 y col2, el valor es val1 y val2. Así que esta inserta básicamente una nueva fila en una tabla que contiene los valores 1 y 2 en las columnas 1 y 2. Y luego vamos a ir un ejemplo rápido de cómo se ve esto al igual que en nuestra base de datos un poco. Pero esta consulta final que I Creo que vamos a ir, SELECT, sólo nos permite para seleccionar datos de una tabla a la posibilidad de utilizarlo después. Y la forma en que hacemos esto es que simplemente guardarlo en alguna variable. Y entonces podemos posiblemente utilizarlo de nuevo. Así estrellas SELECT significa seleccionar todo. Eso es sólo una abreviatura para la selección de todos. FROM tabla WHERE, estamos buscando para algunas condiciones específicas, por lo que la columna es igual a algo, por ejemplo. Si lo único que queríamos seleccionar todo de la mesa, esto sólo selecciona todas las columnas y todas las filas de una tabla. Y luego DELETE FROM tabla DONDE col es igual a algo, esto sólo elimina algunos fila de nuestra tabla donde tenemos algunas condiciones específicas. En este caso, las condiciones son la columna es igual a algo. Tan sólo un ejemplo rápido de esto. Si tenemos esta tabla aquí y nosotros insertarlo en una tabla, estos valores, eso sería insertar una nueva fila. Y si tuviéramos incremento automático, esto sería acaba de incrementar nuestro ID de 0 a 1 a 2. Si seleccionamos todos de los estudiantes, que simplemente devuelve todos los campos y todas las filas. Dónde año es mayor o igual a 2.016, eso sería simplemente volver Hannah y yo. Y luego si sólo seleccionamos Identificación del año y el año de los estudiantes donde la casa es Cabot House, que sería, de nuevo, volver a Hannah y yo. Entonces, si hemos borrado de los estudiantes donde nombre es igual a Rob, eso sería eliminar toda la fila. Y luego, si nos fijamos el nombre, estudiantes ACTUALIZACIÓN Nombre del conjunto es igual a Daven DONDE casa es igual Cabot House, que va a ir a esas filas y luego actualizar el nombre. Y luego de unos tipos de datos SQL son CHAR, VARCHAR, INT, y flotar. Estos son juego justo. Me gustaría ir otra vez y asegúrese de que sabe y tenerlos en su hoja de trucos, lo que cada uno de esos personajes se han utilizado para, lo que los utilizó en sus conjuntos de procesadores, y asegúrese de que usted está familiarizado y cómodo con tener que elegir de diferentes tipos de datos en el conjunto de procesadores. Sí. AUDIENCIA: ¿Cuál fue almacenada esa mesa? Sí, donde se almacena este cuadro? MARIA ZLATKOVA: Bueno, en este momento, no se almacena. De todos modos, donde se almacena este cuadro? Pero puede ser almacenada en una base de datos SQL. AUDIENCIA: ¿Y dónde está la base de datos SQL? En el ordenador, en línea en algún lugar, el servidor? MARIA ZLATKOVA: Puede ser un serie de cosas diferentes. HANNAH BLUMBERG: Hemos interconectado con Tablas SQL mayoría con phpMyAdmin. Así que lo que podíamos pedir un servidor almacenarlos para nosotros. Podríamos almacenarlos en nuestro propio ordenador. MARIA ZLATKOVA: Sólo depende de cómo quieres que lo haga por ti mismo. Pero hemos estado almacenando ellos, como se menciona Hannah, en phpMyAdmin, que es en línea. Y entonces la forma en que usamos PHP y SQL, que lo almacenan en alguna variable lo que hemos preguntado para. Así que si tenemos Seleccionar todo en la historia donde user_id es igual al identificador de sesión, eso sería seleccionar todas las filas para la persona específica que está conectado a partir de la historia mesa y las ordena en filas. Una cosa divertida saber es que la función de consulta del CS50 protege contra etiquetas de inyección SQL. Eso sólo significa que se asegura la entrada que se introduce es correcto y que la persona que está entrando en la entrada No está tratando de entrada de alguna maliciosa código o bien caer nuestras mesas o borrar todo dentro de nuestra base de datos. Una visión rápida de la Modelo Model View Controller, es sólo una forma de organizar y pensando en código. Es más, un paradigma de diseño. Lo que esto significa es que can-- y es una buena práctica para separar las diferentes partes de nuestro código y lo que controlar en estas tres paradigmas. Así que nuestro punto de vista es lo más a menudo nuestra plantillas, nuestro diseño, la forma que establecemos cómo se ve nuestro código. Eso es sobre todo nuestros archivos CSS y la forma que definimos el diseño de nuestro código, básicamente. Nuestro controlador es sobre todo lo que que hemos estado haciendo con los archivos PHP. Así que de nuevo, en colaboración con la información que tenemos y definir cómo ese información se utiliza, y luego pasar esa información ya sea en la vista o el modelo. Y el modelo, la forma en que hemos estado utilizando es decir ha sido nuestra base de datos, por lo que nuestra información es almacenado por lo que tiene alguna parte para vivir, y cualquiera de los código que se refiere a la forma que obtenemos esa información o la forma que actualizamos esa información. Así que en el modelo MVC, HTTP las solicitudes se envían a un servidor web. A continuación, el controlador interpreta la solicitud del usuario y luego valida la entrada del usuario. Es opcional que tenemos el controlador comunicarse con un modelo, por lo que algo como nuestra base de datos o alguna otra funcionalidad que transmite información. Y finalmente, el controlador pasa la información a la vista de modo que pueda ser rendido y que puede se hacen visibles a cualquier persona el acceso a la página web. ¿Alguna pregunta? Impresionante. Así que de nuevo, el modelo, su función, de nuevo, es el almacenamiento persistente de la información, la gestión y organización de los datos. Y lo que hemos visto hasta ahora es la base de datos MySQL y los archivos de datos que se pueden utilizar. Ver, presentación de información a el usuario, la interfaz de usuario, o interfaz de usuario. Y el ejemplo de esto es HTML. Y entonces podríamos tener PHP mínima. Así que para un bucle que itera sobre los datos que se imprimen es parte de la vista, como se en comparación con el controlador. Y entonces muchos de nuestros archivos PHP caer en la categoría de controlador. Simplemente maneja peticiones de los usuarios y obtiene información a partir del modelo. Saltando en el Documento Modelo de objetos, esto sólo se refiere a la forma en HTML se organizan documentos. Y están organizados en un árbol estructura que tiene una jerarquía. Así que si tenemos acceso a [inaudible] la representación del documento, podemos trabajar con el documento, al igual que manipulamos objetos básicamente. Y para hacer esto una poco más clara, cuando tenemos un montón de nuestra diferentes etiquetas responden a diferentes rutas en nuestro árbol. Y a continuación, para este ejemplo, tener el nodo de documento de partida. Tenemos, entonces, nuestro nodo HTML que se divide en cabeza y cuerpo. Head tiene título y luego título contiene hola, mundo. Y nuestro cuerpo solo contiene hola, mundo también. Así que cualquier pregunta sobre cualquiera de los cosas que hemos cubierto hasta ahora? Y si no, va a Hannah hacerse cargo con JavaScript. Impresionante. HANNAH BLUMBERG: OK, fresco. Si hay algo que viene con PHP o HTML, o cualquiera de las cosas que María cubierto, siempre podemos hacer una pausa. Lo estamos haciendo mejor en otra vez, tan impresionante. Y sólo para volver muy rápido a esta, si nos fijamos en todos los examen del año pasado, esta surge mismas: aquí es algo de HTML, hacen de este diagrama. O aquí está este diagrama, hacer un poco de HTML, por lo que definitivamente practicar eso. Y entonces esa es una GARANTIZADOS pregunta que usted puede hacerlo bien. Guay. Así que vamos a hablar de JavaScript y cómo es un poco diferente de lenguajes como PHP y C, los dos idiomas que vimos antes. Así que el número uno, está vagamente escrito. Eso es como PHP, pero a diferencia de C. Es un lenguaje interpretado. Una vez más, eso es como PHP, a diferencia de C. Y esto va a permitirnos servicio- que funciona muy bien con las páginas web. Esto va a permitir que nosotros manipulamos el contenido y cómo se ve y lo que hace. Vamos a ver un poco de Ajax. Nos permite comunicarnos de forma asíncrona con diferentes servidores y obtener información. Y esto es lo que realmente separa JavaScript desde PHP y C es que es del lado del cliente. Tanto PHP y C son normalmente del lado del servidor. En su mayor parte y casi en su totalidad lo que que hemos visto, al menos en esta clase, JavaScript actúa sobre el lado del cliente, lo que significa que el navegador es en realidad responsable de ejecutarlo. Y eso significa que no lo hacemos necesidad de interactuar con el servidor. Por lo que significa que puede ser mucho más rápido porque es en realidad sólo es Chrome, es Safari, es Firefox, lo que utilizar realmente el funcionamiento de su JavaScript. AUDIENCIA: ¿Qué significa asíncrona? HANNAH BLUMBERG: Ah, lo Qué significa asíncrona? Muy buena pregunta. Asincrónicamente designa todas así, el contenido en el que utilizamos es, OK, nos están creando una página web y tenemos que conseguir un poco de información. Así que con el ejemplo de mashup, alguna información que puede ser que deseemos es títulos de los artículos. Ahora, could-- una opción es hacerlo de forma sincrónica y eso significa let de parar, ir a buscar el artículo, conseguir el artículo de vuelta, y luego render, pero eso sería muy lento. Eso sería una mala experiencia de usuario porque usted acaba de estar sentado ahí esperando por algo que responder. De forma asíncrona que significa vamos seguir yendo sobre nuestro negocio, la prestación a la página, y le enviaremos una petición de Eso es algo que va a suceder en el fondo. Creo que utilizamos el ejemplo de conferencia de llamar a Rob y diciendo: Hey, ¿puedes ver esto para mí y volver a mí, en lugar de sólo me espera en el teléfono. Así de forma asíncrona significa que sucede en el fondo de distancia de nosotros en paralelo. Muy buena pregunta. ¿Algo más? Excelente. Vamos a saltar mucho más en peticiones asíncronas con Ajax. AUDIENCIA: ¿El JavaScript-- ¿de dónde viene caer con el modelo-vista-controlador? HANNAH BLUMBERG: Muy buena pregunta. ¿De dónde viene el otoño JavaScript con el modelo-vista-controlador? Hm. Supongo que puede fall-- por lo que no suelen gustaría aplastar en que paradigma, pero supongo que yo diría, OK, así JavaScript en realidad va a permitir nosotros para recopilar datos, interpretar los datos, en realidad hacer cosas significativas con los datos. De esa manera, es muy similar al de control. Pero también nos va a permitir a mostrar cosas y cosas de impresión. De esa manera, es muy similar a la vista. Sí. Así que es algo así como PHP en donde puede especie de ser a la vez. Buena pregunta. ¿Algo más? Muy bien, impresionante. La derecha móvil adelante. Así que vamos a ver un ejemplo de cómo podemos utilizar JavaScript en uno de nuestros programas web. Así que voy a considerar esta index.html con un montón de HTML. Y lo quiero centrarse en es esta etiqueta script. Y esto lo dice, está bien, quiero correr algunos JavaScript y aquí es donde vive. Vive en hello.js. Y muy parecido a CSS, podríamos poner JavaScript en el HTML. ¿Por qué podríamos querer separar a cabo? Sí. AUDIENCIA: Más fácil volver a escribir? HANNAH BLUMBERG: Sí. Es más fácil de utilizar a través de distintas páginas web. Mantiene las cosas más limpio. Es sólo una buena práctica. Impresionante. Buena respuesta. Así que bueno, así que esto va para ser nuestro index.html. Y entonces aquí es nuestra diminuto archivo JavaScript. Y todo lo que dice es alerta Hola, mundo. Así que lo que sucede es cuando esta página renders-- así que si vas a cualquier sitio web este es-- todo lo que va a suceder se va a decir, OK, estoy va a ejecutar el código JavaScript. Y el código JavaScript sólo dice alerta Hola, mundo. Así que voy a conseguir este pequeño y agradable emergente. ¿Guay? Eso es algo así como nuestro primer JavaScript programa, nuestra Hola, mundo. Veamos un poco más sobre lo que la sintaxis de JavaScript parece. Y concretamente, vamos a comparar a C y PHP, lo que hemos visto antes. En JavaScript, vamos a tener var, el nombre de la variable, y luego su valor real. Y no especificamos un tipo, simplemente como en PHP, pero muy al contrario que en C. Así, por ejemplo, si queríamos para almacenar el valor 50, en C, tendríamos que decir, oye, C, quiero un número entero, Voy a llamarlo i, y su valor es 50. En PHP, es un poco más fácil. Nosotros decimos, oye, quiero una variable llama i y su valor es 50. Muy similar, en JavaScript, que digo hey, yo quiero una variable llamada i, su valor es 50. Cada vez que uso posterior i, yo no necesito escribir var. Es sólo que a partir de ese momento. De la misma manera, en C, donde una vez que decimos int i, sólo tiene que utilizar i. ¿Guay? Correcto. Pasando a los bucles, afortunadamente, éstos casi miro exactly-- Creo que son exactamente lo mismo que lo bucles van a parecer en algo así como C, donde el bucle for va a tener de tres parts-- una inicialización, una condición, y una actualización. Un bucle while, se ve exactamente el mismo. Nos damos una condición. Y un do while, de nuevo, exactamente de la misma. Le damos una condición. Digamos que quería repetir over-- Yo quería hacer algo cinco veces. En C, podríamos escribir para init i es igual a 0. i es menor que 5, i ++. La única diferencia, en JavaScript, en vez de decir int i es igual a 0, decimos var i es igual a 0. Hermosa. Esa es la única diferencia. ¿Tiene preguntas sobre nada de eso? Sí. AUDIENCIA: Entonces en PHP, que es el mismo cosa, a excepción sino como una variable? ¿O era un ejemplo var? HANNAH BLUMBERG: Sí. Así que en PHP, que va ser un signo de dólar. Así que va a $ i es igual 0, $ i es menor que 5, $ i ++. Muy buena pregunta. Ahora vamos a hablar de declaraciones de funciones. En C, cuando declaramos un función, que le dimos un nombre y le dimos algunos parámetros. Y al principio, escribimos el tipo. En JavaScript, todo lo que tienes que hacer es escribir la función de palabra clave que dice, hey, JavaScript, Estoy a punto de definir una función. En este caso, tiene nombre de suma. Y toma dos argumentos, x e y. Nótese que no nos importa sobre los tipos de xe y. Y al igual que C, tenemos este retorno de palabras clave, por lo que podemos hacer algo como return x e y. Y ahora, una vez que hemos escrito esta primera función, se puede utilizar en cualquier suma. Y eso es totalmente bien. Una cosa realmente bueno de JavaScript que es muy a diferencia de C es que las funciones se ser tratados como valores. Por lo que podemos hacer algo así aquí donde supongo cubro este up-- Me cubrí la suma var parcialmente: y que acabamos de decir función de xy es igual de retorno x más y. Eso es lo que se llamaría una función anónima. Es una función sin nombre. Mientras esta función dice suma, bla, bla, bla, esto sería simplemente decir función. Pero ahora a pesar de que tengo esta función anónima, esa función es en realidad un valor. Podemos tratarlo como un valor. Así que podemos guardarlo en una variable de la misma manera podríamos almacenar 50 en una variable. Así que podemos decir, OK, quiero una variables, se llama suma, y es esta función. Así que estas dos cosas son en realidad va a hacer exactamente lo mismo, pero la sintaxis es un poco diferente y una especie de nota de la diversión. Sí. AUDIENCIA: Por lo que podría llamar a un función que fue anónima diciendo: suma soportes 2, 5? HANNAH BLUMBERG: Sí. Usted puede llamar a este anónimo funcionan de la misma manera. Harías suma (2, 5) ;. Eso sería totalmente bien. Si yo no hice suma var es igual función, si me acaba de eliminar esto-- Sé que es en mi mano, pero pretendo He eliminado esto-- continuación esa función es una especie de simplemente desaparecido. Nunca se puede utilizar de nuevo porque usted no tiene un nombre para él. Es difícil referirse a algo usted no sabe cómo llamarlo. Buena pregunta. Sí. AUDIENCIA: ¿Se puede hacer referencia a la suma de otros lugares con el valor de x más y? HANNAH BLUMBERG: Puede usted suma de referencia en otros lugares con el valor de x más y? No estoy del todo seguro de lo que quieres decir. AUDIENCIA: Así que tu pasado semi-anónimo función es la suma es igual a este función anónima, por lo que suma es ahora una variable que can-- HANNAH BLUMBERG: Correcto. Así suma es la variable, pero es actually-- así suma es una variable cuyo valor es la función. Así que es una función, que es una especie de una cosa extraña para envolver su cabeza alrededor desde que hemos estado jugando con C y no se puede hacer eso en C. Pero ahora podemos llamar a sumar la misma manera que podríamos llamar suma aquí. AUDIENCIA: OK. HANNAH BLUMBERG: Sí. Buena pregunta. Sí. AUDIENCIA: ¿Así que no usamos el prototipos en PHP o JavaScript? HANNAH BLUMBERG: No, no es necesario utilizar prototipos, especialmente en JavaScript. Así que una cosa mala práctica que soy va a decir que usted no debe hacer es que usted no tiene que escribir var i = 50. Se podía empezar a hacer i = 50. Y sólo haría que una variable global. Es muy mala práctica Nunca digo explícitamente var i, pero es algo que puede hacer. El intérprete no es va a gritar a usted. JavaScript es bastante similar, puedes hacer lo que quieras. Oh, lo siento. Hay dos. En los pantalones de color naranja. Adelante. AUDIENCIA: No, tú primero. AUDIENCIA: No, yo estaba diciendo Yo no tenía mi mano. OKAY. Así que si usted fuera a llamar esa primera vez, ahora resumir, lo llamamos la misma manera, X, y, como cada vez? HANNAH BLUMBERG: Sí. Así que estos dos esencialmente hacer la misma cosa. AUDIENCIA: ¿Y cuál es la ventaja de la utilización de uno u otro? HANNAH BLUMBERG: Ninguna ventaja de la utilización de uno o el otro. Sólo quería mostrarte de dos diferentes piezas de la sintaxis. Muchas veces en el anonimato funciones tienen un propósito es si el argumento a otro función debe ser una función. Y veremos que, en sólo un segundo con el Ajax. Así que si eso no tiene ningún sentido, guárdelo en la parte posterior de la cabeza. Ahí es donde un anónimo función podría ser útil porque no es realmente vale la pena dándole un nombre ya que estamos justo va a utilizar una vez. Sí. AUDIENCIA: Si x e y cambio posterior en adelante, se resumen cambiar también? HANNAH BLUMBERG: Si x y el cambio y más adelante, se resumen cambiar también? Así que esto es en realidad yo pensar en algo que es, de nuevo, sólo se siente muy diferente de C. Esto no es un valor. No es 5. Es sólo la propia función. Así que tan pronto como usted le da los parámetros, entonces usted realmente va a calcular un valor. MARIA ZLATKOVA: Y entonces usted puede llamar a la función y lo utilizan para conseguir un poco de valor. HANNAH BLUMBERG: Correcto. Exactamente. Sí. AUDIENCIA: Entonces, si sólo almacenarlo en la variable, como var x es igual a cantidad de dos values-- HANNAH BLUMBERG: Sí. Así que usted podría hacer var sum es igual a la suma de dos valores. Sí. ¿Alguna otra pregunta? Sí. AUDIENCIA: Pero haría que confundir suma y la suma? Al igual que si usted llama a su suma variable Cómo llamaría usted a la suma función? HANNAH BLUMBERG: Mm. Mm. Si usted hizo algo al igual que, la suma es igual a la suma de 2, 5? AUDIENCIA: Sí. HANNAH BLUMBERG: Creo que sería sobrescribir el valor de la suma. Así que otra interesante Lo que pasa JavaScript es que una sola variable puede tomar en un montón de diferentes tipos. Las malas prácticas. Usted no debe hacer algo como lo que acaba de decir. Pero en C, si i es igual a un número entero, sabemos que nunca es va a convertirse en una cadena. Este no es el caso en JavaScript. Sí, buena pregunta. ¿Algo más? Correcto. Hacer todo justo a tiempo. Mantener en marcha. Correcto. Si nos fijamos en un array en JavaScript, aquí está un ejemplo rápido de una matriz de cadenas. Y matrices pueden crecer dinámicamente. No tienen una tamaño fijo de la misma manera que lo hacen en C. Podemos acceder al elementos con sólo los corchetes. Eso se ve muy parecido a PHP y mucho como C, en el que podemos decir que, en este caso, si quería la palabra JavaScript, lo haría no arr corchetes con un 0, 1, 2. Y entonces, si usted recuerda en C cuando quería conseguir la longitud de una matriz, que era realmente molesto. Pero en JavaScript, super fácil. Todo lo que hacemos, .length. Le da las longitudes. Eso es. AUDIENCIA: Eso es simple. HANNAH BLUMBERG: Sí, hace su vida mucho más fácil. OK, no objeto-- allí. Objetos en JavaScript sensación mucho como estructuras en C y matrices asociativas en PHP. Así que lo que hemos visto una mucho es JSON, que es sinónimo de JavaScript Object Notation. Y es básicamente una manera de estructurar nuestros datos. Así que vamos a ver un ejemplo, probablemente el más fácil. Así que aquí está un ejemplo de un objeto que almacena la clase, CS50. Y cuando digo clase, me refiero por supuesto, No como-- sí, el curso, CS50. Y verás que todo en el objeto va a ser contenida entre llaves. Y empezamos a asociar nombres de campo o las teclas con los diferentes valores. Así que usted puede comenzar a ver cómo este tipo de se siente como una matriz asociativa en PHP. Así que vamos a asociar el campo o el nombre de clave, por supuesto, con la cadena, CS50. Vamos a tener un instructor. Vamos a tener TFS. Vamos a tener el número de conjuntos de procesadores y vamos haber grabado. Y una cosa fresca a destacar es todo estas cosas tienen diferentes tipos, y eso es totalmente bien. Está bien para un objeto, de hecho, que probablemente lo esperado para un objeto tener una combinación de cadenas y números y booleanos y arrays y todo lo que podría quiere tener dentro de su objeto. Y tenga en cuenta que estos van a ser los nombres o las llaves, y entonces sólo configurarlo igual con un poco de colon. AUDIENCIA: ¿Qué significa exactamente JSON? HANNAH BLUMBERG: ¿Qué exactamente qué significa JSON? JSON simplemente significa JavaScript Object Notation. Es sólo una manera de formatear. Sí. Es una manera de formatear nuestros datos. En C, es estructuras. En PHP, es matrices asociativas. En JavaScript, tenemos objetos. AUDIENCIA: Entonces CS50 es un objeto? HANNAH BLUMBERG: CS50 es el objeto en este caso. Ahora, ¿cómo hacer que realmente el acceso esos campos o cambiar esos campos. Por ejemplo, supongamos que decidimos que querías uno menos pset este semestre. En lugar de nueve, estamos sólo va a tener ocho. ¿Cómo podemos cambiar esto? Oh, de manera equivocada. Hay dos maneras en que podemos hacer eso. El número uno es con el punto notación y número dos es con la notación de corchetes. Así, por ejemplo, si querido cambiar o acceso el campo de conjuntos de procesadores en nuestro objeto CS50, lo que yo haría es CS50.psets, por lo que el nombre del objeto dot el nombre del campo o la tecla. Muy similar, es exactamente equivalente a hacer CS50, y luego entre corchetes, conjuntos de procesadores. ¿Guay? Sí. AUDIENCIA: Así es JSON técnicamente JavaScript, a pesar de que en los conjuntos de procesadores que separarlo cabo [inaudible]? HANNAH BLUMBERG: Claro. Entonces la pregunta es, son JavaScript y JSON equivalente? Así JSON es notación, básicamente, la forma en que escribimos un objeto de JavaScript. Así que no son exactamente lo mismo. Yo diría JavaScript, hay son objetos en JavaScript. JSON toma esos objetos y los imprime y los muestra o los almacena de una manera agradable. Así que JSON no es una programación lenguaje de la forma en que JavaScript está. Es sólo la notación para nuestros objetos en JavaScript. Sí. AUDIENCIA: Entonces, ¿qué [Inaudible] completar? HANNAH BLUMBERG: Claro. Así que esto en realidad no hace nada. Esto es sólo una forma de acceder. Así que digamos que queríamos cambiar el número de conjuntos de problemas nueve-ocho. Lo que hacemos es hacer algo como CS50.psets = 8 ;. Sí, buena pregunta. Esto es sólo para mostrar que la sintaxis. En realidad no hacer nada útil. ¿Alguna pregunta? La derecha móvil adelante. Así que vamos a ver un ejemplo rápido de cómo Trabaja JavaScript porque te dije que hace todas estas cosas geniales y nos permite modificar páginas web. Vamos a ver realmente en acción. Así que toma, por ejemplo, este archivo HTML. Y lo que quiero le permite centrarse en es esta etiqueta particular, que es un botón, con search_button Identificación. Es sólo en la página. Así que ahora vamos a ver qué en realidad podemos hacer. Bueno, supongamos que cuando hacer clic en ese botón, queremos hacer una alert-- ha hecho clic en el botón. Vamos a ver cómo podemos hacer eso. Así window.onload-- esto no es algo que has visto en clase, por lo tanto, no se necesita saber para la prueba. Pero esto básicamente dice, OK, llamada esta función cuando se carga la ventana. Así que eso es sólo un poco de código de configuración. No te preocupes tanto por eso. Lo que quiero que permite centrarse en está aquí. Decimos searchButton var es igual document.getElementById search_button. Así como usted puede imaginar, lo que esto hace es que dice, OK, ir a buscar el elemento con search_button ID. Y ahora tenemos que elemento real y estoy va a almacenar en un searchButton variable. Y ahora podemos realmente utilizar ese elemento y cambiarlo, o acceder a sus valores, cosas así. De hecho, podemos empezar a comprometerse con la página web. Así que aquí voy a decir, OK, ahora que tengo ese botón, cuando se hace clic, llamar a esta función anónima. Así que aquí es donde el anonimato funciones se vuelven útiles. ¿Y qué hace la función? Bueno, simplemente llama a esto función de alerta y dice, ha hecho clic en el botón Buscar. Entonces, ¿qué va a pasar si voy a donde quiera este código HTML vive y haga clic en el botón, Voy a buscar un poco de alerta de lujo que dice que ha hecho clic en el botón. Así que las cosas que se centran en aquí-- document.getElementById consigue un HTML particular, elemento con el ID dado. Y ahora podemos establecer lo que debería suceder cuando ese elemento en particular se hace clic. AUDIENCIA: Tenemos que poner todo eso en? HANNAH BLUMBERG: Lo siento? AUDIENCIA: ¿Tenemos que codificar físicamente todo eso? HANNAH BLUMBERG: ¿Tenemos que codificar físicamente todo eso? Sí. ¿No es esto un poco molesto? Se trata de una gran cantidad de código. AUDIENCIA: Usted podría importar algo. HANNAH BLUMBERG: Correcto. Podríamos usar algo. Y en particular: oh, es me dice que tengo que enseñar sección. En particular, vamos a utilizar la biblioteca jQuery, porque eso era realmente largo y muy molesto y quiero ser capaz de simplificarlo y hacerlo más corto y más fácil de escribir. Así que jQuery es una biblioteca JavaScript. Así que JavaScript está la programación idioma; jQuery es una biblioteca. Y hace un montón de cosas más fáciles. Hace que cambiar y va a través de un documento HTML mucho más fácil. Hace que los eventos de manipulación más fácil. Esto hace más fácil la animación y hace más fácil el Ajax. Así que vamos a saltar en dos de esas cosas ahora mismo. Disculpe me. Antes de hacerlo, algunas sintaxis básica. Esto es lo que más llama a la biblioteca jQuery parece. Utilizamos este dólar sign-- ninguna señal de conexión a PHP, inconvenient-- simplemente el nombre de una selector, punto, y luego una acción. Así que vamos a ver un poco de ejemplos concretos de eso. Así que esta realidad es la misma código de la diapositiva evento. Así que esta cosa larga, feo se convierte en esta mucho mejor, algo más pequeño. Así que vamos a tratar de descomponerlo. Esto dice, OK, jQuery-- este dólar sign-- jQuery, encontrarme la ventana. Así que ese es el selector. Cuando se carga, llame a esta función. Así que eso es todo por dentro. OKAY. ¿Hasta ahora, todo bien? Correcto. Ahora, jQuery, me la encuentre cosa con search_button ID. Y lo que se hace clic, llamar a esta función. Y entonces esta función de exactamente lo mismo. Solo hacer un poco de alerta, ha hecho clic en el botón Buscar. Así que es muy agradable. Realmente condensa y simplifica nuestro código. ¿Cómo sé que es search_button ID y no como clase search_button? AUDIENCIA: Hashtag? HANNAH BLUMBERG: Sí. Este símbolo de hash, es como CSS. Así que recuerda, con CSS, cuando querido seleccionar algo por ID, hemos utilizado el signo libra. Y cuando queríamos para seleccionar algo por clase, utilizamos el punto. Excelente. ¿Tener sentido? Así que se supone que jQuery acaba de hacer nuestra vida más fácil. Sí. AUDIENCIA: Así que estoy un poco confundido en cuanto para el funcionamiento de la función anónima. ¿Usted lo nombra este anonymouse función, la función? ¿Como se llama? HANNAH BLUMBERG: Claro. Así que la función es sólo una palabra clave que dice: Estoy a punto de definir una función. AUDIENCIA: ¡Oh, OK. HANNAH BLUMBERG: OK? Y luego le pasamos como argumento a-- echemos este uno-- interior para la función de clic. Así que sí, por lo que la función, esta función anónima, se convierte en un argumento real. Así que recuerde en JavaScript, que puede tratar funciones como valores. AUDIENCIA: ¡Oh, OK. HANNAH BLUMBERG: Sí. Me gusta que "oh". Agradable. ¿Otras preguntas? ¿Hora? MARIA ZLATKOVA: Good. Bueno. HANNAH BLUMBERG: Awesome. Algunos jQuery útil rápida. Yo no voy a ir a través de todos ellos. Estas diapositivas serán arriba en línea un poco más tarde, para que pueda comprobar que fuera un poco más tarde. Pero básicamente, el general patrón se mantiene en la que decimos, OK, bueno, jQuery, aquí está mi selector y entonces aquí es una acción. Y usted puede hacer cosas como el acceso al valor de un formulario, accede algo de HTML, control de lo que sucede cuando el usuario presenta una forma, cosas así. Sí. AUDIENCIA: Así que en el examen, vamos a necesitar saber bastante de la documentación de jQuery. Así que dado que copiar / pegar el jQuery documentación para nuestra hoja de trucos, ¿dónde está el límite? Como cuántos qué necesitamos saber? HANNAH BLUMBERG: Muy buena pregunta. La pregunta es esencialmente dado que no puede acceder a la documentación de jQuery durante la prueba, ¿cuánto debe ¿saber? No esperaríamos que vengas con alguna función aleatoria que se puede esperar para Google. Las cosas que son un blanco legítimo son lo haría decir sólo un poco de la sintaxis general, ser capaz de seleccionar y por ID por class-- así como CSS. Y entonces las funciones reales sí mismos, que lo más probable es que te dicen. Sí. AUDIENCIA: Entonces, cuando se selecciona por clase significaría punto. HANNAH BLUMBERG: Sí, exactamente. Bueno. Cuando se selecciona por clase, que va que se salpican en lugar del signo libra. Sí. AUDIENCIA: ¿Quieres que repasar la diferencia entre la selección por ID y por clase? HANNAH BLUMBERG: Claro. La diferencia entre seleccionar Identificación y seleccionando por clase. Así como dijo Maria a poco antes, hay Sólo puede haber un elemento HTML con una identificación dada, mientras que la clase, nos permite agrupar un montón de diferentes elementos juntos, así que las cosas que se relacionan, pero no exactamente lo mismo. ¿Eso responde a la pregunta? Impresionante. Sí. AUDIENCIA: ¿Qué pasa si usted tiene múltiples cosas que están en la misma clase? HANNAH BLUMBERG: ¿Qué sucede si tiene varias cosas que son la misma clase? Así, por ejemplo, si estamos simplemente usando JavaScript puro, nos gustaría hacer algo como document.getElementsByClass. Y entonces lo que realmente hace es Devuelve una matriz de elementos. Y hay que cualquiera iterar sobre ellos o encontrar cuál de ellos desea. No va a dar que un solo elemento. Se va a dar una matriz de elementos. Muy buena pregunta. ¿Algo más? Impresionante. Así que creo que si estás familiarizado con cualquier jQuery que viste en el conjunto de procesadores, Usted debe ser bueno para ir. ¿Pregunta? Oh, no. Realmente tengo que enseñar. Relájese. Estará bien. Voy a llegar. Vamos a hablar de Ajax. Así Ajax va a ser A-- así, vamos a empezar con lo que representa. Es un acrónimo. Significa asíncrona JavaScript y XML. Y XML es básicamente va a ser [Inaudible] con un tipo de nuestros datos. Pero no hemos realmente utilizado XML. En lugar de ello, sólo tiene que utilizar JSON. Así que, básicamente, es algunas data-- asíncrono, JavaScript, y datos, en este caso, JSON. Y nuestro objetivo, como hemos mencionado un poco antes, es ser capaz de hacer una solicitud, ha hacer esa petición su hora de la fondo, pero siguen hacer lo que estábamos intención de hacer. Y luego, cuando esa información es listo, entonces vamos a incorporarlo. Así que vamos a ver lo que este en realidad parece. Y esto, usted debería ser un poco familiarizado desde pset8, el que usted acaba de cumplir en. Así que aquí está un jQuery válida función que podríamos quieren saber sobre-- este signo dólar. Por lo que dice la función jQuery, .getJson. ¿Y qué hace esta función es realiza un URL y algunos parameters-- así que creo que en el caso de pset8, era como, la URL era articles.php y la parámetros ha sido GO = algo de código postal. Y dice, bien, hacer una petición a este URL con los parámetros dados. Y eso sólo pasa. Cuando termine, es ya sea va a completar con éxito o que va a fallar. Así que este es el equivalente de llamada Rob y le pide que haga algo. Y luego, cuando vuelve a llamar, está bien va a decir que he terminado o fallé. Así que en el caso de que usted es hecho, dices, OK, he terminado. Y entonces se llama a esta función. En este caso, va a ser un función que toma un poco de información. El que nos preocupamos por lo general es de datos, los datos que en realidad estábamos volvimos como resultado de la llamada .getJSON. Y usted puede hacer algo con él. Así que en el caso de pset8, exhibimos como una lista. Falla va a ser una función eso se llama si falla la petición por cualquier razón. Y en el caso de pset8, acabamos console.log ella. Para cualquier duda sobre eso? Sí. AUDIENCIA: ¿Podemos utilizar la función theta en lugar de la función, textStatus, jqHXR. HANNAH BLUMBERG: Claro. Así que sí, creo que en el conjunto de procesadores, que acabamos de ver los datos de la función. Así que es sólo el-- sí, en Aceptar. Eso es lo que vimos en el conjunto de procesadores. Eso es totalmente bien. Estos son sólo si querías para sacar más información, estas son las cosas que usted podría conseguir de .getJSON. Buena pregunta. ¿Algo más? Sí. AUDIENCIA: Entonces .getJSON es Ajax? HANNAH BLUMBERG: OK. Así que este es el tipo de parte difícil. Es una función jQuery que permite usted pueda hacer llamadas asíncronas. Y esas llamadas asincrónicas, eso es lo que hemos estado refiriendo como Ajax. Sí. Eso me llevó un tiempo muy largo para separe cuando yo era un estudiante. AUDIENCIA: ¿Puedes decir eso otra vez? HANNAH BLUMBERG: Sí. ¿Puedo decir eso otra vez? Esta función .getJSON, es una función jQuery. Y que va a hacer una llamada asincrónica. Y estas llamadas asincrónicas, hemos se refiere a aquellos como el Ajax. ¿Alguna otra pregunta? Tenemos sólo un par de minutos para el final. Y María va a terminar con la seguridad y luego nos vamos que se trata sólo de hacer. MARIA ZLATKOVA: Awesome, OK. Así que esto es-- sólo toma un par de segundos para mirar por encima de este. Y esto no es algo realmente grande. Y alguien puede decirme por qué? ¿Qué está pasando en foo y podrá pudo potencialmente resultar en algo malo, y cómo se llama? Sí. AUDIENCIA: Si el argumento de que es aprobada en más de 12 personajes, podría desbordarse. MARIA ZLATKOVA: Correcto. Perfecto. ¿Cómo se llama? Usted acaba de mencionar que. AUDIENCIA: Desbordamiento de búfer. MARIA ZLATKOVA: Sí, buffer overflow. Así que esto es algo que nosotros referirse como desbordamiento de búfer. Y vemos que dentro de foo, hemos definido nuestro buffer, c, con un tamaño de 12. Sin embargo, en principal, no lo hacemos comprobar de ninguna manera en absoluto si el argv1-- de manera que fue el segundo argumento. No comprobamos si el tamaño de la misma es apropiada. Así que si teníamos un usuario especialmente malicioso que poner en un cierto argumento de que era más de 12, y luego potencialmente más allá de los límites de esa argumento, tenía algo de código ejecutable que él estaba tratando de hacer algo malo con ello; luego de esto, lo que sucedería, anularía el retorno dirección de la función foo, haciendo que la función para cuando volver a ejecutar ese código. Y entonces las cosas malas pueden suceder. ¿Tiene esto sentido para todo el mundo? ¿Y cómo podemos proteger contra esto? ¿Alguna sugerencia? Básicamente, en el interior de potencialmente foo, cómo podemos comprobar para asegurarse que eso no puede suceder? AUDIENCIA: Si se excede el tamaño 12, usted asignar memoria adicional? MARIA ZLATKOVA: Sugerencia es, asignar memoria adicional del tamaño excedida. En realidad, podemos hacer algo un mucho más simple que eso. Sólo podemos obtener la longitud de la cadena del argumento que se introduce, comprobar si es menos que o igual a 12-- que es lo que queremos que ser porque no queremos que exceda de los límites de nuestro buffer. Y luego, si no lo hace, nos puede trabajar con el argumento. Y luego, si lo hace, realmente queremos a Yello potencialmente en el usuario. Pero así es como lo haríamos eso. Sí. AUDIENCIA: ¿Podría usted explicar rápida verdadera memcpy? MARIA ZLATKOVA: Oh, lo siento. Sí. Memcpy toma lo es-- lo siento, OK. Memcpy toma lo que sea en la barra, lo que sea se pasa en foo como el argumento de la línea de comandos. Así que va a tomar argv1. Argv1 se llama bar aquí. Así que va a tomar bar y que va a copiar en c. AUDIENCIA: OK. MARIA ZLATKOVA: Y va a copy-- el tercer argumento simplemente se refiere a lo mucho que va a copiar en c. AUDIENCIA: Ah. Así que de éste copia todos de la misma a continuación. MARIA ZLATKOVA: Sí, está copiando todo. Sí. En primer lugar, nos aseguramos de que la barra no es igual a NULL porque es un puntero. Luego tenemos la longitud de la cadena de la barra. Nos aseguramos de que es menos de o igual a 12. Y luego porque hemos asegurado, podemos realidad memcpy y estar seguro de que eso está bien. ¿Alguna pregunta? Excelente. Tengo dos preguntas de verdadero o falso. ¿Puede alguien decirme de inmediato si son verdaderas o falsas? Sí, es falso. Exactamente. Ambos son falsas. Así, utilizando una sola contraseña Nunca es buena idea porque si alguien sabe su contraseña, pueden simplemente acceder a todas sus otras cuentas. Y luego iconos hacen nada para garantizar la seguridad. Generalmente Debemos buscar HTTPS en lugar de HTTP y la URL. Y algunos otros tipos de ataques que hemos mencionado, que David ha mencionado en dar una conferencia, los ataques de inyección SQL. Ya vimos que si no-- la Función de consulta CS50 se asegura de que SQL no pueden producirse ataques de inyección. Pero si no estábamos usando CS50, Lo dijeron ellos "en consulta" habría que asegurarse de que el la entrada del usuario no es en realidad algunos SQL consulta que hará que todos los nuestras mesas que se retiren o algo malo ocurrir con nuestra base de datos. Secuestro de sesión es otro tipo de ataque esto sucede cuando algún mal persona utiliza la sesión de alguna víctima ID para acceder a la información de acceso. Así, un ejemplo muy trivial de que es como si tenemos un ordenador público, entonces la mala persona abre una sesión y después tienen galletas que se guardan. Y las cookies no cambian para la sesión. Luego tenemos la víctima entrar y luego iniciar sesión en el sitio web. Las cookies no cambian durante un cierto período de sesiones. Y entonces la víctima se registra en la página web y luego se va. Y entonces la persona que se remonta a continuación, puede seguir utilizando su ID de sesión para acceder a su información. Así que eso es un ejemplo de lo que podría suceder. Y entonces yo no me preocuparía demasiado sobre el código ni nada específico así que podría causar esto, pero tener algún tipo de idea de lo que las variables involucradas en esta son. Y entonces la manipulación de cabecera datos es otro tipo de ataque que tiene David ha hablado. Y que sólo se refiere a lo que puede suceder cuando la respuesta, el HTTP respuesta dentro de nuestra cabecera no está desinfectado adecuadamente. Y cualquiera de los fields-- por ejemplo, si alguien sobrescribe una de la cabecera valores que contienen nada más lo que deben contain-- y realidad contener, por ejemplo, un 200 Aceptar código de estado, entonces podrían hacer malicioso cosas cuando no se supone que. Pero yo no me preocuparía demasiado mucho sobre el código específico que pueden implicar que esto, sólo una especie de entendimiento cosas de alto nivel así. Creo que esto es todo que tenemos que cubrir. Impresionante. ¿Alguien tiene alguna pregunta sobre cualquier de las cosas que cubrimos? Sí. AUDIENCIA: Así que una especie de pregunta más logístico. ¿El contenido se centró principalmente en las cosas después de concurso 1? MARIA ZLATKOVA: Así pregunta es, es el contenido centrado principalmente en las cosas según cuestionario 1? Por lo tanto el foco está en después de cuestionario 1, con la excepción que tenemos que centrarnos en las cosas en pset5 y muchas de las estructuras de datos que cubrimos. Y no podemos decir que estamos puede ignorar nada antes que debido a que se basa en ella también. Así que concéntrate en eso, además de material de pset5 como incluir enlaces listas, pilas, colas, y todo que Hannah se acercó. HANNAH BLUMBERG: Correcto. Sí, nos fuimos todas las cosas C en el principio, muy rápidamente. Pero asegúrese de revisar eso. Volver atrás y ver el cuestionario 0 opinión. Un par notas más logísticos, solo mientras nosotros tenemos su atención. Vamos a tener horas de oficina tanto el lunes y el martes por la noche. Ellos van a estar en MD 119. Esto es todo en el sitio web, por lo que si usted no oye, no se preocupe. MARIA ZLATKOVA 8:30 a 11:00. HANNAH BLUMBERG: Sí, de 8:30 a 11:00. Estaremos ahí. Estaremos allí para responder preguntas. Es bastante frío y divertido. Ustedes pueden hacer cualquier pregunta que tiene en concurso 1. Y prueba 1 está en Miércoles, así que buena suerte. Si usted tiene alguna pregunta, tal vez venir a hablar con nosotros aquí uno a uno. Guay. Muchas gracias. MARIA ZLATKOVA: Muchas gracias, chicos. AUDIENCIA: Yay. [APLAUSOS]