DAVID MALAN: Muy bien, estamos de vuelta. Así que por el apasionante Para concluir, la última sección en la programación web, que me Pensamos que lo usamos como un término general para capturar algunos de los temas restantes. Así que al final de la día, vamos a hacer realidad un poco de práctica en la programación web con un lenguaje llamado JavaScript. Y creo que vamos a echar un vistazo en algo relacionado con imágenes y el descubrimiento de algo secreto oculto en una imagen, y también echar un vistazo a la Google Maps API, programación de aplicaciones interfaz, como algo representativo del tipo de software eso es cada vez más y libremente disponibles en la actualidad. Pero, ¿por qué no echar un vistazo en un ingrediente a este mundo que hemos tipo de estado dando por sentado que existe durante algún tiempo, una base de datos. Durante el último día y medio hemos asumido que tenemos acceso a una base de datos, pero ¿Qué problema se resuelve de una base de datos? ¿Qué hace por nosotros? ¿Qué es? AUDIENCIA: [inaudible] DAVID MALAN: puede contener toda la información, OK, y qué tipo de información podrías poner en él? AUDIENCIA: [inaudible] DAVID MALAN: Cualquier información se pone en ella, que pondremos en contacto. Eso es verdad. Y en un sitio basado en la web o en la web típica aplicación, qué tipo de información, En concreto, puede ser que le pondrá en? AUDIENCIA: [inaudible] DAVID MALAN: Usuarios. Entonces, ¿qué es un usuario? AUDIENCIA: [inaudible] DAVID MALAN: OK, registrado usuario del sitio. Y lo que quiere decir la información del almacén de los usuarios? Lo compone un usuario? Un usuario tiene qué? AUDIENCIA: [inaudible] DAVID MALAN: Sí, personales datos, y eso me gusta. Vamos a ser más preciso. Así, un usuario típicamente tiene un nombre, ¿qué otra cosa que un usuario podría tener? AUDIENCIA: [inaudible] DAVID MALAN: Un Aceptar addr--, por lo que el nombre, apellido. Eso es bueno. En realidad, vamos a arreglar que, debido a que va para abrir una oportunidad para discusión, aún así, aún más. En primer nombre, apellido, sexo. Un ID de algún tipo. ¿Qué más? Oí otra cosa antes, también. Un correo electrónico, dirección postal. Así que vamos a hacer una pausa allí y ahora consideran no lo que estamos almacenando en la base de datos, Pero-- y por qué no, ya que es tal vez obvio que una vez que se registra un usuario, quieres recordar que desde hace algún tiempo. Usted no quiere que se simplemente ser almacenados en la memoria RAM y ser así forgotten-- vamos a centrarnos en el cómo. Resulta que en el mundo de las bases de datos, hay al menos dos tipos de estos días. Algo que se llama una base de datos SQL, Lenguaje de consulta estructurado, o, cutely llamado, NoSQL, que no es SQL. Y el último es una ejemplo de lo que podría ser llamado un objeto-orientado, o un almacén de objetos, una base de datos que almacena objetos, y no, excusa yo, como pronto veremos, filas. Por lo tanto nos centraremos en un momento en el primero de éstos, a saber, una SQL base de datos, aunque sólo sea porque es ya tan familiar, a cualquiera que ha utilizado o Excel Hojas de Google o Apple Números o cualquier norma hoja de cálculo, o, de manera equivalente, o más sofisticado, algo así como Microsoft El acceso u Oracle o MySQL o PostgreSQL, todos los cuales son los nombres de productos para las implementaciones de la siguiente idea. Una base de datos relacional es simplemente algo que tiene filas y columnas. Y por filas y columnas, Me refiero a algo, literalmente, de esta manera, así que donde podríamos tener la nombre de un campo y su tipo por aquí. Y, de hecho, me dejó Ahora empezar a mapear estos. Así que en realidad, no sé Por eso hice un gráfico separado. Vamos a mantener este sencillo. Tenemos aquí la inicios de nuestra mesa, donde este es el nombre del campo y este es el tipo de datos, y por tipo me refiero a lo siguiente. Es un número, que es una cadena, una cadena corta como una palabra, se trata de un párrafo, que es datos binarios, como una imagen? Y vamos a burlan de esta separados sólo por un momento. Así que, primero nombre, número, cadena, gran parte de texto-- AUDIENCIA: [inaudible] DAVID MALAN: Sí, así cadena. Y en un contexto de base de datos, vamos a suelen llamar a este campo carbón. Sólo voy a decir Char por ahora, pero estamos va a perfeccionar esto en un momento. campo de caracteres. Apellido probablemente la misma. ¿Género? Hombre o mujer, por lo que podría ser un campo Char. Podría ser cualquiera cita, fin de la cita "Macho" o una cita, fin de la cita "hembra" o podría ser m o f. Si quieres ser más inclusiva, es posible que necesite un tercer valor o algún otro tipo de campo completo. Y lo que podría utilizar verdadero falso. El campo podría ser llamado macho, y entonces se podría decir verdadero o falso. Pero eso no significa necesariamente captura toda la información que desee. Así que resulta que hay otro tipo de de campo que podría ser útil aquí en una base de datos típica, llamada enum, donde es un campo de caracteres, pero, el diseñador, para obtener enumerar los posibles valores, como dijeron ellos "macho", cita, Fin de la cita "hembra" y así sucesivamente. Así que cualquiera que sea el valor está en su base de datos, es de hecho basada en caracteres, pero tiene que ser uno de esos valores. Es probable que no quieren una enumeración para el nombre o el apellido. De lo contrario tendríamos enumerar, como su nombre se deriva de, literalmente, cada posible primer nombre y apellido. OK, así ID cuál debe ser una identificación? Sí, así que tal vez un número. Así que vamos a seguir con que, por ahora, el número. Y por número, el número es un poco demasiado amplia ahora. Para el final de la segunda día, me siento como si debería ser un poco más preciso. Número podría significar similares, podría ser algo así como 1.236. Y eso no es probable lo que entendemos por una identificación. ¿Qué es probable que entendemos por una identificación? AUDIENCIA: [inaudible] DAVID MALAN: Oh, está bien, por lo tal vez ni siquiera es un número. Tal vez en realidad es un identificador único eso es una cadena, como un nombre de usuario. Tan absolutamente, que podría ser. Creo que alguien probablemente significado numérico, sin embargo. Así que vamos a quedarnos con eso. ¿Qué tipo de número? ¿Qué es un número entero más precise-- una. Así un número como 0, 1, 2, 3, por lo que vamos a llamar a este un número entero. Y aun así, pude se acaba aburriendo, es No realmente sólo una entero en general que desee. Es probable que no desea que los valores negativos, sólo porque, sólo se siente raro. Es posible que desee enteros positivos. Así también se puede expresar que, en una base de datos, pero por ahora, vamos a decir entero. ¿Email? Esta es probablemente una solo-- qué? AUDIENCIA: [inaudible] DAVID MALAN: Es un correo electrónico, pero eso es caracteres, ¿verdad? Sólo tiene un carácter moderno como un símbolo "a" o alguna otra cosa, pero sigue siendo un campo de caracteres. Y la dirección postal? campo de caracteres. Así que eso es un buen comienzo, pero vamos a ser un poco más preciso momento. Así resulta que en una base de datos, a menudo tienen derecho a elegir la más refinada versiones de estas cosas. De hecho, en una base de datos típica de SQL, SQL, o más en general, bases de datos relacionales, bases de datos con filas y columnas, que a menudo llegar a especificar no sólo el tipo de la field-- permítanme hacer algunas aquí-- habitación sino también la longitud. ¿Cuánto tiempo es un nombre de pila? Creo, D-A-V-me-D. OK, lo tengo yo Probablemente sólo ofendido como la mitad de las personas en la sala, a la derecha, ya que sus nombres son más de cinco cartas, por lo que cinco parece un poco egoísta e ingenuo, así que cuál es un mejor valor? 10, de acuerdo, y creo estamos bien en la habitación. 13? 30? ¿Por qué no me tomo la enfoque de antes, cuando nos estaban hablando acerca de las matrices y de la memoria? ¿Por qué no me acaba de decir como 1.000? El nombre de nadie va para ser más largo que 1000. Hacer retroceder. AUDIENCIA: [inaudible] DAVID MALAN: Sí, es despilfarro, a la derecha, sobre todo Sólo cinco o 10 si la mayoría de los nombres son o 15 caracteres, eso es un gran desperdicio. Así que ya saben qué? Esta es una pregunta un poco difícil. Ahora, sin duda podemos analizar Inglés y los nombres de cualquier otro idioma y averiguar, así, ¿cuál es la average-- promedio en realidad no ayudar a nosotros-- lo que es el máximo es Probablemente lo que realmente queremos. Pero resulta que incluso tenemos alguna opción sobre el tipo aquí. En una base de datos típica de SQL, haber algo que se llama un campo Char y también un varchar, V-A-R, para el campo carbón variable. Y la diferencia es la siguiente. Un campo char, que el diseñador, tiene que especificar por adelantado la longitud exacta del campo. Así que tal vez el primer nombre al igual que 20 se siente tipo de seguro. Podría tener que hacer algunas google para ver si eso es suficiente realmente segura. Probablemente hay un nombre con 21 personajes, pero por ahora, supongamos 20 es seguro. Un campo Char implicaría en una base de datos que están usando los 20 y los 20 caracteres siempre. Ahora si es sólo D-A-V-me-D, 15 de los son sólo va a ser caracteres en blanco, pero usted todavía está utilizando los 20 bytes. Un campo varchar, por el contrario, los medios de cadena debe ser de hasta 20 caracteres pero si es sólo cinco, sólo se va a utilizar cinco, seis o tal vez para una valor especial al final, al igual que 0 que discutimos significa el final de un carácter secuencia en la memoria. Así que ¿cuándo cree usted puede optar por Char frente varchar, dado que el comercio-off? Char utiliza ese número de caracteres, varchar utiliza no más de ese número de caracteres. AUDIENCIA: [inaudible] DAVID MALAN: OK, cuando se conoce el longitud de la cadena bastante convincente utilizar sólo carbón de leña, porque si usted lo sepa, sólo hay que poner abajo. Y tal vez eso es cierto para un cierre de cremallera código, en los EE.UU., al menos, 02138, que siempre va a ser de cinco caracteres hasta que se agrega el tablero cuatro. Sin embargo, es posible que tenga algunos valores para que siempre conoce la longitud. O tal vez los símbolos del Estado, al igual que Nueva York a Nueva York, y MA de Massachusetts en los EE.UU.. Tal vez usted tiene algunas situaciones cuando eso es totalmente razonable, sino por esa lógica, ¿por qué incluso overthinking esto? ¿Por qué no sólo tiene que utilizar varchar y luego sólo tendremos siempre a dos personajes de todos modos, o utilice siempre cinco caracteres de todos modos? ¿Por qué no sólo ahorrar para varchar todo, por esa lógica? Tiene que haber una trampa. AUDIENCIA: [inaudible] DAVID MALAN: Could escribir algo mal. Así que eso es cierto. Pero incluso entonces, no pueden utilizar más memoria que asigno. Todavía tengo la final decir sobre la longitud, lo que no pueden hacer por accidente ese error, pero es un buen pensamiento. Es más sutil, pero es muy relacionada a nuestra discusión, en realidad, de las matrices y listas enlazadas anterior. Resulta que una base de datos, si se sabe que todos los valores son de una longitud fija, incluso si algunos de esos valores están en blanco, tipo de estética en blanco, D-A-V-I-D y luego 15 espacios en blanco, resulta que si cada campo es la misma longitud, al igual que una serie tenían todas sus cosas espalda con espalda con espalda con espalda de manera que usted podría apenas más 1 para llegar a la siguiente valor, la misma idea en una tabla de base de datos. Si la totalidad de su carácter cuerdas tienen la misma longitud, usted tiene lo que se llama acceso aleatorio. Si todas las cadenas son de longitud 20, no lo hace solo ver más 1 que acaba de hacer más 20, más 20, más 20, más 20, y puede desplazarse muy rápidamente a través o buscar a través de todos sus datos. Un campo Char variables, por el contrario, no siempre tiene 20 caracteres. Podría tener 20 y luego 15 y luego 19 y luego 10, y por lo que si desea buscar a través de él, no se puede simplemente ciegamente añadir 20 bytes para llegar a la siguiente. Usted, literalmente, tiene que buscar a través de debido a que el borde de la estructura de datos, si se quiere, es desigual. En cierto modo se entra y se basa fuera de la longitud real de la cadena. Así que cuando se conoce la longitud, como se Kareem dice, utilice un campo char, porque ganas esa eficiencia de estar capaz de buscar a través de ella más rápido cuando usted está buscando para los datos, de lo contrario usar una variable. Por desgracia, no tengo buena respuesta al tiempo que el nombre debería ser, pero para algo como un nombre, diría un varchar es común porque no va ser una longitud fija para todos. 20, no sé, 20 se siente un poco apretado. Digamos 50, 50. En realidad, no le costará que mucho más que decir 50 en lugar de 40, pero en algún punto, es necesario para hacer una llamada de juicio. Muy común, francamente, para [? histórico ?] razones, aunque es excesiva, es decir 255, porque hace algún tiempo, en los sistemas de bases de datos populares, como MySQL, una herramienta de código abierto que una gran cantidad de empresas incluso como Facebook utiliza, este fue el máximo predeterminado así que la gente se fue con él. Por lo tanto, no es descabellado, pero vamos a utilizar un poco más de la intuición y dicen, seguro de 50, que es probablemente un poco excesivo. Género, me gusta enumeración, por lo que, por tanto, puede enumerar hombre o mujer, o tal vez de manera más eficiente, M o F o alguna otra simbología, pero enumeración se siente como una buena elección allí. Para ser claros, el género podría ser simplemente un varchar Y podríamos simplemente todo acordar la gente es tan bonito, poner siempre los mismos valores allí. Hombre o mujer o lo que sea. Pero el problema, entonces, es que podríamos cometer un error, ya que [inaudible] propuesta anteriormente en un contexto diferente. Si hacemos un error, podríamos obtener valores incorrectos en nuestra base de datos. Así que lo bueno de las bases de datos como Oracle y MySQL y otros, es que usted tiene esta última capa de defensa, donde el administrador del DBA, bases de datos, quien es el diseño de esta tabla como si son verbalmente, podría poner en su lugar una enumeración que protege contra la que especificando hombres, mujeres, y para que nadie lo demás ningún programador puede accidentalmente insertar cualquier otro valor. Por lo que esta sería una buena cosa. Esta es una característica. Por lo tanto una identificación, suponiendo un ID numérico, probablemente debería ser un número entero positivo. Y a veces tienen oportunidad de discutir longitud. Usted no lo haría normalmente especifique un número aquí, debe en su lugar especifique este es un int, o una gran int, ya que son normalmente llamada. Pero por lo general, un número entero sería, digamos, 4 bytes. Y si se trata de 4 bytes, esa es la cantidad de bits? AUDIENCIA: [inaudible] DAVID MALAN: 32 bits. Entonces, ¿cuántos usuarios podemos tener en nuestra base de datos si todos ellos tienen un ID y esta identificación tiene que ser único? 32 bits significa que tenemos patrones de uno, dos, tres, cuatro, five-- por lo que el número de patrones diferentes de ceros y los que se tienen si hay 32? Eso es lo mismo que pidiendo lo que es dos a la 32? Es un número grande que Yo no puedo hacerlo bien, pero sé que es más o menos 4 mil millones. Así que esto significa que su tabla de base de datos puede tener cuatro mil millones de usuarios y eso es todo. Así que esta es una interesante implicación de diseño. Un buen número de empresas han decidido, tal vez no tanto para su tabla de usuarios, ya que tener 4 mil millones de usuarios es un problema poco frecuente. Esta es una especie de estilo Facebook problema, no es un problema típico empresa. Pero tal vez si tiene registros de transacciones o algún tipo de datos que constantemente que se escribe en la base de datos absolutamente que podría tener miles de millones y miles de millones de filas, y utiliza un entero para ella, lo que va a ocurrir tan pronto como sea se llega a la fila número 4 mil millones y luego intenta insertar el 4000000000o y 1, por así decirlo? Estoy simplificando los números de un bit. Se puede recortar, quiero decir que que manejar de alguna manera. Y lo que es un equipo típicamente hacer, pensar en ello, incluso desde esta mañana, si tiene un valor de 4 bits como 1, 1, 1, 1, que, sólo para atar la mañana junto a la tarde, lo Qué representa este número en binario? OK, vamos a hacer que sea más fácil. ¿Qué significa este número representar en binario? OK, vamos a hacer que sea más fácil, lo esto representa en binario? AUDIENCIA: Tres. DAVID MALAN: Tres, porque tenemos los column-- [RISA] ¡Uf! Tuvimos columna de las unidades y la columna de dos en dos. Así que supongamos que, en efecto, nuestra [? dentro del cuadro?] no eran de 32 bits, pero eran dos bits, podemos contar desde el número 0, 1, 2, 3 de usuario, y entonces estamos tipo de volver al usuario 00 de nuevo. Así que esto es lo que ocurre normalmente. Si alguna vez has escuchado la expresión-- probablemente no tendrá, pero si tener-- desbordamiento de entero, donde mantener a mover de un tirón todo de las brocas siendo los mayores valores posibles, y luego estás fuera de bits, lo que suele suceder? ¿Por qué digo 00? Bueno, esto es tres. ¿Cómo represento a 4? ¿Cómo represento a la para el número 4 en binario? AUDIENCIA: [inaudible] DAVID MALAN: One-- sí, no dicen 100 per se, porque tiene el mal connotación, pero 1-0-0. De manera que el número 1-0-0 es de hecho correcta, pero si sólo tiene dos bits, lo que realmente han hecho? Usted ha volcado en 00. Y de hecho, eso es lo que sucedería. En realidad, se puede pensar de esto más familiarmente. Si recuerdan, lo que, Hace 16 años, el mundo se suponía que terminará cuando el problema Y2K sucedió. ¿Por qué fue eso? Así, la mayoría de las computadoras para decisiones razonables, fueron el almacenamiento de números como el el año 1975 o el año 1999 sólo por el uso de dos dígitos en la memoria del ordenador. Así que, por supuesto, lo que sucede cuando llegue al año 2000, vas a este, o mejor dicho, sí. Así que ir hasta el año 2000, pero si sólo está utilizando dos dígitos que parece al igual que el año 00 y por lo que ha volcó. Y esta es la razón por un montón de sistemas había que actualizar en el momento. Así que una vez dicho esto, compañías como Facebook tropezado con esto. Así que la única manera de manejar la situación, francamente, es anticiparse a él. O la forma más limpia de manejar esta situación es de prever que por lo que no lo hace tener que hacer cambios más adelante. Así que en lugar de 8 bytes, ¿sabes qué? Voy a estar orientada hacia el pensamiento aquí, aunque es un poco más optimista que vamos a tener 4 mil millones y 1 usuarios en nuestro sitio web. Pero vamos a utilizar 8 bytes, o 64 bits, lo que sería en general llama un entero grande, muy técnico. Y eso significa que puede tener incluso más dígitos en su número. Pero este es un importante decisión de diseño, porque si se elige un número que tiene muy pocos bits de expresividad en realidad se podría crear un error en el software. Muy bien, así que vamos a envolver hasta con el correo electrónico y dirección postal. Así correo electrónico, ¿cuánto tiempo debe una dirección de correo electrónico sea? 50. Realmente, no tengo ni idea, pero es Probablemente algo por el estilo, porque de lo contrario nadie va a escribir si hace demasiado largo, por lo 50, vamos a ir con todo por ahora. dirección postal, ¿cuánto tiempo se debe? AUDIENCIA: [inaudible] DAVID MALAN: No es sólo un código postal, sin embargo. dirección postal, oí. Así que esto es como 1 Brattle Square, coma, Cambridge Mass., coma, 02138. Y, de hecho, me dejaron de tirar un poco de hoja de cálculo aquí. Esto se siente como si fuera una oportunidad perdida. Si tenemos 1 Brattle Square, coma, Cambridge, MA 02138, Siento que podemos hacerlo mejor que sólo la dirección postal. ¿Por qué no explotan esto un poco? ¿Qué consigo a? ¿Qué debemos tener lugar para nuestras filas aquí, tal vez? AUDIENCIA: [inaudible] DAVID MALAN: Sí, así que vamos a llamarlo street_number, y un guión es sólo una común manera de tener lo que parece ser un espacio, pero no es, en realidad. Calle y, a continuación, ciudad-- lo siento? AUDIENCIA: [inaudible] DAVID MALAN: Podríamos hacer eso. Una línea, la línea dos. ¿Por qué no vamos a seguir simple por ahora, pero eso es absolutamente una decisión aceptable. Y en el estado, y luego dejar de ser un poco centrado en Estados Unidos por ahora y sólo hacer código postal, sólo porque que va a dar lugar a un error interesante o problema aquí. Así que supongo que es ahora nuestra dirección. Es un poco más molesto que tenemos todas estas más campos, pero ahora podemos etiquetar las cosas un poco mejor. Así que ahora el número de la calle, probablemente, no debe ser un char, habría de hacerlo? Lo que debería ser? AUDIENCIA: [inaudible] DAVID MALAN: Tal vez, una serie como un número entero de nuevo? Un gran número entero? Es probable que no vive a 4 mil millones de Main Street o algo así de loco. Así entero es probablemente muy bien, pero no tiene a nadie Ha vivido alguna vez en una dirección como 1A Brattle Square, o 1 y 1/2? Estas cosas existen, por desgracia, incluso si usted no ha vivido allí, existen estas anomalías como 1A apartamento, 1B, 1C. Así que ya sabes lo que, probablemente no debe ir con número entero, de lo contrario vamos perder algunas ventas. Char campo, tal vez? No sé cuánto tiempo. Es probable que no va a ser tanto tiempo, por lo que 10 o algo así. Nadie va a escribir un número más largo, tal vez. Pero, de nuevo, probablemente deberíamos pensar más en eso. Tal vez google, hacer algunas investigaciones, pero vamos a ir con nuestras entrañas por ahora. Calles, char, 50, no sé. En algún momento, nadie va escribirlo en un sobre, también, así que es probable que haya algunos límites superiores allí. Ciudad, mismo, seguro, por lo que la charla 50. Estado, puede ser centrado en Estados Unidos por ahora. Por lo que podría ser una lista, tan amable de una cuestión de criterio, estado. Podría ser como dos caracteres. Así que en realidad, tal vez, yo decía carbón. Probablemente decir varchar sólo para algunos eficiencia, pero vamos a volver a esa decisión en un momento. Podría ser un char de longitud 2 para el estado. Si en los EE.UU. tienen, como MA, Massachusetts, Nueva York, Nueva York, Nueva Jersey, Nueva Jersey, y así sucesivamente. Por lo tanto, podría ser fijado en eso. DC para Washington DC. Pero creo que, Olivier, que propuesto otro enfoque. AUDIENCIA: [inaudible] DAVID MALAN: Sí, lo que es una poco molesto para escribir, pero una enumeración podría tener más sentido, porque de esta manera, al menos en los EE.UU., usted podría enumerar, si tediosa, pero lo hace sólo una vez en su base de datos y nunca más tendrá que pensar que, los 50 códigos de dos caracteres. Por eso me gusta enumeración. Quedémonos con que hay, porque que tipo de hace cumplir más rigor. Y luego zip código? Creo que Andrew tenía un pensamiento en ese AUDIENCIA: [inaudible] DAVID MALAN: Sí, cinco o nueve. Vamos a mantenerlo simple. Sólo hacer cinco por ahora. Pero tal vez sólo podía hacer un número entero, ¿verdad? Podría, pero sabes qué, me hizo este error una vez, en algún sentido. Hace años, yo estaba migrando desde Microsoft Outlook a Gmail, y Outlook tiene una manera de exportar todos los contactos como un archivo de Excel, un archivo CSV, separados por comas archivo de valores. Y cometí el error, me pensar, de doble clic en él, una vez que he descargado la exportación, a asegúrese de que parecía que yo esperaba. Debo haber golpeado Guardar o deje guardado automático patada en o algo así. Porque cuando luego importados en Gmail, todo funcionó. Pero durante años, hasta nuestros días, y Hice esto hace cinco o 10 años, Todavía estoy encontrando amigos que tienen direcciones que parecen esto. ¿Por qué? AUDIENCIA: [inaudible] DAVID MALAN: Tomó el 0, bueno, más bien, tomó todo el código postal como un número, y por lo tanto es un 0 que significa no tiene ningún significado. Y así, 2138 parece ser mi código postal. Y esto es, francamente, un molesto Excel posibilidad por la cual creo que de forma predeterminada, incluso si se supone que solo ser texto, Microsoft Excel decide, quiero ser útil, y oh, veo sólo números. Vamos a tratar a estos números. Y se trunca los ceros a la izquierda. Juro por Dios, cada pareja de meses me parece una dirección, y fuera de un tipo de TOC, vuelvo y poner el 0, a pesar de que nunca enviar cartas de la gente ni nada. Pero todavía estoy encontrando restos de esta. Así que esto es decir, es una buena idea? OK, no, porque nadie en Massachusetts, en esta área, va a tener una o llevándolos. Así que vamos a ir con igual char, probablemente, de cinco. Y aquí, darnos cuenta de que podría utilizar una enumeración y nosotros podría enumerar 10.000 posibles códigos postales, pero que se siente como que es probablemente cruzando una línea de, como, beneficios. Si usted tiene a la entrada que muchos datos en su base de datos para proteger contra algo. Así carbón se dio cuenta de que podría escribir en H-E-L-L-O por ejemplo el código postal, lo que no es, obviamente, numérico. Así que no hay manera, en una base de datos típica, especificar sólo numérico y sólo cinco caracteres de longitud, así que vamos a tener hacer eso en el código. Vamos a hacer que en PHP o Java o cualquier otro idioma que estamos utilizando en el servidor para hacer cumplir ese tipo de restricción. Whoo! Muy bien, así que cualquier pregunta por el momento? Vamos a hacer otra decisión de diseño. Resulta que se También llega a elegir, en el diseño de una base de datos SQL o database-- típicos donde relacionales de nuevo, simplemente relacional significa filas y columnas, es así como a organizar sus Data-- y darse cuenta de que lo que esto significa es, He estado engañosa en que, estoy drawing-- este es lo que se llama el esquema para una tabla de base de datos. Esto es como el especificaciones para el table-- pero cuando llega el momento que en realidad almacenar datos, y que vamos a hacer esto sólo con el ejemplo aquí. Voy a abrir Excel, porque Excel me dará filas y columnas. Y eso es exactamente lo que Oracle y MySQL y otras herramientas me darán. Así que sólo voy a utilizar por el bien de la discusión. Déjame ir por delante y abrir una documento representativo aquí, agrandar un poco. Así, por ejemplo, nuestras cabeceras son ahora nombre, apellido, sexo, ID, correo electrónico, número de la calle, calle, gritos. Calle, ciudad, estado, justo sobre encaja en la pantalla. Así que lo que esto significa es que cuando una usuario se registra por primera vez para mi sitio web, que va a ser algo así como David, Malan, m, digamos 1, malan@harvard.edu, número de la calle se ser como 1 Brattle Square, Cambridge, MA, 02138 y, a continuación, etcétera. Así que cuando digo que una base de datos relacional o base de datos SQL es filas y columnas, Quiero decir esto. Que los datos reales se almacena en filas y columnas. Esta es sólo una coincidencia, que estábamos hablando, y yo estaba dibujando lo en filas y columnas. Esto es sólo el esquema, la definición general. Así que aquí uno de estos campos, o de manera equivalente, allí, los cuales son los campos que usted piensa Estoy probable que buscar en si soy un usuario o si soy el administrador de base de datos? Como, ¿qué soy yo campos en realidad va a buscar en? AUDIENCIA: [inaudible] DAVID MALAN: El nombre, sí por lo Me gusta el hecho de que- sí, email puede ser bastante común. Lo sentimos, usted ha dicho nombre. Así maybe-- y otra vez, estamos clase de hablar en abstracto. No sé por qué te gustaría ser la búsqueda de un nombre, pero que se siente razonable si estás en busca de un usuario. Quizás estados, seguro, ID. Y es una resbaladiza pendiente, porque podía idear un escenario donde tal vez mi jefe me ha pedido, ¿Cuántos hombres tenemos en nuestro sitio? ¿Cuántas mujeres tenemos en nuestro sitio? Y así, en ese momento, es posible que desee buscar en el campo de género, también, y nada más. Así que hay una compensación aquí. Una vez más, no hay respuesta correcta, pero hay es una característica en la mayoría de bases de datos SQL conocida como indización, por lo usted, el diseñador, el administrador de base de datos, llegar a decidir de antemano qué Campos La base de datos debe optimizar para las búsquedas en. Se podría decir muy ingenuamente, optimizar esto, que optimizar, optimizar esta, optimizar que y esto, y la base de datos hacer algo por debajo de la mágica capucha, y hacer algo de tal manera que la próxima vez que usted busca en cualquiera de estos campos, será, de hecho, ser más rápido. Esto es posible. No cancela a sí misma. Pero tiene que haber un precio pagado. Si ingenuamente, o un exceso de entusiasmo por ejemplo, el índice de todos estos campos, por así decirlo, hacer que todos eficientemente búsquedas, qué precio está probablemente pagando? AUDIENCIA: [inaudible] DAVID MALAN: Rendimiento. ¿Qué quieres decir? Bien rendimiento, al menos en el contexto que estoy discutiendo, es mejor ahora. Esa es la definición de la indexación. Hará búsquedas más rápidas. Así que el tiempo disminuye, por así decirlo. AUDIENCIA: [inaudible] DAVID MALAN: Espacio. Así que de nuevo, se trata de un comercio común. Puedo acelerar las búsquedas, pero es va a costar más bytes de espacio. ¿Por qué? Así, por defecto, si no tenemos ninguno de estas estrellas rojas, ninguno de estos índices, como que estoy diciendo, ¿cómo buscar de un nombre en esta base de datos? Así que vamos a dibujar nuestra atención a este ejemplo. Si tenemos David y Scully y Kareem y Arwa y otros en estas filas, por ejemplo. Así que vamos a hacer exactamente eso. Scully está aquí dentro, y luego tenemos Kareem, y Arwa, y todos los demás, si no lo hace tiene un índice definido, por así decirlo, lo mejor que puede hacer es buscar lineal. Si busca Arwa, no estamos va a ser capaz de entrar de lleno a su con rapidez. Vamos a empezar la parte superior y recorrer todo el camino hasta el fondo, no muy diferente de nuestra original ejemplo, Mike Smith. Si, sin embargo, digo, hey, base de datos, indexar el campo de nombre, a continuación, se va a hacer algo más elegante y apoyar algo al igual que la búsqueda binaria. No es probable que la búsqueda binaria per se. Bases de datos tienden a utilizar otro estructura de datos llamada b-árboles, No debe confundirse con los árboles binarios, que acaba de hacerlo más rápido para buscar algo en la naturaleza logarítmica. Pero el precio que pagar para construir esa característica, que la estructura de datos en la memoria, es más bytes. Lo que podría tomar algunos megabytes, algunos gigabytes, ¿quién sabe? Depende de los datos. Por lo tanto, en algún momento, usted tiene que decidir, probablemente no es un caso común. ¿Cuáles son los comunes real casos, si realmente tuviera que elegir, cuáles podrían ser sus campos favoritos? Email. Y me gusta porque el correo electrónico de correo electrónico, en teoría, debería ser único. Y así, por lo general, cuando se sabe de antemano que uno de sus campos es o será único, que tiende a ser un buen campo buscar en, porque de esa manera, cuando se busca algo, vas a volver uno o las respuestas cero y luego ya está. Usted no tiene que mantener en busca de otros más. Y así, en este caso aquí, correo electrónico, siempre y cuando no se puede registrar dos veces con el mismo email, es una buena idea. ID por definición, en el mundo de la informática, si usted está hablando de una Identificación, que mejor que sea único. En cierto modo es la connotación de ID o identificador. Y el resto de ellas podría ser, llamémosles bueno que tienen, pero no es realmente necesario. Y así, en una base de datos, especifica los índices, pero puede ser aún más preciso. Se puede decir, bueno, la base de datos, asegúrese que cada ID en esta tabla es única. Ni siquiera dejar que un programador accidentalmente poner en un correo electrónico duplicado o duplicar el número de identificación. Tanto como las enumeraciones protegernos de manera similar, se puede tener esas defensas de nivel inferior. Y así el diseño de base de datos, en cierto sentido, es una especie de diversión, porque lo haces a la defensiva. Usted especie de asumir que se trabaja con horribles, horribles programadores y que desea poner en tantas defensas como sea posible para proteger sus datos, pero al mismo tiempo desea para ayudar a obtener mejores resultados eligiendo qué campos para optimizar para. Pero no se puede necesariamente hacerlo en un vacío como que tipo de aquí. Uno tiene que saber cuáles son aquellos casos comunes son. Si los desarrolladores están la implementación de una libreta de direcciones, Es muy posible que desea poder buscar en casi todos los campos, simplemente por la naturaleza de la aplicación. Así que tal vez pasas que el espacio adicional. Derecho, alguna pregunta? Sí. AUDIENCIA: [inaudible] DAVID MALAN: No. AUDIENCIA: [inaudible] DAVID MALAN: OK. AUDIENCIA: [inaudible] DAVID MALAN: Ah, por lo que estamos hablando de una manera ahora que es completamente independiente del lenguaje. Así que estamos hablando ahora acerca bases de datos relacionales, más en general, o bases de datos SQL de forma más general. AUDIENCIA: [inaudible] DAVID MALAN: Una mejor palabra para usar se, puede ser utilizado por cualquier idioma. Así que se puede escribir código JavaScript, C código de código, C ++, código Java, código Ruby, todos los cuales hablar con un base de datos y ejecutar consultas. De hecho, eso no es una mala segue a una consulta de ejemplo. Y de nuevo, no vamos a entrar en Java o C ++ o nada de eso nunca más, pero en SQL, el lenguaje al que sigo refiriéndose, Structured Query Language, este sí es un lenguaje de programación, sino que está destinado a ser utilizado, sin sorpresa, estructurado de consultas de consulta. Con esto quiero decir esto. La forma de selección de los datos a partir de una base de datos MySQL está literalmente escribe en su programa algo así como la estrella de selección de los usuarios. Estoy suponiendo que esta tabla, a partir de ahora se llama a los usuarios. Podría llamarlo cualquier cosa que queramos, pero ese tipo de tiene sentido. Y así Select es un muy verbo común, si usted hará, en SQL, que, literalmente, lo hace. ¿Qué opinas estrellas significa en este contexto? AUDIENCIA: [inaudible] DAVID MALAN: Lo siento? AUDIENCIA: [inaudible] DAVID MALAN: No es necesario, es más inclusiva que eso, en realidad. Es el carácter comodín. Estrella casi siempre significa nada, lo que esto significa, en este caso, seleccionar todo, desde la base de datos. Así que cuando digo esto, quiero decir devuélveme cada columna desde mi tabla llamada usuarios. Así que dame un conjunto de resultados, como se le llama. En otras palabras, dame una copia de la hoja de cálculo, es lo que quiero llegar. Pero si dijera seleccione la estrella de los usuarios donde ID es igual a 1, lo grande que debe mi conjunto de resultados sea entonces? O equivalentemente, el número de filas debe Yo ser entregado de vuelta de la base de datos? Probablemente sólo uno, si tengo de hecho tratado ID como un identificador único, y si David tiene que ID único, I debe volver una y sólo una fila que contiene toda la información de David. Si lo dije donde ID es igual a 99, debería volver, en este contexto, cero filas, al menos en el momento. Sin embargo, si no me importa sobre toda esa información, Yo sólo pude decir, ¿dónde vive David? Seleccionar el código postal de usuarios donde ID es 1. Esto seleccionará sólo a mí postal de David código y no la totalidad de esa fila. ¿Por qué podría hacer esto en lugar de la consulta de la estrella, el comodín? AUDIENCIA: [inaudible] DAVID MALAN: Sí, yo sólo lo pueda necesitar. Lo que el rendimiento es de nuevo la respuesta aquí. ¿Por qué pedir más la información que necesita, porque incluso si todo está bien juntos, usted todavía tiene que copiar los datos, al parecer, a partir de la base de datos en su programa de alguna manera, y eso es una tontería si sólo necesita cinco de esos dígitos, no la totalidad de la fila. Entonces, ¿cómo puedo insertar un usuario? Supongamos que un usuario tiene solo registrado por primera vez. La sintaxis sería por lo general tener este aspecto. Insertar en los usuarios, y entonces podríamos decir que los valores, y entonces podríamos decir que los valores como, digamos, Lauren Scully, nuestro camarógrafo aquí. Y el siguiente campo es el género. Así que vamos a decir cita, fin de la cita "F", entonces tenemos un ID y voy a dejar que decir-- de fingir que no es en realidad aquí, así que vamos a rebobinar en la historia. Así que 2 será su identificación. Y entonces el siguiente campo Ahí está su correo electrónico. Así que va a ser como Lauren Scully y así sucesivamente, y sólo tendremos que punto punto dot lejos de aquí en adelante. Ahora va a ser un poco tedioso, pero la consulta de inserción en última instancia, tener ese aspecto. Si quiero para deshacerse de Scully, uh-oh, vamos a dar de baja ella, se elimina su cuenta, eliminar de los usuarios donde ID es igual a 2, se librará de Scully. O lo que puedo decir establecen los usuarios de actualización, digamos, ¿qué podemos cambiar? ¿Y si se mueve. Conjunto postal es igual a 021-- pues no, ese es su postal actual. 90210. El único otro código postal Sé que en el mundo. Así que cambiaría su postal code-- realidad, eso no cambiaría su código postal. ¿Qué acabo de hacer? A pesar de que la sintaxis es probablemente nueva. AUDIENCIA: [inaudible] DAVID MALAN: Sí, lo trasladó todo el mundo a Beverly Hills, California. Así que en realidad debería decir donde ID es igual a 2. Etcétera. Por lo que SQL es todo acerca de estos tipos de instrucciones. Seleccionar, insertar, eliminar, actualizar, con estos predicados en el extremo estas cláusulas en las que, por así decirlo. Y hay mucho más que pueda hacer, pero en realidad sólo se reduce simplemente, si arcanamente, expresando lo que quiere la base de datos hay que hacer. Y a continuación, la base de datos se darán cuenta, cuando Lauren se inserta en el Scully base de datos, dónde la puso en la memoria por lo que podemos obtener muy rápidamente su base en su dirección de correo electrónico o en base a su número de identificación o similar. Sí, Dan. AUDIENCIA: [inaudible] DAVID MALAN: Muy buena pregunta. ¿Estos scripts de cambiar de Microsoft Access a Oracle a MySQL a PostgreSQL? La respuesta corta es que depende. En teoría, hay una muy subconjunto común significativa de SQL que se comparte a través de todos de estas implementaciones. Sin embargo, varios fabricantes tienen características añadidas a sus bases de datos para hacer ciertas cosas más allá del alcance de estas características, que podría, de hecho, romper. Así que la forma en que los desarrolladores protegerse contra esto, es que en lugar de escribir en bruto código SQL como que estoy escribiendo aquí, que en lugar de utilizar una biblioteca, una biblioteca común que la propia es una especie de alto nivel y resúmenes de distancia, que el producto que está utilizando. Y le da funciones y procedimientos llamar para que nunca En realidad escribir SQL prima. En teoría, entonces, puede cambiar productos de Oracle a Microsoft o viceversa, o nada otra cosa, y que, literalmente, cambiar nada acerca de su código. La realidad, sin embargo, es que a veces renunciar a características como consecuencia de ello. Es posible que haya elegido un producto, ya que tiene estas características de valor añadido, y no eres más que ahora usarlos conscientemente. Y anecdóticamente, la mayoría de las empresas tienden Nunca alejarse de su base de datos. Así, mientras que este es un agradable tienen función, la realidad Es decir, si usted está reacondicionamiento su base de datos, que está probablemente haciendo manojos de otros cambios de todos modos, que no necesariamente que prever eso. Por lo que es discutible sobre-ingeniería del problema, pero realmente depende del contexto. Pero en teoría, SQL es compartida a través de estos diversos productos. Muy buenas preguntas. Sí. AUDIENCIA: [inaudible] DAVID MALAN: Sí, por lo se puede pensar en una base de datos es sólo un servidor, al final de el día, y en el interior de dicho servidor es un montón de tablas, filas y columnas. Y cuando se envía una consulta como esta desde su programa, su sitio web, escrito en Java, Ruby, Python, lo que sea, el servidor está recibiendo este comando e interpretarla en literalmente, de la misma manera hemos comentado anteriormente con lenguajes interpretados, y luego realizar alguna acción en cero o más filas en cero o más tablas. AUDIENCIA: [inaudible] DAVID MALAN: Exactamente, exactamente. Así que el pseudocódigo para algo al igual que podría ser esto. En su archivo PHP o su archivo de Python o su archivo de Java, que tendría código de pseudocódigo, o bloquea los arañazos como como, si las visitas de los usuarios acme.com/register~~V por primera vez, a continuación, insertar en los usuarios y así sucesivamente. Y nos gustaría traducir esto a más código concreto en el final. Pero, en realidad, tenemos todo los bloques de construcción aquí, a pesar de que estamos omitiendo algunos de los pasos de implementación. Así que déjame encontrar ningún fallo con lo que maravillosamente hizo hace un momento. Se ha creado una bonita tabla completa para los usuarios. Es cierto que podríamos aplicar en algunas maneras diferentes, pero has hecho nos llevó por la path-- y os digo, pero es probablemente mi fault-- de una justa aplicación de base de datos ineficiente. No es normalizó. Y por normalizada que quiero decir va a haber, con el tiempo, una redundancia significativa, y por lo tanto la ineficiencia, que es desperdicio de espacio. Sobre la base de sólo lo que se ve aquí, puede donde se le ha ocurrido esta pérdida de espacio se va a venir, con el tiempo, como se registran cada vez más usuarios para su sitio web? ¿Qué datos podrían ser redundante? AUDIENCIA: [inaudible] DAVID MALAN: ¿Por qué quiere decir eso? AUDIENCIA: [inaudible] DAVID MALAN: Sí. Y vamos a suponer para los fines de hoy que eso es cierto. Resulta que, y hemos aprendido esta de la manera difícil, que no es cierto. De alguna manera los múltiples ciudades tienen, De alguna manera, el mismo código postal, que rompe esta maravillosa intuición. Pero supongamos que es cierto, porque es casi siempre cierto. Así que supongamos que un código postal es siempre asociada a la misma ciudad y el Estado, que es una especie de la suposición razonable, pero incorrecta, resulta. Sin embargo, una suposición razonable para los propósitos de la actualidad. Entonces supongo que vivo en Cambridge, MA, de acuerdo con la tabla de este usuario, y supongamos que Lauren Scully vive en Cambridge, MA, y supongamos que Kareem vive en Cambridge, MA, Arwa y vive en Cambridge, MA, todos nosotros en 02138. ¿Por qué estamos recordando Cambridge, MA, 02138 para los cuatro de nosotros? Lo que debería ser suficiente para recordar? AUDIENCIA: [inaudible] DAVID MALAN: Sólo el código postal. Al igual que 02138 existe, porque sabes lo que podríamos hacer? Podríamos conseguir un poco de lujos y por aquí, defina otra tabla donde esto va a ser el nombre, esto va a ser el tipo, esto va a ser el de longitud, y de ahora en adelante, estoy va a llamar a este mi mesa ciudades. Esto fue llamado, de Por supuesto, mi tabla de usuarios. Y así lo debo poner aquí para mi mesa ciudades, qué te parece? AUDIENCIA: [inaudible] DAVID MALAN: Sí. Así comprimir y estado y la ciudad. Y por lo que el tipo de aquí, nos dirá esto va a ser un char 5 de nuevo, sujeto al debate de la anterior. Esta será una enumeración, tal vez como antes, y la ciudad será un varchar 50. Y por eso ahora qué consigo borrar de esta tabla para eliminar esa ineficiencia? AUDIENCIA: [inaudible] DAVID MALAN: Niza. Estado y la ciudad desaparecen, por lo que he ahora eliminado la ineficiencia potencial para recordar de forma redundante, Cambridge, MA, Cambridge, MA, Cambridge, MA, Cambridge, MA, el cual, es de esperar nunca va a cambiar. E incluso si lo hace, es minorly molesto, ahora que tengo que cambiar en varias filas, mientras que aquí, sólo podía cambiarlo en un solo lugar. Ahora ¿cuál es el equilibrio, tal vez? Esto era muy práctico. Tenía todas mis datos muy bien juntos. Pero lo que es claramente el caso ahora? AUDIENCIA: [inaudible] DAVID MALAN: Exactamente, y estoy contento de que utilizó la palabra se unen, porque eso es en realidad la palabra clave, en el mundo de las bases de datos relacionales en SQL, que es una palabra real que podría escribir o al menos transmitir. Y de hecho, lo que tenemos que hacer ahora para seleccionar la información completa de David es algo así como de selección de estrellas usuarios, se unen a las ciudades, y ahora en-- Voy a mover simplemente a una segunda línea de modo que este es igual users.zip fits-- cities.zip, donde users.ID es igual a 1. Entonces, ¿qué está pasando? Es feo que mira, pero se puede tipo de leer de izquierda a derecha y de arriba abajo. Seleccione la estrella de los usuarios es el mismo que antes, pero no es parte de los usuarios, per se. Es de usuarios se unen a las ciudades. ¿Qué estoy uniendo esos dos tablas en? Bueno, al parecer, la mesas usuarios zip campo, y este período es simplemente especial la sintaxis para expresar esa idea, y esto es las tablas ciudades zip campo. Quiero los dos a ser iguales, pero quiero seleccione en última instancia, sólo las filas donde ID en la tabla de usuarios es igual a 1, que pasó a ser la mía. Y para ser claros, una programador, por lo general cuando codificar algo así como el número 1, porque de lo contrario sólo el sitio web apoya David o la primer usuario, En vez de ello hacer algo así como la identificación, donde esto representa una variables, algo que puede cambiar con el tiempo, similar en espíritu a lo que dije antes con este tipo de marcadores de posición. Pero por ahora sólo tendremos que codificar como 1. Y así, ¿qué significa esto? Pues bien, una buena manera de visualizar esto es que si esta mano es la tabla de usuarios, y esto es parte de las cremalleras mesa, estamos especie de finding-- y las puntas de los dedos son postal aquí, y las puntas de los dedos aquí están postal, eres tipo de enclavamiento se de manera que obtiene nuevamente el resultante tabla original, por verdaderamente unirse las dos tablas en el campo común. Y no tiene por qué ser postal. Podría ser cualquier otra cosa más, pero zip es bueno, porque uno, es corta, dos, que siempre es la misma longitud, por lo que hay una verdadera eficacia a lo Olivier propone aquí con la factorización de la cremallera, y [Inaudible] proponiendo que nos deshacemos de la ciudad y estados. Así que este es el proceso conocida como la normalización. Para cualquier duda sobre esto? Bien permítanme señalar este es el tipo de cosas, a pesar de que es bastante bajo nivel, esta discusión, que se podría pensar estás especie de conseguir perdido en la maleza, esta es una manifestación de un amplio oportunidad para los desarrolladores a ser malo. Y de hecho, aun cuando, en cursos que he impartido, cuando hemos tenido, por ejemplo, sin experiencia programadores de grado construir sitios web, a primera vista, los sitios web puede tener un aspecto estupendo. Y tienen toda la funcionalidad que habíamos pedido, los desarrolladores hicieron un buen trabajo. Pero no necesariamente saben lo suficiente sobre el diseño de bases de datos o que no pensaron duro lo suficiente acerca de los tipos de datos y los tipos de usuarios de las página web iba a tener, y nos encontramos, entonces, seis meses más tarde, después de que se han graduado o se mueven en, que maldita sea, nuestro sitio web es realmente, realmente lento. Y ni siquiera estoy hablando de tener millones o miles de usuarios. Me refiero a unos pocos cientos de usuarios en el campus, todos los cuales les gusta, por ejemplo, compras para los cursos de al mismo tiempo, son usando ese catálogo de cursos aplicación Mencioné y la cosa se está poniendo muy reducir la velocidad porque no había índices. No había estrellas rojas, por lo que hablar, o que no tenían necesariamente un factor fuera de datos comunes a obtener algunos ahorros de espacio. Y así, cuando un desarrollador de proceder a la instrucción o persona base de datos o similares, el tipo de preguntas que pensar a través es par, al revisar el código de otra, decir, no necesariamente mirar a través de la totalidad de su código, pero decir, vamos a ver a través de las tablas de base de datos. ¿Qué estás almacenando? Y luego decir, bueno, espera un minuto, ¿Por qué utiliza un número entero? ¿Qué pasa si tenemos 4 mil millones y 1 de las filas? Y este tipo de preguntas es una oportunidad al tipo de empujar hacia atrás y tener una idea de donde si no se siente cómodo haciendo que, tener a alguien más técnico hacer estas preguntas, de si es o no la persona que realmente sabe sus cosas. Y este es el tipo de cosas, también, que las personas en el Internet que son autodidactas, tal vez aprender con menos frecuencia, porque no tienen necesariamente que proceder a través de ella como mucho, ya que se puede conseguir la base de datos en funcionamiento, pero a menos que haya leído arriba en tutoriales o estado contado sobre la normalización de bases de datos y la indexación y el rendimiento, estos son el tipo de cosas que van a hacer daño. Y se podría pensar, o un mal ingeniero podría decir, oh, bueno, mejor salario para una base de datos más grande o una base de datos más rápido o simplemente tirar el dinero en esto, la escala vertical, no es necesariamente así. Si vas en-- y se puede ir en después de que los índices fact-- y añadir, y puede ser que tome un par de horas para el base de datos para construir que los nuevos datos estructura que he aludido antes, todavía se puede solucionar este problema después del hecho, que aquí es donde se empezar a distinguir buenos diseñadores de mala diseñadores, no sólo estéticamente, pero en cuanto al rendimiento también. ¿Alguna pregunta? ¿No? Así que para NoSQL, que era el otro tipo de la base de datos a la que he aludido antes, usted no tiene filas y columnas. En su lugar, usted tendría algo que se ve un poco de la misma familia. Voy a utilizar la sintaxis común. Las llaves resultan ser utilizado aquí mucho. Es posible que tenga algo como primer nombre es David, es posible que tenga la última nombre es Malan, citas, es posible que tenga ID es-- perdón, whoops-- ID es 1, El correo electrónico es malan@harvard.edu, y no lo haré moleste en escribir el resto, y luego algunas otras cosas. En otras palabras, esto es una representación textual de lo que llamaríamos general un objeto en un programa de ordenador. Y es un objeto general, sólo una colección de pares de valores clave. Así que de nuevo, este tema recurrente. Vimos pares de valores clave en HTML, vimos pares de valores clave ahora en el contexto de las bases de datos, y vio pares de valores clave en el contexto de, creo, una lengua el día de hoy. Se presenta de nuevo. Y de hecho, eso es realmente qué datos se reduce a, datos y metadatos, o valores y llaves, respectivamente. Por lo que una no relacional base de datos, basado algo en los objetos, en el que sólo se aglutinan todo junto y ponerlo en la memoria, generalmente se representado como, o pensado, ya que esto. Y lo dejo ahora como una tipo de enfoque alternativo. Y uno no es necesariamente mejor que el otro. De hecho, muy en boga en estos días son los sistemas de bases de datos como MongoDB y Redis y unos pocos otras herramientas similares, de libre disposición, pero son cada vez más de moda. En parte debido a que ofrecen adicional cuenta con más de estos enfoques tabulares, sino también porque son un poco más fácil de usar, porque usted no tiene que pensar tan duro sobre muchas de estas decisiones de diseño. Así que más y menos. Así cuenta de que hay opciones más allá de lo que acaba de pasar tiempo en. Así que vamos a hacer esto. Vamos transición un poco más volver ahora a la programación web, de modo que la clase de la conclusión hoy con algo Eso es un poco práctico, llenando en algunas lagunas de ayer. Déjame ir a esta primera. Así recordar que ayer teníamos un poco de HTML canónica páginas que tenían inicialmente, sólo se HTML y CSS tenido secundariamente, Hojas de estilo en cascada. Esta es una nueva etiqueta que no lo hicimos ver ayer, o detenerse en, denominada etiqueta de script. Resulta que en realidad se puede incrustar una lenguaje llamado JavaScript en su Web página y hacer que su web páginas hacen algo. Entonces, ¿qué quiero decir con esto? Bueno, déjame ir adelante y sólo prestado este código por un momento. Voy a entrar en Cloud9, sin necesidad ir allí a sí mismos por el momento, y yo voy a llamar a este alert.HTML. Voy a pegar en mi archivo aquí. Y sólo para aclarar lo que he hecho, y mucho me vaya a esta dirección y voy a alertar, y se ve el mundo Hola. Pero esto es un poco decepcionante. quiero hacer algo un poco diferente. Así que voy a hacer esto realidad. Voy a entrar aquí e, y en medio de mis etiquetas de script, decir alert ( 'hola, mundo'); de modo previo aviso que es un poco descuidado, pero tengo HTML, dentro de los cuales es una lenguaje llamado JavaScript, y esto es lo que se llama una llamada a la función o llamada a procedimiento. Este es un verbo, literalmente, en este caso, y yo estoy invocando la funcionalidad de código que otra persona escribió. Así que la funcionalidad es una alerta, así que vamos a esta página ahora y haga clic en Recargar, y ahora ver un poco de interactividad. Es una especie de vieja escuela y feo. Este tipo de le recuerda el ventanas emergentes, tal vez, de antaño pero sí hacer algo un poco más programático. Así que más que eso, vamos a hacer algo más interesante. Déjame ir aquí y deshacerse de este. Y voy a seguir adelante y crear una forma como lo hicimos ayer. En realidad, ¿sabes qué? Voy a entrar en google.html, que nos comenzó el día de ayer, que parecía esto, a través de la cual se realizaron búsquedas de gato Pero Tenga en cuenta que hay una especie de error en la versión actual. Funciona para los gatos, pero supongamos que Yo no coopero y escribo nada, y yo simplemente haga clic en enviar. Eso es un poco extraño comportamiento. Me llevó a la verdadera Google, no me dio un mensaje de error. Me gustaría decirle al usuario es necesario que nos dará un valor. Así que, ¿cómo podemos hacer esto? Así me dejó ir de nuevo en Cloud9 y me dejó ir en la parte superior de mi página y añadir una etiqueta de script como este, donde Voy a escribir algo de código JavaScript. Y voy a hacer lo siguiente. Si (document.getelementByID-- y el recuerdo que hemos hablado anteriormente de que, esa función. Lo ID Qué quiero conseguir? Quiero conseguir q, y voy a por ejemplo es igual a nada, así- En realidad me deja utilizar comillas dobles sólo para consistency-- es igual a nada, a continuación, alert ( "Por favor, escriba una consulta") aquí. Así que tengo lo que parece ser algo así como una condición. Hemos visto esta idea general en Scratch. Es como uno de los rompecabezas piezas que se parecía a este. Y ¿qué estoy diciendo? Bueno, aquí abajo, noto que estoy vamos a hacer lo siguiente. Voy a dar este formulario campo no sólo un nombre de q, que es lo que se transmite a Google, pero estoy va a dar un identificador local, también llamado q. Pero podría llamar a esto todo lo que quiera, yo sólo voy a mantener la sencillez y también llamarlo q, sólo por simplicidad. Y ahora me voy a hacer algo un poco más. En los campos de formulario aquí, voy a añadir lo que se llama un controlador de eventos. En presenten, quiero llamar una función llamada de validación. Esto no existe, sin embargo, esta palabra, o este verbo de validación, porque lo que voy a hacer aquí ahora es añadir algo de código. Voy a decir validar la función. Voy a sangrar esto y añadir otro llave de aquí y otro aquí. Consideremos lo que esto está haciendo ahora. Tengo ahora-- pensar en esto como mi creado propia pieza del rompecabezas que no lo hicieron con anterioridad existo, y yo he llamado a este rompecabezas piece la pieza del rompecabezas de validación. Su propósito en la vida es ejecutar las cuatro líneas de código dentro de ella. Si document.getElementById así conceptualmente, que va a entrar en el elemento, el elemento HTML cuya única idea es simplemente q ya continuación, a pesar de que la sintaxis es un poco raro, que es igual a igual sólo significa iguales. Esto significa que si el elemento con el identificador único de q, cuando se incorporó, no tiene ningún valor, sólo es igual entre comillas, nada allí, entonces, ¿qué es lo que quiero hacer? Quiero gritar al usuario. Y no vamos a entrar aquí con gran detalle. Voy a volver falsa. Eso es un error. Si no, voy a volver realidad. Así que, o funcionaba o no lo hizo. Falsa o verdadera. Y ahora, si yo no he cometido ningún error, me deja guardar esto y vuelva a cargar esta. Y permítanme que vuelva a comprobar Yo no, de hecho, hago ninguna errata, por lo que no avergonzarme. Vamos a ver si esto funciona. Así que ahora voy a escribir gatos. Todavía funciona, o funciona la mitad, por lo menos. Ahora voy a volver a cargarlo, y ahora dejo a tratar de presentar sin escribir cualquier cosa-- maldita sea, que se rompió. Un momento. Permítanme abrir la consola, [Inaudible] iniciar la sesión, vuelva a cargar la página. Déjame probarlo otra vez. Oh maldita sea. Olvidé. Hice un error tipográfico. Recuerdo lo que es. .valor. Quise decir si el valor del elemento cuyo ID es q es igual que, a continuación, gritar al usuario. Así que ahora que me tienen el aliento de nuevo. Aquí vamos. Aquí vamos. Por favor, escriba una consulta. Así que no me está dejando pasar. Puedo ser un poco juguetón con esto, y en lugar de la comprobación de ningún valor, Puedo decir algo como: No más búsqueda de los gatos, y ahora nos podemos dejar más juguetonamente la búsqueda de usuarios para los perros si él o ella quiere, o si entro aquí y buscar gatos, ahora no puedo. ¿Cuál es la comida para llevar en esta lista? Así que uno, hemos introducido en nuestro mundo de HTML y CSS, funcionalidad de programación. Yo en realidad puede ahora tomar decisiones en el código. Anteriormente, todo lo que pude hacer es marcar el contenido textual o contenido gráfico y decirle lo que debe buscar como y dónde se debe mostrar. Ahora realmente puedo pedir preguntas de la página web y tomar decisiones basadas en ella, y pedir al usuario si tengo que gritar a él o ella. Así que vamos a intentar algo por nuestra cuenta con este. Vaya por delante, vamos a abrir hasta la siguiente diapositiva aquí, y simplemente señalar una cosa. Al igual que con CSS, podemos factorizar nuestro código JavaScript en un archivo separado, se puede hacer la misma cosa con JavaScript como con CSS. Y se utiliza que el uso de una fuente atributo de la etiqueta de script. Pero no vamos a complicar las cosas por ahora. En cambio, si pudiera No vaya a esta página, pero- déjame pasar esto alrededor de order-- ir a, si se pudiera, esta página aquí. Esta URL aquí. Está en las diapositivas de hoy en día. Puede que tenga que recargar porque He añadido un par de cosas. Pero ir allí donde esperan algunos puzzles. Y esto nos dará una oportunidad, en un contexto algo más divertido, a incursionar con algo de JavaScript. Y cuando llegue allí, Voy a explicar lo que le espera. Obtener verde. Conjunto azul. Establece verde, roja fija. Vaya. Lo siento. Esta es la medida de nuestra documentación para este desafío. Y esto va a funcionar de la siguiente manera. Así que lo que tienes en este la página es un manojo entero rompecabezas de imagen por un compañero en la Universidad de Stanford. Así que lo que estamos viendo aquí es casi tipo de uno de esos rompecabezas de ojo mágico, pero si sólo mira fijamente él, nada va a estallar hacia fuera en usted. Más bien, algo es escondido en esta imagen. Y que está escondido de la siguiente manera. Imágenes, como ustedes saben, pueden ser compuesta de sólo tres colores. Algunos roja, algo de azul, y un poco de verde. Y podemos hacer toda la colores del arco iris mediante la mezcla de los tres colores de alguna manera. Así que esto se ve sobre todo verde y azul, pero como dice Nick aquí, esta imagen Rompecabezas de hierro es un rompecabezas. Contiene una imagen de algo famoso, sin embargo, la imagen ha sido distorsionada. El objeto es famoso en los valores de rojo. valores Sin embargo, el rojo Todos hemos sido dividido por 10. Por lo que son demasiado pequeños en un factor de 10. Así, en otras palabras, Nick tomó una imagen original, y él desaturado todo del rojo de ella, la reducción de la cantidad de rojo tinta, si se quiere, en el mismo. Los valores de color azul y verde están a sólo carece de sentido, valores aleatorios, alias diseñados ruido para oscurecer la imagen real. Así que lo que Nick hizo fue bajó el tono del rojo y luego que acaba de lanzar al azar cantidades de azul y verde en la imagen para tipo de oscura lo que es en realidad todavía existe. Debe deshacer estas distorsiones para revelar la imagen. En primer lugar, establecer todos los valores de color azul y verde a cero para sacarlos del camino, y ver el resultado. Entonces multiplicar cada valor de rojo por 10, escalar de nuevo hasta aproximadamente igual a su valor final. ¿Cuál es el objeto famosa? Así que todos ustedes tienen este rectángulo en su navegador en este momento. Y observe que hay una cierta código de arranque, por así decirlo. Este es el código JavaScript que Nick ha escrito para usted. Y el aviso de que hay una línea en el medio que comienza con una barra barra, eso es lo que generalmente se llama un comentario. Significa que es una frase para el programador que no tiene ningún significado funcional. Es sólo una señal visual para el ser humano. Para que pueda seguir adelante y eliminar sólo esa línea, y ser super cuidado de no borrar o cambiar cualquier otra cosa. Y me dejaron de caminar a través de lo que hace este código y lo dejaré a usted para averiguar la imagen secreta. Esta primera línea aquí que acabo de resaltada le da la siguiente. En el lado izquierdo, usted tiene lo que se llama una variable que tiene Nick arbitrariamente, pero razonablemente llamada para una imagen im. Al lado derecho de ese signo igual, que dice dame un nuevo Lo dijeron ellos "imagen simple". Imagen simple, en este contexto es lo que se llama una clase, así, que es como una especie de class-- técnicamente un prototype-- pero en realidad, esto me está dando un nuevo objeto, los contenidos de las cuales son el archivo, hierro-puzzle.png. En otras palabras, Nick ha creado esta noción de una simple imagen de manera que podamos, para pedagógica propósitos, juegan con la imagen y cambiar su color rojo, valores de verde, y azul. Y ¿cómo nos va eso? Esta sintaxis tanto críptica aquí es algo así como el bloque de repetición que algunos de ustedes vieron en Scratch anteriormente hoy en día, donde se puede repetir 10 veces. En este caso, Nick no tiene hardcodear un número como 10. En su lugar, está diciendo, inicializar una variable llamada x a 0, comprobar si x es menor que la anchura de la imagen. Y así, para ser más adecuada, la imagen es variables, punto significa ir dentro de ella y obtener su anchura, y luego paréntesis de apertura, cerrado paren es sólo la forma de un programador de decir esto es una función. Este es un procedimiento. Esta es la funcionalidad alguien escribió. Usarlo y me devuelva una respuesta. Y entonces x ++ es una forma elegante de diciendo, después de haber hecho esto una vez, incrementar x por 1. En otras palabras, este es la forma de un programador de inducir un bucle que es ir para repetir todas las columnas de una imagen. Una imagen es sólo una rejilla de puntos, filas y columnas de puntos. Esta es una forma de la iteración sobre todo de aquellas columnas. Y en el interior, Mientras tanto, estamos iterando sobre las alturas, aquí y aquí y aquí. Así que esto es sólo una forma de Traipsing, casi como una máquina de escribir de la escuela, que sólo tiene que ir sobre el imagen completa de forma iterativa. Incluso eso no es del todo completamente claro, acaba de tomar en la fe, por ahora, que esas tres líneas de código juntos son va a permitir que usted mire de forma iterativa en cada pixel, cada punto en la imagen. ¿Qué es un píxel? Bueno, para ser claros, si miramos en el original y hacer un zoom, si realmente pone sus ojos a la pantalla del ordenador, eso es Sólo un montón de puntos, varios mil puntos empacados juntos allí. Y ¿a qué estás a punto de hacer? Cada uno de esos puntos, una definición final, es el resultado de lo que es en general denominado RGB, rojo, verde, azul, que de nuevo, se pueden combinar para darle cualquier número de colores. De hecho, si usted recuerda desde hace muchos, muchos años, pantallas de proyección, como estas cosas solía tener no uno sino tres lentes. Uno de ellos escupir luz roja, una de ellos escupen luz verde, una de ellas escupir luz azul. Y si estuviera en una escuela media como si estuviera en el que nunca había alineada correctamente, eras Siempre viendo películas de historia que eran ligeramente distorsionada, porque los tres colores no eran combinando correctamente. Pero resulta que cada uno de estos valores de rojo, verde y azul, puede tener un número asociado con ellos. Por ejemplo, 0 para el rojo significa que no hay rojo, 0 para el verde significa que no hay verde, y 0 para el azul significa que no hay azul. Así que si usted no tiene color rojo, sin verde, y no hay azul, de qué color tiene? AUDIENCIA: [inaudible] DAVID MALAN: Por favor Esperamos que sí, que es blanco. Por desgracia, este operates-- lo siento? AUDIENCIA: [inaudible] DAVID MALAN: ¿Así que en realidad tienen negro, en este caso. Así que si usted no tiene ninguno de estos colores encendidos, tiene negro. Sin embargo, si usted tiene, digamos que mucho de ellos, al igual que una gran cantidad de rojo, 255 de la misma, mucho verde, y mucho de azul, que es de color blanco. Así que estos son los dos extremos. Así por esta lógica, si tengo mucho de rojo y verde y no hay azul, de qué color es? AUDIENCIA: [inaudible] DAVID MALAN: Derecha, obviamente. Y entonces no rojo, mucho verde, no azul, y luego si tener-- así, sólo tendremos que terminar ella, porque sí, pero esto, por supuesto, Ahora, es de color azul. Y ahora se puede combinar estos colores. Ahora como un aparte, si alguno de ustedes tiene Alguna vez has hecho algo de diseño real sitio web, En realidad, puede ver símbolos como éste. FFF-- y, de hecho, es Probablemente ni siquiera eso. Es FFFFFF. Cualquiera que he visto de F y E de y A through-- por lo que resulta, Ayer hablamos de decimales, y hoy en día, sobre tipo de decimal. Hoy hablamos sobre binario. Resulta que, hexadecimal es una muy sistema de base común para uso en productos informáticos. Binaria es de dos, decimal es 10, hexadecimal es 16. Y resulta que, ¿cómo hacer se cuenta en hexadecimal? Cero, uno, dos, tres, cuatro, cinco seis SIETE OCHO, nueve, ¿qué uso después de las nueve? ¿Cuál es el siguiente número? Ya hemos utilizado cero. Necesito 16 de ellos. Cero, uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, necesita alguna convención arbitraria. Y lo que la humanidad decidió algún tiempo Hace que viene después de las nueve de la letra A y luego B y luego C. Así que la manera se cuenta en hexadecimal es cero, uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, A, B, C, D, E, F, y que contará usted hasta el final, resulta que, a 15. Así cero a 15 es cero a través de F. Ahora ¿por qué es tan significativo? Pues bien, cuando se tiene dos F, así es como te expresas 255. Así el cuento largo, en el mundo de Photoshop, que el software de diseño gráfico, en el mundo del desarrollo web, donde usted tiene un montón de colores, por supuesto, para jugar, menudo los programadores expresar los que están en hexadecimal, simplemente porque tiende a ser un poco más simple. A pesar de que a primera vista es mucho más compleja. Así, en cualquier caso, esto es importante porque Nick at Stanford nos ha dado seis piezas de funcionalidad que, los programadores en ciernes, ahora tendrá la capacidad de utilizar. Incorporado en esta web La página es de seis funciones, seis procedimientos que Nick escribió. Tres de ellos le conseguirá un número, un rojo, un verde, o un valor de azul. Tres de ellos establecer dicho valor. Y estos guiones son marcadores de posición, por lo que necesita saber cuáles son. Así, con estas tres funciones, la primera de estas cosas va a ser una coordenada x, y la segunda de estas cosas va a ser una coordenada. En otras palabras, que salpican, los cuales píxel es lo que quieres conseguir el verde de, conseguir el azul, el rojo de conseguir. Y entonces aquí, esto va a ser x, esto va a ser un valor y, y esto va a ser un número. Así que vamos a hacer la primera línea de este conjunto y luego lo dejo a usted para tratar de deducir el resto. Así por las instrucciones en esta página, necesitamos para aumentar la rojo por un factor de 10, y tenemos que quitar el verde y retire el azul. Vamos a empezar con los últimos escenarios. Así que si quiero, y voy aplicar una sangría mediante el uso de algunos espacios, si quiero establecer el rojo, el verde, o el valor de azul, Voy a hacer lo siguiente. Imagen, im.setBlue, y luego basado en mis instrucciones aquí, ¿Qué tres cosas habría de hacerlo escribe dentro de paréntesis ahora? Necesito el valor de x, la y valor, y qué número debería poner aquí si quiero deshacerme De la nada, sobre la base de esta historia aquí? Sólo cero. Si no quiero azul, sólo soy va a cambiar a cero. Ahora vamos a recapitular lo que esto está haciendo. Tengo aquí y TOP líneas segunda y tercera, Reclamé dos bucles, bucles anidados, si Will, que van a tener el efecto de progresar desde la izquierda a la derecha, de arriba a abajo sobre la totalidad de la x los valores y todos los valores de y. Porque, de nuevo, una imagen sólo una cuadrícula de filas y columnas. Así que esto se va a poner deshacerse de todo el azul. Permítanme dejo en la siguiente línea en su caso. ¿Cómo me deshago de todo el verde? AUDIENCIA: [inaudible] DAVID MALAN: Niza. AUDIENCIA: [inaudible] DAVID MALAN: Niza. Y voy a alejar, y acaba de tomar cuidado de que no se ha hecho ninguna errata. Y si se siente cómodo con lo que has hecho, seguir adelante y haga clic en el botón RUN / Guardar y ver lo que hay. Y de nuevo, hemos hecho sólo tres cambios. Hemos suprimido la primera comentar y lo reemplazó con estas dos líneas de código. Y está bien si usted necesita para golpear el botón Run / Guardar un par de veces para arreglar algo. Y permítanme también el zoom en mi código para que pueda transcribir. Bueno. Así que ver a Andrew tiene lo parece ser un error. Él sólo tiene un gran negro rectángulo en la pantalla. ¿Alguien más tiene un gran rectángulo negro? AUDIENCIA: Sí. DAVID MALAN: gran rectángulo negro? OK, así que vamos a pensar acerca de lo que esto significa. Hemos dicho que cero, cero, cero, por lo que no verde, no rojo, no azul, se va a dar negro. Y resulta que la mayor parte de nuestros ordenadores portátiles simplemente no tienen suficiente fidelidad. No se puede decir que hay bastante es en realidad algo allí. Y si tal tipo de inclinarse la pantalla hacia delante y hacia atrás, Qué tal se ve una algo allí? Tal vez, una especie de, más o menos? No es perfectamente negro. AUDIENCIA: [inaudible] DAVID MALAN: Spoiler! Hay un poco de rojo, pero recordar de las especificaciones del problema, Nick entonado hacia abajo. Él desaturado que algo, pero no todo el camino a cero. Así que si queremos ampliar la cantidad de rojo, permítanme proponer este truco. Déjame el zoom en mi pantalla. Y me dejó ir adelante y digo cantidad es igual a im.getRed (x, y). Esta línea de código me está dando algo que se llama una variable. Tengo arbitraria, pero, sin duda, razonablemente llamado a mi variable de lo que, ¿aparentemente? Cantidad. cantidad justa. Podría haber llamado lo que quiera, pero yo soy el uso de esta otra función que he descrito anteriormente para obtener la cantidad de rojo en x coma y. ¿Por qué hice eso? ¿Qué es lo que quiere hacer aquí? Usted necesita add-- AUDIENCIA: [inaudible] DAVID MALAN: Sí, tal vez se multiplica por 10. Y si usted no sabe esto, estoy va a seguir adelante y hacer esto. Voy a seguir adelante y por ejemplo, quiero que la cantidad de rojo Quiero ser lo está en el rojo, los tiempos de 10, y la estrella, el asterisco en su teclado es el-- no utilizan x. Utilice la estrella. Así es como las cosas se multiplica en la mayoría de los lenguajes de programación. Así que de acuerdo a la intuición de Kareem, almacenado en esta variable llamada cantidad, es la cantidad de rojo que quiero en la posición xy. ¿Cómo, ahora, cómo puedo hacer que Pixel tener ese número? Ya ha hecho esto antes. Se establece el verde y el azul o ningún valor, a cero. AUDIENCIA: [inaudible] DAVID MALAN: Sí, así usted no quiere que 10. Ya lo hizo la matemáticas aquí. Así que estamos consiguiendo el valor de rojo, que es un número bajo, es de suponer. Estamos multiplicando por 10. Lo que se quiere hacer con la cantidad variable de ahora? AUDIENCIA: [inaudible] DAVID MALAN: Niza. Así im.set-- qué? AUDIENCIA: setRed. DAVID MALAN: setRed, en la posición xy. Sí. Y de la misma cantidad. En otras palabras, una variable es un marcador de posición temporal que se puede poner lo que quieras en. Nos pasó a estar poniendo una número en ella, en el momento. Nos hemos multiplicado por 10 para hacerlo más grande. Y ahora estoy sustituyendo esa variable como el tercer argumento, o la entrada para establecer rojo. Y por lo que una vez que terminar eso, y tomar nota de los puntos y comas y entre paréntesis. Vaya por delante y haga clic correr / guardar de nuevo, y se vean, mágicamente, lo que era en realidad ahí. [? Arwa,?] Lo que está allí? La Torre Eiffel en-hecha y derecha rojo, no bastante oscuro. debería ser más obvio ahora, ¿verdad? DE ACUERDO. Y Andrew, caja de no más negro? AUDIENCIA: [inaudible] DAVID MALAN: Está bien. Así que voy a mantener esto en la pantalla. Si quieres jugar con este más adelante, voy a volver a crear esto para usted. Pero este código aquí hizo exactamente eso. ¿Por qué no hacemos otra. Permítanme desplazo hacia abajo ligeramente. Así pues, en este caso, el proyector en realidad no le hace justicia. Pero en sus pantallas, es probable tener un cuadro muy roja y muy negro. Esto, también, es un rompecabezas que muestra algo famoso. Sin embargo, la imagen ha sido distorsionada. La imagen verdadera, esta vez, es en los valores de azul y verde. Sin embargo, todos ellos han sido divididos por 20 lo que los valores son muy pequeñas. Los valores de rojo son sólo números aleatorios, ruido. Deshacer estas distorsiones para revelar la verdadera imagen. Así que Nick le dice entonces qué hacer. Establecer los valores de rojo a cero, y entonces no estropear lo que es. Entonces multiplicar el azul y los valores verdes por 20. Por lo que es casi lo mismo programa como antes, pero estás invirtiendo el proceso. Y pondré mi código de antes en la pantalla en caso que desea hacer referencia de nuevo a él o jugar con más que uno. Permítanme acercar dicho. Pero resolver imagen Cobre rompecabezas, número dos. AUDIENCIA: [inaudible] DAVID MALAN: OK, así que este punto estoy No va a dar tantos consejos. Así que would-- oh, vamos a ver, usted tiene un error tipográfico aquí. Así que recuerde, esto aquí en realidad tiene que ir allí. Entonces, ¿qué propondría, si desea se centran en este caso, no es la respuesta. Si desea transcribir eso, que debe recibir el primero de trabajo. Y entonces usted puede usar eso como inspiración para el segundo. Bonito. Bueno. Y para los curiosos, esto es un ejemplo sencillo de una ciencia o un arte llamada esteganografía, el arte de ocultar información en imágenes. Por lo general, las imágenes podrían ser marcado por el agua muy descaradamente con un logotipo en la parte inferior esquina, pero con claridad, puede ser mucho más sofisticado al respecto y, de hecho ocultar otras imágenes en las Imágenes de alguna manera con esta técnica. Tomar otros 30 segundos, y luego vamos a al menos anunciar lo que debería ver. Y dejaré la tercera uno como un ejercicio en el hogar, Si desea más de un desafiar este fin de semana. Y creo que Andrew podría han conseguido por primera vez. ¿Cuál es la segunda imagen, Andrew? AUDIENCIA: estatua de la libertad. DAVID MALAN: estatua de la libertad será la respuesta esta vez. Así que de nuevo, sólo algunas simples ejemplos, el objetivo de los cuales es para darle una idea de cómo hemos traducido arañazos pictórica cuadras más molesto y más código complicado, pero todas las ideas todavía son exactamente lo mismo, aunque con la introducción ahora de la noción de una variable, siendo capaz de almacenar algo temporal. Vamos a hacer uno más práctico, acaba de conectarse ahora los puntos a algo un poco más en el mundo real. Cuando esté listo, si pudiera vaya a esta dirección URL en la pantalla. Eso es también en su copia de la diapositivas, developers.google.com/maps~~V~~singular~~3rd. Vamos a hacer algo realmente real, por así decirlo, en la web el uso de la API de Google Maps, o Interfaz de programación de aplicaciones, de la siguiente manera. Google, al igual que muchas empresas, proporciona una gran cantidad de funcionalidad gratuita que se puede utilizar para construir su propias aplicaciones interesantes. De hecho, si alguna vez has usado Uber para conseguir un taxi o un coche, Usted probablemente sabe que tiene Uber Un mapa que muestra los coches y sobre el mismo. Es decir, lo mejor que puede decir, la API de Google Maps. Ellos en realidad están utilizando los mapas de Google, pero Uber no es una empresa de mapas, ni habría que ser una problema particularmente interesante para resolver en la parte superior de su problema del servicio de coche. Y por lo que están de pie, de nuevo, en los hombros de los demás, en este caso Google. Así que utilizan los mapas de Google, pero su propio servicios de automóviles y otras características. Así que vamos a aprovechar de esto para hacer lo siguiente. Y si he ido demasiado rápido, me acaba de llamar otra vez en un momento. Feliz para recapitular algunas de las cosas de la imagen. Debe verse a sí mismo en una página como esta. Tan agradable de Google, y que están entre los mejores de proporcionar no sólo APIs, pero APIs libres que se puede jugar con o utilizar comercialmente. Ellos comienzan a cobrarle si su uso es alta, pero me fui por delante de antemano y nos firmado para obtener una cuenta gratuita que, con suerte, 10 ordenadores no nos descalifica para de repente. Así que espero que este demostración funcionará. Y notan que tienen APIs para Android, iOS, servicios web y web, sea ​​lo que sea. Vamos a centrarnos en la web. Así que haga clic en el cuadro de color rosa, tela, y que le llevará, con suerte, a una página aquí. Y tienen un montón de APIs. Y puede ser un poco abrumador al principio, pero nos van a seguir a través de lo que queremos. En la parte superior izquierda es el Google Maps JavaScript API, la API de JavaScript. Así que adelante y haga clic en que uno. Y que le llevará ahora a la siguiente página, demos y código de ejemplo. Permítanme Alejar aquí. Y déjame que nos desplazamos hacia abajo a-- a donde dice pasos de inicio rápido. Su pantalla debe parecerse a la mía. Y hay dos pasos, conseguir una clave y comenzar a desarrollar. Ya lo hice el primer paso para nosotros, conseguir una clave llamada. Y esta es una idea común. Una clave de API es generalmente solo un número aleatorio grande o cadena que se supone para pegar en su código, por lo que Google sabe quién es usted cuando está utilizando su servicio, su API. No quiere decir que estamos ser acusado de nada. Y ahora, haga clic en, en lugar de uno, haga clic en empezar a desarrollar. Si sólo yo pudiera agitar más si no sabe dónde estamos. Así que apenas arañan la superficie, pero lo que aquí Pensé que sería convincente es tener en realidad todos nosotros, utilizando Cloud9 en una ventana y este tutorial en otra ventana, deja para conseguir realmente nuestra propia la aplicación en funcionamiento que incorpora una costumbre Google mapear en nuestra propia página web, y luego añade una o dos características. Pero sólo tendremos que rascar la superficie de lo que podemos hacer. Por lo que sólo una comprobación de validez rápida. Es todo el mundo en esta página, API de JavaScript de Google Maps? Debe decir cómo empezar. No vamos a ir a través de todo esto de ninguna manera. Aceptar, en otra pestaña, si no lo hace que se abra, no entrar en Cloud9 y se consigue sólo una nueva pestaña, en última instancia. Así que de nuevo, c9.io de ayer, c9.io, y acaba de crear un nuevo archivo. Y seguir adelante y llamada él lo que quisiera. Llamé a la mina map.html. Llamarlo nada que terminan en .html. Y que debe estar más o menos donde estoy en este proceso con sólo un símbolo parpadeante en un vacío pestaña llama algo así como map.html. O archivo, archivo nuevo esta vez. Y ahora, a lo largo de la API de JavaScript de Google Maps, vamos a dejar de leer a través de todo este texto. Pero nótese que es hola mundo de hecho, en todas partes, lo ves ahora. Hola mundo tiene esta gran colorido ejemplo de un montón de HTML. Vaya por delante y copiar y pegar sólo eso HTML, por lo que desde el tipo de documento en la parte superior todo el camino a la etiqueta HTML de cierre, vaya adelante y copiar todos los que- de nuevo, eso es bajo el hola mundo ejemplo-- y pegar esto en la pestaña Cloud9, de modo que ahora la pantalla debe verse más o menos como la mía. Y se puede guardar, pero no cargarlo por el momento. Veamos primero en el código y ver si no se puede inferir o aprender de lo que es Google nos ha tenido ciegamente copiar y pegar. Ellos sólo quieren ayudar, literalmente, que podamos empezar, pero no hay mucho complejidad realmente allí. Cualquier pregunta por el momento? Estamos a salvo para seguir adelante? DE ACUERDO. Tan rápidamente, vamos a hacer algunas comprobaciones rápidas. Línea uno de lo que yo ver, y es de esperar, se Véase, ¿qué significa eso, HTML tipo de documento? Kareem, recordar? AUDIENCIA: [inaudible] DAVID MALAN: Sí. Aquí viene HTML 5. Mientras tanto, la línea de dos en el pantalla aquí significa oye navegador, aquí viene el HTML real. Línea de tres es eh navegador, aquí viene la cabeza. Línea de cuatro es, por supuesto, hey navegador, aquí viene el título. ¿Qué línea de cinco do? En realidad, esto no hace realmente hacer nada para nosotros. En este caso, sólo se cambia el tamaño la página a un defecto. Línea de seis, no hemos hablado, pero especifica la codificación de caracteres. Hay diferentes maneras de codificar archivos, especialmente para las lenguas extranjeras. UTF-8 solo tiende a ser el valor por defecto. Así que ahora vamos a ver en línea siete a 16, un poco de CSS. Y a pesar de que no hemos visto todas estas cosas antes, que tipo de se puede inferir. Así que en ocho medios, hey navegador, aplicar todo lo siguiente a la que dos etiquetas, ¿aparentemente? El HTML y el cuerpo de texto. Así que la coma es lo nuevo allí. Y eso es sólo una forma de especificar varias etiquetas a la vez. Entonces tenemos las llaves. Así que al parecer, esto le dice al navegador, hacer que la altura de la página 100%. Así que incluso si hay muy poco contenido, hacer toda la página, hacer lo llene la página. Hacer el mapa en última instancia a llenar la página. Margen, ¿qué significa eso? Eso es por lo general como arbitraria espacio en blanco alrededor de los bordes que algún diseñador browser decidió que debería estar allí, porque tipo de cosas hace aspecto más limpio. Pero no queremos eso. Queremos ir el mapa todo el camino hasta los bordes. Relleno, similar en espíritu a los márgenes. Márgenes significan, medios de relleno fuera en el interior, pero es el mismo tipo de trato. Es un poco de un tampón entre el usuario y los bordes. Y luego la línea 13 es un buen oportunidad para una revisión rápida. Lo que hace muestra de la correspondencia aguda significa, o mapa hashtag significa? Lo qué se refiere, en principio? AUDIENCIA: [inaudible] DAVID MALAN: Exactamente. Esta propiedad, esta propiedad CSS se aplica a una sola cosa, la etiqueta HTML que tiene un diámetro interior de cotización, fin de la cita "mapa". Y ahora vamos a avanzar rápidamente, de desplazamiento hasta la parte inferior del archivo, el cual No está demasiado lejos, y aviso en línea 19, si pega exactamente como lo hice, la línea 19 tiene sólo un div, que es una división de la página, que ayer llamado una región rectangular. No tiene nada en ella. Es una etiqueta abierta, el código de cierre. Pero tiene un identificador único. Así que lo que parece ser pasando aquí es Google se está preparando nuestra página Web para tiene una altura total de 100%, y sin relleno, sin márgenes, porque lo que vamos a poner en el interior de este div, cuyo ID es único mapa, es un mapa incrustado real. Y queremos que se llene la página y no sólo haber algún pequeño rectángulo en el medio. Así que hace hincapié en la línea 14 del mismo modo, la mapa mismo debe tener una altura de 100%. Así que ahora cuenta entre las líneas 20 y 28, esto es código JavaScript. Y esto es, a pesar de que es sintácticamente un poco extraño, No hay casi nada que hacer aquí. En la línea 21, esto es declarar algo que se llama una variable. En lugar de llamarlo cantidades, como lo hicimos antes, que estamos diciendo con mayor precisión var, que sólo significa variable. Podríamos haber utilizado que, en código de Nick, pero no lo hizo, por lo que no se molestó en hacerlo bien. Es una variable llamada mapa, y luego está una función que es aparentemente llamado initMap. Así que esto es como nuestra propia personalizada pieza del rompecabezas en Scratch. Hemos creado una pieza de funcionalidad llamada initMap, y se puede inferir tipo de Que está pasando aqui. En el lado izquierdo, tenemos una variable, por lo que vamos a poner el siguiente cosa dentro de esa variable, de derecha a izquierda. El lado derecho dice, oye navegador, dame un nuevo mapa de Google. Y google.maps.Map es sólo una manera cobarde de especificar que esta funcionalidad pertenece a Google Maps. Tras el paréntesis, que hemos visto esto antes, hey navegador, conseguir me los elementos de la página, el etiqueta de la página cuyo identificador único es-- AUDIENCIA: [inaudible] DAVID MALAN: --map. Y lo que está pasando, así, esta línea juntos, línea 23, está esencialmente diciendo: Hey navegador, ir a por mí que div vacío en la página cuyo identificador único es el mapa, porque quiero insertar it-- en inyectar en ella, si Voluntad-- un montón de contenido que pasa a estar viniendo de la web, después. Y Google está haciendo todo eso para nosotros. Así que de nuevo, al final del día, tenemos este ejemplo de abstracción. No tengo idea de qué es un mapa o cómo implementar un API mapa. Nosotros no necesitamos. Sólo tenemos que contar el mapa donde poner en sí, y dejar aquellos implementación subyacente detalles Google. Ahora hay al parecer dos piezas de datos que este ejemplo es proporcionar a la API de Google. Al parecer, el centro del mapa, y el nivel de zoom, por así decirlo. ¿Y alguien que reconozcan esos coordenadas, latitud y longitud? Probablemente no, pero podemos volver al tutorial, ver literalmente. Pero lo veremos en un momento. nivel de zoom es un valor entre, no lo creo saber, uno de cada 13 o algo por el estilo. Simplemente tiene que ver con lo lejos que está amplía o se reduce, y eso es todo. Y ahora al final de la página, línea de aviso 29-- que es un poco fea, porque wraps-- que esta línea de código es lo que se descarga a la API actual navegador de Google. Todo el código que Google de Los ingenieros han escrito que implementan toda esta opción de mapas integrables. Ahora vamos a no cambiar nada. Si estás siguiendo, seguir adelante y sólo tienes que guardar ese archivo, si de hecho tiene lo que tengo. Ir a su dirección URL. Puede hacer clic en el botón Ejecutar encima de la tapa y que le dirá que la URL de su servidor Web de nuevo. Y es que dará lugar a una nueva pestaña. Si hace clic en Abrir para map.html, y las probabilidades son que eres va a conseguir una alerta, un mensaje de error, ¿verdad? mensaje de error, el mensaje de error? Así que, lamentablemente, el error mensaje no es que esclarecedor a menos que realmente abre la consola, que ficha especial que mantiene la apertura de ayer y un poco el día de hoy. Pero me encontré con esto antes, así que ya averiguado cuál es la solución. En las diapositivas de hoy en día, o más bien, en Cloud9, previo aviso que no hicimos algo deliberadamente. Nótese que esta etiqueta script en línea 29, si se lee a través de ella, es como maps.googleapis.com/ algo, algo, algo, a continuación, observe a alguien, uno de los desarrolladores, escribió en el total de capital cartas, su clave de API. Hay que pegar algo allí. Y este fue el paso Lo hice por nosotros antes, y de nuevo puede ser que la lista negra con si de repente, 12 o más de nosotros comenzar a utilizar la misma clave, pero vamos a ver qué pasa. Así que si vas en la actualidad de diapositivas, una diapositiva más adelante, hay esta cadena muy cobarde que buscan de texto. Vaya por delante y simplemente copiar y que pegarlo donde pone su clave API. Esa es la que me inscribí. Y definitivamente no trate escribir de forma manual, porque se siente lleno con errores ortográficos, potencialmente. Así que sólo debes copiar y pegar eso. Y que va a hacer que la línea más tiempo, pero ahora, sólo para ser claros, que debe ser un poco más como este, donde la clave no es igual capitalizado gritando en usted. Guarde la página, volver a la otra pestaña, vuelva a cargar, y la esperanza de ver un mapa de dónde? AUDIENCIA: Australia. DAVID MALAN: Australia. Así que al parecer esos son los Coordenadas GPS Australia. Y déjame caminar alrededor por un momento y ayudar a cualquier persona que no es muy allá, pero permítanme proponer, a través de Google, encontrar las coordenadas del GPS de su propia ciudad natal o en su propio país de origen. Y, probablemente, Google puede convertir esto arriba, o la Wikipedia le puede decir. Pero elegir dos valores diferentes de latitud y longitud, volver y pegarlos, y vuelva a cargar la página después de guardar y ver si se puede tener una de los mapas para su propia ciudad natal. Y cuando haya terminado con que, el seguimiento challenge-- y voy a dar un poco menos sentido, deliberadamente, de modo que usted deliberadamente tienen que luchar por un par minutos con la documentación, cambiar el mapa para ser no esta predeterminado de dibujos animados, pero un mapa de satélite. Así que en realidad se ve por satélite las imágenes en lugar de los colores bonitos. Y la pista te voy a dar es cambiar el tipo de mapa. Volver a los que conseguir comenzado la página en busca de inspiración. Como es posible que haya recogido, si usted está buscando, Hay muchos mas cosas que puedes hacer. Algunos de ustedes ya tienen cambiado el tipo de mapa. Pero se puede hacer-- por ejemplo, me dejó ir a algo que hicimos para el curso Me teach-- maps.cs50.net. Uno de nuestros estudiantes de licenciatura hicieron esto. Nos centramos nuestra hoja sobre Harvard Yard y superponer todos estos nombres de edificios, y tuvimos que añada esto. Así que si quiero buscar, por ejemplo, Matthews Hall, tenemos un pequeño menú desplegable. Y creo que él está usando Bootstrap, el biblioteca hemos comentado anteriormente para esto. Y si se hace clic en Matthews Hall, de inmediato salta el mapa para un cierto ubicación, y se nota que una imagen en esta pequeña ventana emergente. Pero incluso esta pequeña pop-up, que no puso en práctica. Si me desplazo hacia abajo en nuestra conseguir comenzado la página y buscar ventanas de información, verá que algunas de las funcionalidad que usted mismo puede sumar, aunque con un poco más la complejidad, es algo que se llama una ventana de información. Y si hago clic en un ejemplo aquí, y esto es lo que es divertido, se pueden hacer cosas como esta, al hacer clic en un marcador y luego voila, la información aparece. Así que todavía no hemos introducido suficientes características de JavaScript para pintar un cuadro de exactamente cómo se podrían cablear todas estas cosas juntas, pero hemos tipo de arañado la superficie. De hecho, lo que he hecho cuando He hecho clic en ese marcador, fue de activar un evento, una llamada en el evento clic. Y que de hecho vimos una evento el día de hoy, el llamado presentar evento, cuando estábamos previniendo el usuario desde la búsqueda de los gatos. Para ello hemos tipo de recogimos y lo elegimos de entre todas estas diversas características, para darle un sentido, es de esperar, de lo que en realidad se puede hacer con un poco más comodidad en la programación, y recursos completamente gratis. ¿Alguna pregunta? ¿No? Esta es su última oportunidad, al menos hoy en día, un viernes, para conseguir algo de su pecho para que al salir de aquí sentirse seguro y cómodo. Sí. AUDIENCIA: ¿Por qué no hacer se agrega una cosa más? DAVID MALAN: Oh mi Dios. Necesito descansar este fin de semana, creo. ¿Otras preguntas? AUDIENCIA: [inaudible] DAVID MALAN: Usted can-- en Internet Explorer, que en paz descanse, que solía ser capaz de poner VB guión, guión básico virtual, pero que en realidad nunca se puso de moda. Así que la respuesta corta es simplemente JavaScript. ¿Otras preguntas? De acuerdo, bien, déjame hacer esto. Déjame agarrar nuestros colegas exterior. Tienen algún tipo de evaluación formas que ellos quisieran que cada uno para pasar unos minutos para llenar. Ellos quieren cobrar esa forma y cualquier renuncias que tenga al exterior. También tendrán certificados. Supongo que hay todavía algunos aperitivos fuera. Déjame pasar éstos hacia fuera, y si tiene alguna pregunta, mientras tanto, Voy a caminar alrededor de más de forma individual y podemos empezar. Si por supuesto. AUDIENCIA: [inaudible] DAVID MALAN: Eso es suele ser cierto en estos días. Ciertamente, con la web software, usted se inclina en los demás o eres estéticamente usando cosas como Bootstrap, por lo que no lo hace tienen que poner en práctica el bajo nivel detalles de los menús y botones y todo eso. Usted está apoyado en una persona como Google para que no tienen que construir un Uber negocio y un negocio de mapeo, y cualquier número de semejante aplicaciones. De hecho, los inicios de sesión son muy populares, también. Si ha utilizado Spotify o cualquier número de sitios web, podrás iniciar sesión en algunos sitios web que utilizan Facebook. ¿Cuál es tan agradable, hay son APIs para los inicios de sesión hoy en día, de modo que usted no tiene tener su propia tabla de usuarios y todos los de su propia base de datos necesariamente en la misma medida. Puede dejar que Facebook haga todo de que la complejidad para usted. Así que es un momento emocionante, honestamente, en la programación, porque hay tantos terceros servicios que se pueden construir en la parte superior de. Y de nuevo, el precio que se paga es ya sea financiera o el tiempo de inactividad. Si Google se cae, lo mismo ocurre con Uber, sin duda, pero tal vez eso es una razonable equilibrio. Y de nuevo, que era uno de los temas, con suerte, durante el último par de días, Son estas compensaciones. Y rara vez es allí va siendo una respuesta correcta. Realmente es el mejor de dos o más respuestas. Pase éstos alrededor. Y estas cuentas Cloud9 continuarán para trabajar, en teoría, a perpetuidad. Es posible encontrar si esperas unos días o una semana o más para volver a entrar en ellos, que podría tomar como una o cinco minutos para abrir una copia de seguridad, pero eso es sólo porque ponen en estado de reposo para ahorrar en recursos.