>> [REPRODUCCIÓN DE MÚSICA] >> DAVID MALAN: Este es CS50, yeste es el comienzo de la semana ocho. Y estamos tan emocionados de dar la bienvenidaespalda, gran sorpresa, el propio Ramón CS50 Galván, estudiante de último año en ascenso que ha sidopasar los últimos meses desde julio en Los Ángeles, en Hollywood,literalmente trabajando en un nuevo televisor de marca espectáculo llamado Colonia, el creador de los cualeses en realidad un alumbre de Harvard sí mismo. Y así que estamos muy contentos de ver estedebut en la red EE.UU. este mes de enero. Así que estad atentos para eso, y paramás Ramón para las semanas por venir. >> Ahora sé que el final está cerca. Y lo que esto significa es que no haycasi nada queda de CS50, es triste decirlo. Tenemos sólo tres problemasconjuntos izquierda- hay problema establece six-- que está ensus manos ahora o pronto serán, a finales de este week-- está destinado a salvarnuestros mundos de la línea de comandos, donde hemos pasado la mayor parte de nuestro tiempo utilizandoC, y el mundo de la programación web. Bueno, verás un montón de ideastomado de la obra de línea de comandos, sino también una gran cantidad de nuevoe ideas interesantes que también van a ser afín aaplicaciones móviles y la tecnología, más en general, con el que sechicos son todos conocemos hoy en día en las computadoras portátiles y los teléfonos y similares. >> Por lo que usted no implementauna página web o una página web per se, pero un servidor web real. Usted tendrá que escribir el resto de un servidor webescrito en C, cuyo propósito en la vida es recibir peticiones HTTP, esossobres virtuales seguimos hablando sobre y responder realidad ya sea conalgunos content-- estáticos como un punto HTML archivo, o un punto JPEG ocualquier otro número de archivos, o incluso un archivo PHP con lo que tu webservidor va a interpretar que PHP código y escupió los resultados. Ahora, le hemos proporcionado conun poco de marco para it-- hecho elcódigo de distribución para el problema establece seis es más de 1.000 líneas de largo, unmuchos de los cuales son los comentarios, para ser fair-- pero esto es realmente significabaser una oportunidad para conseguir sus manos sucias de buceoen un proyecto bastante grande que hemos muy específicatalladas en piezas de para usted, por lo que realmente al salir de CS50 yentrar en el mundo real de la programación y quieren incursionar encualquier número de proyectos, tendrás mucho mayorconfort descarga de alguna fuente código, algunos de código abiertoproyectar en la web, y el buceo en y hacercambios que se le parezca. Problema fijó siete va a ser acerca dehacer su propia aplicación basada en la web que toma la entrada dinámica yproduce salida dinámica en la forma de un sitio web de etrade.com similares. Y un problema fijó ocho se centrará en todavíaotro idioma conocido como JavaScript. >> Mientras tanto, la finalproyecto está en el horizonte. El llamado pre-propuestase debe a la semana a partir de hoy. Pre-proposal-- por la especificación,que está en website-- de CS50 es una oportunidad bastante casual paraque usted envíe un correo electrónico muy sucinta a su compañero de la enseñanzasólo para informar a o ella de lo que estás pensando, aél o ella utilice como caja de resonancia. Y tener una cordura check--si usted está pensando acerca morder demasiadomucho o tal vez demasiado poco, o tal vez usted no tiene idea algunay quiere participar en una conversación. >> A partir de entonces es una propuestay el informe de estado, el denominado aquí en hackathon CS50Cambridge para estudiantes de Harvard y Yale por igual. Del proyecto finalaplicación es entonces debido. Y luego una feria CS50 aquí, en Cambridge,así como otro en New Haven. Así que la propuesta, eche un vistazo ala página web de esas menciones. >> Pero lo más emocionante, también, es unoportunidad de ensuciarse las manos, y sus mentes abiertas a un todomontón de temas y herramientas y técnicas que son auxiliaresal plan de estudios básico del curso, pero no obstante relacionados. Y también maravillosa escalones parahaciendo proyectos finales muy interesantes que van mucho más allá de material que hemos cubiertoformalmente en problema fija o en conferencia. Así que ir a la página web del CS50 paratoda la lista de seminarios. Si no se registra, sin embargo, eso está bien. Vaya por delante y regístrate quieto y lo haremosseguimiento con un enlace en vivo, el día y hora es en el sitio web. Y todo serágrabado y puesto en línea si usted no puede hacer que eldías y horarios determinados. >> En cuanto a lo que se avecina thereafter-- así,por supuesto, está el hackathon CS50. Esta foto, recuerdo, desde la semana cero tomadaalrededor de las 4 am una noche en años anteriores. La feria CS50, que de nuevose llevará a cabo en ambas ciudades. Y entonces, para plantar lasemilla, a pesar de que todavía tener un mes más a la izquierda del semestre, sidesea unirse a la propia enseñanza de CS50 personal, y desea iniciarpensando en convertirse en una CA, o compañero de enseñanza, saber quevamos a empezar a hablar más sobre eso a finales de este semestre. Pero aquí está la fotola mayor parte de el equipo de este año. >> Y así, PHP-- y yo estaba tan tristela semana pasada que [? Allyse?] Amablemente fue al esfuerzo de llegarnosotros estos maravillosos accesorios que yo no las usamos, por lo queen realidad sólo parecía un poco estúpido que teníamos una pala sentado aquí tododía miércoles pasado, y un poco de cuchara. Pero esta fue mi metafóricamanera de tratar de pintar la imagen de por qué estamos en transiciónde C a un lenguaje como PHP. Y lo mismo podría decirse de cualquiernúmero de Las Lenguas Java, Python, Ruby o racimos de otros--, pero mientras que enC, por ejemplo, escribir un programa en C normalmente podría ser comoteniendo una cuchara como esta y la excavación de un agujero en eltierra, en la arena o la suciedad. PHP le permite tomar muchobocados más grandes fuera del problema, escribir código mucho menosutilizando una herramienta mucho más pequeño, porque hay mucho másfuncionalidad reconstruido en. >> Ahora, si nos quedamos muy dramática,tendríamos algo para palear aquí, pero que así sea. Mientras tanto, el otrometáfora nos ocurrió es, por supuesto, usted podríausar algo como una llave a martillar en algo así como un clavo. Pero, por supuesto, el derechoherramienta para su uso va que no es tanto lalenguaje llamado C-- y ahora sólo molesto[? Sanders,?] Probablemente, lo arreglaremos lo que tarde--la herramienta adecuada para utilizar con frecuencia No va a seresta herramienta de nivel más bajo. Y, en efecto, C no es un lenguaje quela mayoría de ustedes alguna vez va a utilizar, o necesariamente deben utilizar de nuevo. >> Y de hecho, un pocosecreto-- la única vez Yo uso C mí es más o menos entreSeptiembre y diciembre de cada otoño semestre. Y eso se debe a queutilizarlo como una oportunidad para enseñar los fundamentosde la programación, y con ella la computadorafundamentos científicos, datos las estructuras, los algoritmos y lacomo-- pero muy rápidamente ¿verdad ver ahora que la sintaxisy las ideas que subyace C son tan maravillosamentetransferible a más moderno lenguajes de alto nivel, comoPHP y Python y Perl y Java y Objective-C- en realidad, no tantoObjetivo-C- pero Swift, estos nuevos lenguajes que muchos de ustedesluego incursionar con ustedes proyecto final. >> Así que sin más preámbulos, vamos a realidadusar PHP para resolver algunos problemas. Recordemos que desde el principio, la últimasemana, sólo utilizamos CS50 IDE, escribimos un pequeño programa dinkyque acaba de decir, "Hola mundo". Y luego lo guardé enun archivo llamado hello.php. Y entonces me encontré con este comando. >> ¿Y por qué? En Inglés, ¿qué está pasando aquí? ¿Qué estaba haciendo cuandoCorrí este comando? >> ¿Sí? >> AUDIENCIA: Hay un poco de PHP funciónque dice lo que está en-- entiende eso. DAVID MALAN: Bueno, hay alguna funciónPHP-- y déjame ser más específicos, hay un programa llamado PHP, alias El intérprete, que entiendeel contenido de hello.php, y lo interpreta arribaabajo, de izquierda a derecha, y hace lo que dicen esos comandos. Los comandos de hello.php, por supuesto,es sólo la fuente code-- funciones y variables y bucles ysimilares, que nosotros mismos han comenzado a escribir en PHP. >> Pero a diferencia de C, la cual esun lenguaje compilado, PHP que acaba de escribir, y ejecutarlo. Se salta ese paso intermediario deconvirtiéndola en ceros y unos, y luego ejecutarlo. Y así, lo que es una ventaja de esto? ¿Por qué estamos omitiendo el paso? ¿Por qué los lenguajes más modernostienden a omitir este paso? ¿Cuál fue el beneficio? >> O simplemente intuitivamente? Incluso si no hasescrito mucho antes de PHP, lo que es beneficioso por nocompilar el código qué te parece? ¿No? No cometer? Rascarse la cabeza? Sí. >> AUDIENCIA: Más dinámica. >> DAVID MALAN: Más dinámica? ¿A que te refieres? >> AUDIENCIA: [inaudible] DAVID MALAN: OK, bueno, por lodependiendo de la entrada, usted no tiene que compilar cada vez. Y realmente es tansimple como lo que-- es el punto de continuarpara compilar el código? Esto es sólo un paso que esmaking-- esto está requiriendo, Durante los últimossemanas, el doble de los pasos como se acaba de ejecutar su programa. Ha sido útil para ver quever algunos mensajes de error y así sucesivamente, pero sigue siendo sólo un paso molesto. >> Y así, los programadores se dieron cuentacon el tiempo, ¿por qué no lo hacemos empezar a escribir los idiomas que no lo hacennecesitará ese paso bastante mecánico, de manera que apenas puede escribirsu código y ejecutarlo. Pero lo que era el precioque vimos que pagamos última semana, con un ejemplo concreto? ¿Sí? >> Velocidad. Asi que [? lo que es?] intérpretesun poco más lento, en ese ceros y unos sonagradable y rápido para un ordenador de entender, debido a que laIntel CPU, o lo que sea, solo entiende lo que está pasandocon aquellos patrones de bits. Mientras que un intérpretees un programa que realmente tiene que leer la fuente Asciicódigo que usted ha escrito, y la convierten, por así decirlo, oaveriguar cómo se convierte en última instancia, de ceros y unos. Así que sólo se necesita un poco depoco de un impacto en el rendimiento. Así que es un poco de un trade-off. Ahora bien, si lo hacemos aquí, déjameseguir adelante y hacer un ejemplo de la siguiente manera. Si voy aquí, archivo nuevo, voypara guardar esta vez es hello.php. Y ahora voy a seguir adelantey decir: "print hola mundo" - y recuerdo que puedo usar de impresión, no lo hagoque utilizar la impresión-F. Y ahora aquí, si lo hago de PHP de hello.php, me huh--no parecen haber interpretado. ¿Qué hice mal? >> AUDIENCIA: Las pulseras en ángulo. >> DAVID MALAN: Sí, usted necesitaque la parte superior del ángulo soporte hacia arriba. Así que es un poco molesto, perote acostumbras a ella rápidamente. Si tengo que escribir código PHP, Igeneral tendrá que decirle al programa, o decirle al intérprete, heyPHP, aquí viene algo de código PHP. Y a continuación, por si acaso, lo haríacerrar esta no con esto, sino con ángulo de marca simplemente preguntasoporte, de modo que ahora aquí abajo, si me quedo esto otra vez, ahoraMe sale el resultado deseado. >> Ahora vamos a hacer una ligera optimización,sólo para que lo has visto antes. Esto es un poco molesto que metiene que ejecutar PHP espacio hello.php, porque en el pasado Ipodría simplemente escribir slash dot nombre del programa, el cual es una especie de agradable. Es una especie de una mejor experiencia de usuario. >> Así que resulta que usted puede hacer estoen PHP con el I following-- puede utilizar esta bastante crípticaencantamiento en la parte superior aquí, que generalmente se llama un shebang,mediante el cual se trata de un símbolo fuerte, por decirlo así, esto es una explosióno un signo de exclamación. Y esto ahora es la ruta de acceso a un programaen un típico sistema Linux que se llama medio ambiente, o env. Y esto line-- larga historialínea short-- uno justo dice, hey equipo, encontrar el PHPintérprete para mí en el medio ambiente, encontrar en su memoria, por así decirlo. >> Y lo que es agradable ahora, seque si voy por aquí, Yo puedo hacer slash dothola php punto, o-- hmm. Permiso denegado. Bueno, verás aún más de estacon el problema de establecer siete, si tener no ya con los permisos. Resulta que necesitopara ejecutar este comando llamado [? chamod?] para el cambiomode-- un plus x hello.php. Necesito [inaudible] éste adicionalpaso que está diciendo a mi equipo, hacer ejecutable hello.php. Y ahora ver lo happens-- dotslash hello.php, simplemente ejecuta. Yo no necesito especificarel intérprete más. Y puedo hacerlo aún más bonita,aún así, si puedo cambiar el nombre de esta cosa. Si me mudo hello.php sóloHello-- lo notan en la parte superior izquierda, El nombre del programa esde hecho ahora sólo Hola. Ahora puedo hacer que se vea como un programa en C,a pesar de que está escrito en PHP-- o francamente cualquier númerode otros idiomas. >> Así mejora marginal,ninguna diferencia funcional. Pero es sólo un poco de curiosidadahora, para que usted pueda escribir programas en cualquier idioma, y el usuario no lo hacetiene que saber o cuidar lo que son. Bueno, echemos un vistazo a una másejemplo convincente ahora que azotaron por adelantado. Y esto se llama quote.php. Y está disponible en línea. Y se dio cuenta de que es bastante short--pero es un programa de línea de comandos que es ir a buscar precios de las accionespara mí, lo que es en realidad va ser afín al problema establecido siete. >> Así que vamos a ver lo que estoy haciendo. En la parte superior Tengo laabierto abrazadera signo de interrogación PHP. Entonces yo tengo esta línea, con lo que soyque requiere un archivo llamado functions.php-- vamos a vermás sobre esto en un poco, pero esto es como C deversión de aguda incluyen, a dónde quieres irincluir otro archivo. PHP llama requiere, aunqueTambién tiene un include función. Y resulta que es function.phpsólo algo que escribió antes de la clase. Lo puse en el mismo directorio, porqueQuería factorizar algún código que lo que se quiere utilizar en otros lugares. >> Mientras tanto, usted puede probablementeinferir lo que está pasando aquí. Esto es un poco diferente de C-- perolo que quiero decir con su uso apropiado? Traducir esta más técnico. ¿En qué circunstancias son yosalir del programa, o de salir? ¿Sí? >> AUDIENCIA: Cuando usted no tienedos argumentos de la línea de comandos. >> DAVID MALAN: Cuando no tengopara ordenar los argumentos de línea. Y recuerda que uno de losargumentos es en sí mismo el nombre del programa. Y el segundo va a serotra palabra que escribo después de la solicitud. Así que al igual que C, estaes mi manera de comprobar, cooperó el usuario yejecutar el programa como era mi intención? Ahora, hay algoun poco diferente con C-- primero de todo lo quetener esta muestra de dólar, y lo que un dólarfirmar denotar en PHP? Sólo una variable. Eso es todo-- simplemente una variable seguida delo que quieras en realidad llamarlo. Observe que hay algoque falta de mi programa PHP, al igual que había desaparecido el pasadosemana, frente a C, que es lo que? >> A tipos, pero también algo más. No hay algofunction-- función principal. No hay función principal. Usted acaba de empezar a escribirsu código sin tener que preocuparse bastante arbitrariaconvención de nombrar algún incumplimiento principal función. Así arg C es realmenteuna variable global que el intérpretepone a disposición de mí. Ahora, esto es interesante. Así que busque cosas. Signo de dólar de valores es en laa la izquierda, que es mi variable. Al lado derecho,hay al parecer una función en PHP llamada de búsqueda queEstoy pasando mi última línea de comandos argumento a-- cualquiera que sea la palabra es. Y veremos cómo estofunciona en un momento. >> Y luego, por último, estoy informar el precio. Estoy imprimiendo un soloparticipación en tal y tal. Y recuerde, este es elforma en PHP-- manera en PHP-- en el que no tienes que hacerel signo del dólar S más. Usted sólo puede usar llavesy conecte de alguna variable. Usted no tiene que preocuparse deusando printf de la misma manera. >> Y como un aparte, cuando se pone una variabledentro de comillas dobles como este, está utilizando una técnica de fantasíallamado interpolación de variables. Sólo significa conectar la variable aquí. Y como un aparte, algunos de ustedes que vienende otros fondos de programación, usted no puede usar comillas simplesalrededor de las cuerdas para hacer esto. Debe utilizar comillas dobles parainterpolación de variables para trabajar. De lo contrario te literalmentever esas llaves. >> Así que, por último, vamos a seguir adelante y ejecutar esto. Quiero dejar mi terminal un poco más grande. Déjame ir adelante y corrodentro de mi directorio de cotización. [? CDsource?] [? AM?][? cotización?] dot cotización PHP PHP, y yo voy a buscar algocomo GOOG, que es su símbolo, y una acción de su nuevo nombre,Alfabeto Inc, un costo de $ 717, a partir de hoy. Muy bien, si queremosejecutar este nuevo, nadie tener otro tablero de cotizacionesquieren mirar hacia arriba? >> Microsoft creo que eséste, MSFT-- $ 53. Creo que Yahoo es quizás eso. Y es que Facebook. >> Entonces, ¿qué es este programa haciendo? La magia parece estar incrustadoen que la función de búsqueda. Así que vamos a echar un vistazo rápido. >> Resulta que no vienecon PHP, está en functions.php. Y no vamos a ir a través deesto en gran detalle, notar la palabra clave aquí esque en la línea seis de functions.php-- Yo, literalmente, digo función. Puedo especificar el nombre de mi función. Entonces puedo especificar ningunaargumentos o parámetros, Quiero esa función a take-- ningún tipo. Y luego ponerlo en práctica. >> Y voy a agito mi manoen la implementación, ya que está justo bastante avanzadaahora, pero vamos a ver de nuevo en realidad en una semana en el problema planteado siete. Pero puedo limpiar esto, también. También incluí enel código de hoy una versión de la cita, que no tiene archivo PHP punto. Porque lo que es, presumiblemente, en elparte superior del programa llamado simplemente citar? Que el llamado shebang-- laencantamiento bastante críptica que dice encontrar PHP y despuésejecutarlo en mi código aquí. >> Muy bien, así que traenosotros donde lo dejamos última tiempo-- aunque conalgunos ejemplos más avanzados. Para cualquier duda hasta el momento acerca dePHP o lo que estamos haciendo? No-- bien. ¿Sí? >> AUDIENCIA: Dentro de laArchivos HTML, hacen usted-- [? Vos si ?] [? simplemente llamarlo?]un [inaudible] archivo PHP? DAVID MALAN: Buena pregunta. En un contexto web, que estamosliteralmente a punto de transición a, no utiliza la llamadatinglado en la parte superior, porque el server-- web a menudo unaprograma llamado Apache o Microsoft IIS, Internet Information Server ocualquier número de otro software de servidor web, Sabe que cuando veun archivo PHP punto, que debe ejecutar el intérprete en ella. No se ve en esa primera línea. Así que este primer truco líneaes sólo cuando estás línea de comandos escribiendo programs--que no vamos a hacer muy a menudo, pero es nuestra forma de puentenuestros ejemplos C a ahora nuestra PHP. >> Así que vamos a efecto Bridge Esta mundoDel mundo de la línea de comandos a la web haciendo lo siguiente. Déjame ir por delante y dibujaraquí sólo por un momento. Así que si tenemos un servidor web, o mejor dicho,si tenemos mi portátil por aquí, que voy a dibujar así. Y aquí tenemos elinternet en alguna forma. Y luego aquí, tenemosun servidor en un building-- así es como el internetworks-- y aquí es un servidor con algunas luces tal vez. Lo que realmente está pasandoentre estas dos conexiones? >> Así que en este edificio es un servidor web. Eso es sólo un ordenadorque se está ejecutando alguna operación system-- tal vez el software libre llamadoApache, que CS50 IDE está en marcha. Así que en realidad se puedepensar en este edificio como en el edificioque se almacena CSt0 IDE. Ahí es donde todos ustedes tienencuentas, donde todos ustedes tener su propio servidor webcorrer, todos ustedes tener sus propias direcciones URL únicas,cuando empezamos a discutir, y verás más en P. establece seis. >> Aquí está mi portátil en algún lugarotra cosa en Internet. Y así, cuando visito un URL que pertenecea mí, que el tráfico de Internet va al servidor, el servidor derecibir una HTTP request-- como llegar index.html y esrespondiendo a esa página web. Así que ese es el paradigma general. Mientras que todo lo que hastahasta ahora hoy en día, todo que estaba ocurriendo sólo en elconfines de este edificio. Yo estaba usando mi portátil, peroMe conecté con CS50 IDE, por lo que todos los programas que se ejecutanestaba dentro de ese servidor, sí. >> Pero ahora, vamos a empezar la reutilización de PHPescribir algunos programas reales que son servidos por un servidor web. Y para hacer esto, me voy a iren un montón de ejemplos que introducir esta idea aquí. Así que esto es una especie de una forma elegante deque describe un paradigma de programación. >> Y de hecho, al salir CS50o trabajar en proyectos finales, o tomar algunos siguenen clase, comenzarás al ver que el mundo--especialmente después de haber crecido con lenguajes como Cque son súper bajo level-- se dan cuenta de que no hay mejorformas de software de escritura. Hay ciertapatrones que usted puede seguir, ciertas formas de organizar sus archivosy formas de nombrar a sus funciones, de manera que cuento largo,el mundo ha llegado con un montón de siglasy los nombres de las formas de programación. Estos son sólo técnicas que podría utilizar. >> Y uno de ellos se llama MVC,para el Modelo Vista Controlador. Y esto es sólo, porAhora, una excesivamente complicado manera de decir cómo se debe diseñarun sitio web basado en PHP, en nuestro caso. ¿Cómo organizar sus archivos,¿cómo organizar su lógica, de una manera que hace que sea más fácilescribir páginas web más complicadas? Y, en efecto, nos da gustollegar con p-establecido siete. >> Así que en el mundo de la MVC, vasa ver que nuestro código puede general caracterizarse como sea código del modelo,o código del controlador, o vista de código. Y yo voy asimplificar en exceso como follows-- el controlador es elcerebro de su programa, que es donde todo ellógica interesante sucede. Así que todo lo que he estadoescrito hasta ahora en la clase, es una especie de controladorcode-- está controlando su programa, sus bucles, sucondiciones, sus funciones y variables y todo eso. >> Vistas, ahora, van a ser un pocomás evidente en el mundo de la web. Un punto de vista es la estéticade su sitio web. Es lo que el usuario sees-- las imágenes,las tablas HTML, las etiquetas HTML, y todos de que, toda la estética esponjosocosas que no es tan difícil de escribir, pero es justo lo que está generando,es el punto de vista de la llamada, la estética. Y el modelo, en última instancia, vaser stuff-- base de datos que vamos a empezar a bucear en todocuanto más este miércoles. Así controlador es la lógica,vista es la materia estética, y el modelo va a ser dondealmacenamos nuestros datos reales. >> Así que echemos un vistazo a esto más concretamentecon el siguiente ejemplo. Voy a entrar en mi directorio aquíde la fuente de hoy code-- todos los cuales está disponible en línea. Y yo voy a ir a la versión cero. Y aquí es-- vamos a llamarlo elversión cero de la página web del CS50. No hay mucho aquí en absoluto. Es una página web muy simple que esprobablemente usando lo HTML tags-- solo adivinar por ejemplos anteriores? >> ¿Que es eso? H1-- probablemente para ese gran negritatítulo, que el logotipo en la superior, CS50. ¿Y qué más está en juego? ¿Sí? AUDIENCIA: Lista desordenada. DAVID MALAN: películas-- desordenada por lo que elEtiqueta de UL y tal vez un par de etiquetas LI. Y si no te acuerdas de ellos,honestamente no importa. Estos son una especie de suave y esponjosadetalles de implementación de HTML que se mira rápidamentey que está de vuelta en su camino. Nos centraremos más en la programaciónideas que son las piezas más jugosas. >> Así que vamos a echar un rápidomirar el HTML-- y de hecho si abro la fuente de la vista aquí, yup,Eso es exactamente lo que está pasando aquí. Hay una etiqueta de UL. Anidado dentro de eso es que las etiquetas LI. Y entonces tomé prestado de la URLdel plan de estudios real aquí. >> Y luego en ellectures.php es aparentemente otra página generado dinámicamenteeso va a tener, vamos a ver-- ah, las dos primeras semanas de la conferencia. Así que la semana cero y la semana uno, vamos amira esto- si veo fuente de la página, también es súper simple. Estos están dando lugar a dos páginasweek0.php llamada, y week1.php. Así que considera ahora lo que está sucediendo. >> Cuando hago clic en week0.php, mi portátilestá haciendo una solicitud de week0.php. El servidor web, alias, CS50 IDE,está recibiendo el sobre virtual. Es ver un mensajecomo, obtener week0.php. Luego está interpretando el archivo, la parte superiora abajo, de izquierda a derecha- el archivo llamada week0.php-- yescupiendo los resultados. Así que dentro de este archivo,week0.php, debe ser la lógica del controlador que está generandoeste código HTML, y pronto veremos eso. >> Pero por ahora, permítanme clic en la semana cero,y ahora tenemos los miércoles y viernes, y ahora tenemos las diapositivaslentamente de semana cero. Y se puede recordaresto desde camino de regreso cuando. Así que eso es todo lo que este sitio web está haciendo. >> Así que vamos a considerar cómo se hace esto. Voy a volver a lacódigo fuente aquí, en CS50 IDE, y voy a abrir index.php. En la parte superior de este archivoes un montón de comentarios. Y luego, en el medio de este archivo,Resulta, no es código PHP que sea. Porque si usted no tiene ninguno de losetiquetas signo de interrogación PHP soporte abierto, usted es libre de poner sólo HTML. >> Porque lo que el PHPintérprete se supone que debe hacer, es cuando se lee este file--arriba a abajo, de izquierda a derecha- sólo interpreta el código que ve entrelos paréntesis angulares cuestionan marca. Y cualquier otra cosa que no es asíreconocer como PHP, sólo escupe. Y HTML está entre las cosasse acaba de escupir. >> Así que este archivo podría tenerha llamado index.html, pero estoy nombrando tododot PHP como un trampolín. Lectures.php-- similardecepcionante, es sólo algo de HTML. Week0.php, de manera similar sólo algunas HTML. >> Pero ahora vamos a poner en elsombrero de la ingeniería proverbial, y considerar cómo podemos mejorar esto. No es difícil de hacer esto, pero yo tipode degenerado en copiar y pegar. Y de hecho, si hago la semana dos,Sé lo que estoy probablemente va a hacer? Voy a ir a week1.php, estoyva a poner de relieve todo. Voy a copiarla, pegarlaen un nuevo archivo llamado week2.php, ajustar algunas direcciones URL, y estar en mi camino. >> Así que en base a lo que hemosvisto en C ya, este no se siente bien, es de esperar. Copiar, pegar raramente la solución correcta. Entonces, ¿qué podemos empezarque hacer para mejorar esto? ¿Dónde están las oportunidadespara un mejor diseño? >> Por el momento tengo la oportunidad desemana ocho, que va para ser realmente molestosi quiero cambiar la fuente de cada uno demis páginas, o si quiero para cambiar la estructura de la distribución. Entonces, ¿dónde está la oportunidadpara un mejor diseño? Bueno, vamos a considerar lo que escompartida a través de todos estos archivos. >> He aquí la semana uno, aquí está semanacero, aquí está lectures.php, aquí está index.php-- lo que es lo mismo yLo que es diferente, en términos generales, en cada uno de estos archivos? ¿Sí? >> AUDIENCIA: [inaudible] DAVID MALAN: OK, bueno. Así que hay un patrón, sin duda, por el quecada vez que elijo conferencia que, Que debería estar generando unpágina de aspecto muy similar. Y así tal vez pueda aprovecharel hecho de que en realidad, deliberadamente numéricamenteindexados nuestra lectures-- si puedo poner aún máspalabras en su respuesta. Y lo que es lo único que, de verdad,eso está cambiando entre semana uno-- y déjame desplácese hacia abajo por lo que esmás o menos en el mismo lugar-- asi que aquí hay semanas cero,más o menos en la parte superior. Aquí está la primera semana, semanacero, la primera semana, la semana cero. OK, literalmente, si usted sabehay un programa que sea, esto es ahora como unjuego de correspondencias patrón. Entonces, ¿cuál es la diferencia? ¿Sí? >> AUDIENCIA: [inaudible] DAVID MALAN: Bueno, por lo que el títuloestá cambiando, muy ligeramente. Zero va, por supuesto, a uno. Lo mismo está sucediendo en la etiqueta H1. Y ni bien lo vemos con la misma facilidad,debido a que las URL son un poco largo. Pero esas URLs están cambiando ligeramente. >> Pero lo que no cambia es, me atrevodecir, la mayor parte de los contenidos de la page-- la etiqueta HTML es lo mismo, la cabeza esel mismo, el título es casi el mismo, el cuerpo es la misma, ycasi todo lo demás que es lo mismo a excepción deesos pequeños retoques. Entonces, ¿cómo podemos ir sobrefactoring algo de esto a cabo? >> Pues déjame propongo exactamenteque en la próxima versión. Así que aquí en la versión uno, tengo el exactomismos archivos, además de un par de los demás. He aquí index.php-- e incluso sique nunca has visto antes de PHP, ¿qué estoy haciendo, probablemente, para resolver esteproblema-- basado en lo que ves aquí? Sí, es que un leve compromiso? ¿No? Sí continuar. >> AUDIENCIA: [inaudible] >> DAVID MALAN: Sí. >> AUDIENCIA: [inaudible] >> DAVID MALAN: te necesito ahablar sólo un poco más fuerte. >> AUDIENCIA: [inaudible] DAVID MALAN: OK, bueno. Y yo think-- eradifícil de escuchar usted-- pero piensa en lo que quieres decir es quelas etiquetas que eran comunes en la superior, y las etiquetas que eran comunes en elabajo, ahora han sido un factor fuera, o relegado a qué archivos? Header.php y footer.php--y vamos hacer algunos ajustes paraabordar la preocupación que acaba de planteado sobre el cambio números, porejemplo, si te he oído correctamente. >> Pero eso parece ser la esencia de la misma. Si había una enorme cantidad deredundancia en la parte superior de la página, y una enorme cantidad deredundancia en la parte inferior, vamos a literalmente a más destacadoy cortar ese contenido a cabo, ponerlo en un file-- separado al igual quela idea de la CSS, donde un factor fuera estética muy similares, presentadosen un archivo PHP punto aparte, utilice la requieren mechanism-- quees como incluyen- do sostenido que es esencialmente como decir iragarrar el contenido de header.php, y copiar y pegar aquí. >> Pero lo que esto significa es que ahora enindex.php, tengo esas dos líneas. En lectures.php, yo tambiéntener esas dos líneas. En week0.php, yo tambiéntener esas dos líneas. >> Así que ahora, si quiero cambiarel título de todas mis páginas, o quiero cambiar laestructura fundamental, Puedo cambiar ahora en un solo lugar,o dos de encabezado y pie de página places--, respectivamente. Ahora partida del código que debe buscarun poco más críptica, ¿verdad? Pero si se piensa en lo que la páginase doing-- si estoy solicitando week0.php, al igual que en el dibujo másaquí-- cuando se solicita week0.php, ¿que significa eso? >> Literalmente, este archivo essolicitada por el navegador. El alias web server-- CS50 ID-- agarra estearchivo, week0.php, y lee se arriba a abajo, de izquierda a derecha. En la línea uno, encuentra inmediatamentecorchete abierto signo de interrogación PHP, requieren encabezado punto PHP, etc.lo que el intérprete de PHP does-- que se construye en la webservidor, porque preconfigurado por usted-- pasa automáticamenteen header.php, copia el contenido, las pega aquí. >> Pero entonces los encuentros de intérpretesigno de interrogación cerca del soporte, por lo que todo se hace pensando. Ahora que escupe a ciegaslas líneas del dos al siete, porque es sólo HTML puro. Obtiene a la línea ocho, y hace quemisma magia nuevo-- abrir el archivo, el acaparamiento de los contenidos, yexigiéndoles o pegándolos en ese momento o no. >> Pero yo sólo aludía a un error. Este es un paso parcial hacia atrás,porque si nos fijamos en header.php, He especie de cortar una esquina. ¿Qué característica le doy hasta el finpara ganar esto mejor diseño discutible? ¿Sí? AUDIENCIA: [inaudible] DAVID MALAN: Sí, tipode cortar una esquina no trivial. Usted ha señalado que lo que estaba cambiandofue el título, el número en el título, y el número en el H1. Así que mi solución fue, está bien,vamos a cambiar el nombre de la página, y no lidiar con esoproblema alguno. Así que eso es un parcial depaso hacia atrás con seguridad. >> Pero lo que es digno de mención aquíes que lo que he hecho aparece como un factor de otro modotoda la cosa común. Y en footer.php, noto que factorizadafuera de todo eso, aunque sea menor, cosas comunes. Así que tengo que de alguna manera ahora podrándar un paso más, y fijar que las cuestiones de título. Así que vamos a hacer eso. >> Déjame ir a mi segunda versiónaquí, que, de nuevo, tiene los mismos archivos a excepción de una nueva adición. Y es un poco másdetallado, pero vamos a ver si nos puede desmenuzar lo que está pasando aquí. Así que en lugar de exigirheader.php y footer.php, Parece que estoy sólo requieren unfile-- llamada, por supuesto, helpers.php. Y permítanme estipulo ahora,lo que hay dentro de helpers.php es sólo un montón de funcionesque me escribió, al igual que antes. Pero lo llamé helpers.php. >> Ahora, aparentemente, enlínea de tres y 10, estoy llamar dos functions--render cabecera, render pie de página. Aquellos no vienen conPHP, escribí aquellos mí mismo. Y yo los puse en helpers.php. >> Ahora, sólo hemos visto esta sintaxisuna vez, y fue muy breve. Pero esto es al parecer un argumentopara hacer de cabecera, la función. ¿Por qué lo sé? Bueno aquí hay un cierre paren,he aquí un paren abierta. Y, por supuesto, al igual que en C,cualquier cosa entre los paréntesis es un input-- o unargumento de la función. >> ¿Cuál es el tipo de datos de este argumento,basándome en lo que he destacado? ¿Qué hacen los corchetesindicar, sobre la base de la semana pasada? Sí, es una array--específicamente una matriz asociativa. Y esta sintaxis es ciertoes un poco raro, pero esto es sólo pasandoen un par de valores clave. La clave es, entre comillastítulo, y el valor es CS50. >> Si hubiéramos hecho estoen C, puede ser que en lugar mira más bién esto,simplemente entre comillas CS50-- o en realidad sería rizadollaves, o algo por el estilo en C, donde la clave es cero,y el valor es CS50. Pero, de nuevo, en PHP, aunque elsintaxis es, de nuevo, un poco raro, que le permite pasar depalabras en lugar de números asociar teclas con los valores. >> Entonces, ¿qué significa todo esto? Si entro en helpers.php,echemos un vistazo a esta función. renderHeader.php, en vezrenderHeader es mi función, y sé que porque veola palabra clave function aquí. Esto es nuevo desde C-- aparentementetoma un argumento llamado data-- pero podría haber llamado a estenada, pero lo llamé de datos, sólo para ser un poco clean-- ysimplemente tomar una conjetura, especialmente si usted ha programado en alguna otraalto nivel de lenguaje de antes, algo por encima de C, conceptualmente. >> ¿Qué soporte abierto igualescorchete probablemente significa? O ¿qué puede significar? No hemos visto esto en C. Sí? >> Una matriz vacía. Específicamente, esto significa que siel usuario no llama renderHeader con un argumento, todavía voytener una discusión llamada de datos, pero su valor por defecto esva a ser una matriz vacía. Así que es sólo un bonito conveniencia. Yo no tengo que gritar en el usuario,o decir que utilizó mi función equivocada. Yo sólo puedo dar al usuario una forma predeterminadavalor, si no sobre todo importa. Ahora esta función, estoyva a agitar las manos en. Pero esta función extracto permiteque pasemos estas variables en los datos en header.php de la siguiente manera. Y esta es la última pieza,Creo que, de la sintaxis funky. Aquí está mi nueva versiónde header.php-- que solía decir, literalmente, abiertatítulo soporte CS50, y eso fue todo. Y lo mismo para el H1. >> Ahora, al parecer, dicealgo bastante cobarde. Y permítanme simplificar estepor un momento de la siguiente manera. Esto es lo que tengocambiado mi título de ser. Sin embargo, se está haciendo un poco feaa los soportes permanentemente abiertos con PHP, y luego usar la función de impresión. Resulta que PHP tiene una taquigrafíanotación para esto, que es justo un signo igual, que es técnicamente unafunción llamada eco en lugar de impresión, pero es la misma cosa, con eficacia. >> Eso sólo se ve mejor. Es sólo una sintácticaazúcar, si se quiere, eso hace que mi código de mirar un poco mejor. Pero resulta, yvamos a ver esto de nuevo en poco tiempo, tenemos que llamar a estemolestamente función a largo llama HTML caracteres especiales enPHP, porque resulta que hay ciertos insumosque el usuario podría darnos, o que los usuarios nos pueden dar,que van a romper nuestro sitio. Pero vamos a ver que el próximosemana con JavaScript. Pero, por ahora, sólo sé queeste archivo, headers.php, simplemente toma el título quePasé en, que hacen asegurarse de que es seguro para ser inyectada en una webpágina, y lo escupe como mi título y como mi H1. Así que si entro en esta versión ahora,notar que las conferencias tiene su título de nuevo, semana cero tiene su título de nuevo, yde hecho, el HTML estoy generando es idéntico a lo que mi primera versiónera-- excepción de mi espacio en blanco, porque yo he empezado a formatearmi código un poco diferente. Pero he generado todoel código que me importa. Así que permítanme hacer una pausa paraun momento y ver si hay alguna preguntao confusión que he creado. Muy bien, así que vamos a torcerun poco más difícil aquí para ver si hay unaoportunidad de mejora. Helpers.php también tenía estefunción, llamada renderFooter. Y lo que es digno de mención acerca derenderHeader, y renderFooter? Y de nuevo, para los propósitos de hoy, saberque la función extracto es sólo mi manera de pasar argumentosen header.php y footer.php. >> ¿Apenado? >> AUDIENCIA: [inaudible] DAVID MALAN: Sí, yo sólocambiaron la requieren línea. Así que, literalmente, he cometido el pecadode copiar y pegar, una vez más. No es un número enormede líneas, pero vienen en-- si estoy copiando y pegando todosólo para cambiar una pequeña palabra, y la pequeña palabra que señala Alanout es pie de página aquí, frente a la cabecera aquí. De lo contrario, todo esidéntica, a excepción de, por supuesto, los nombres de la función. Entonces, ¿qué podríamos hacer mejor? >> Pues déjame abro esta versiónaquí, por lo que en helpers.php, ¿por qué no acaba de obtener unpoco más inteligente sobre esto? Escribir un poco más complicadocódigo, pero lo llaman render? Así que ¿qué he cambiado fundamentalmente? >> Se necesita un argumento ahora--dos argumentos, los datos todavía. Y entonces, ¿qué es lo primeronombre probablemente se utiliza para, sobre la base de lo que estás leyendo aquí? Incluso si algunos de la sintaxis es todavía nuevo. ¿Qué es el dólar plantilla de señal? >> ¿Apenado? >> AUDIENCIA: Encabezado o pie de página. >> DAVID MALAN: Encabezado o pie de página. Así que al parecer, decidí que silo único que está cambiando es lo que la plantilla que quieroa print-- y por la plantilla Quiero decir que es modelo paracódigo que quiero de salida, pero quiero conectar de algunavalues-- por lo que si es sólo la cabecera o pie de página, ¿por qué no parametrizareso y llamar el signo argumento dólar ¿modelo? Y luego esta sintaxis cobarde me permitepara crear un camino en una variable aquí. >> Así senda signo del dólar es una variable. ¿Qué significa esta sintaxishacer, si está familiarizado? ¿Sí? >> AUDIENCIA: [inaudible] DAVID MALAN: Exactamente. Si la plantilla es, entre comillas,cabecera, o si la plantilla es, entre comillas, pie de página, esa línea noque yo he destacado, la línea ocho, es simplemente tomar ese nombre, como cabecera,y concatenar con PHP punto. Así que no teníamos este operadoren C. Este operador punto es una cosa increíble en PHP-- si estásfamiliarizado con JavaScript o Java, puede utilizar el signo másfirmar hacer concatenación. >> En C, que es un dolor en el neck--y lo siento mucho, en el set-p seis, usted va a tener que haceresto-- es un dolor en el cuello para concatenar cadenas. ¿Por qué? Bueno, porque si tienesuna cadena que es este largo, y otra cadena que es este largo,no se puede simplemente conectarlos juntos. ¿Qué lugar tiene que hacer en C? ¿Sí? >> AUDIENCIA: [inaudible] >> DAVID MALAN: Tienes que mallocmemoria, o utiliza una matriz en la pila. Y de hecho tienes quehacer esa serie lo suficientemente grande para adaptarse a esto además de esto,además de la barra invertida cero. Entonces concatenar juntos utilizandorevuelva gato o de forma manual con un bucle for, o cualquier número de técnicas. Y te mostramos un par de p-set seis. >> Es un dolor en el cuello. Y esto es realmente lo que quiero decir acerca deeste frente esto-- como C en comparación con PHP. Usted acaba de conseguir mucho másfuncionalidad de forma gratuita, de modo que usted pueda centrarse,idealmente, en la diversión parte de codificación, elproyecto que desea resolver, más que el bajo nivel de minucias. >> Así que esto sólo genera header.php ofooter.php basado en cuál me llamo. Y de hecho si me voyen index.php, previo aviso todo lo que se transformados, en lugar dellamando render encabezado o pie de página render, Voy a llamar a rendir, seguido por elnombre de la plantilla que yo quiero hacer. Y verás esto, también,en el problema de establecer siete, por el que permitimos que le permite utilizar elmisma función para hacer racimos y racimos de diferentes páginas web. >> Así que en lugar de insistir demasiadomucho más en esos details-- que verá de nuevo enconjunto de problemas seven-- veamos en ahora el comienzo de una solución dea un problema más interesante. Hasta aquí, nada que hemoshecho tiene datos guardados. De hecho, la única vez que he jamás salvóalgo que hemos hecho en esta clase es cuando tuvimos una demostración muy simple ratoespalda, por el que se utilizó el archivo IO en C, y creo que he escrito en mi nombre, yEl nombre de Hannah, y el nombre de María, o tal vez el nombre de Andy, yentonces nos ahorramos un file-- CSV separados por comas archivo de valores. >> Y utilizamos fopen-- Creoutilizamos fprintf por lo que recuerdo, y nos ahorramos un archivo. Ahora, que es el más simpleforma de una base de datos. Si usted quiere hacer un sitio web para laPrograma Frosh mensajes instantáneos, mediante el cual estudiantes de primer año puede inscribirse en un deporte, lo idealquerer hacer algo con esos datos. La semana pasada, no hicimos nadacon el data-- que acabamos de decir, está registrado, no realmente. O tal vez me escrito elsupervisor, y eso fue todo. >> Pero sería bueno si pudieradar ese supervisor un archivo CSV, como un archivo de Excel. O mejor aún, que lo haríasería bueno si pudiera poner los nombres de los usuarios ydorm nombres y todo eso en una base de datos queSólo vive para siempre, hasta que yo decida eliminar los datos. Una base de datos que permitemí para consultar información. Y de hecho, eso es lo que es una base de datos. >> Introducimos hoy, yla semana que viene, también, una tecnología llamada SQL-- una consulta estructuradoEl lenguaje, que es otra lengua. Básicamente se trata de una programaciónidioma, pero para bases de datos. Y una base de datos por ahora, sólopensar como una versión super lujoso de Microsoft Excel o GoogleLas hojas de cálculo, o números de Apple. Por lo general es un programa que permiteque le permite almacenar un montón de datos en filas y columnas, bastantecomo usted puede ser que en Excel. >> Pero lo que es bueno, especialmente sino estamos muy familiarizados con Excel, lo SQL le permite hacer es esta consultainformación escribiendo líneas de código donde se puede, incluso si subase de datos tiene un millón de filas en el mismo, se pueden encontrar cosas muy rápido. De hecho, Excel es particularmentemalo en grandes conjuntos de datos. Y de hecho, hasta unos pocosHace años, resultó Excel sólo permitirá almacenarhasta 65.535 filas de data-- que suena como mucho, pero altiempo yo era un estudiante de posgrado, y recuerdo tropezaresto porque me estaba generando Archivos CSV para mi investigación y mequerido analizar de forma rápida con sólo abrir en Excel. Por supuesto, mi equipo simplemente se estrelló,porque tenía más de 65.000 filas. >> Pero ¿de dónde la 65535 viene? ¿Qué estaba haciendo Microsoft, es de suponer? Si eres bueno con las potencias de dos? Sí, ellos estaban usando una de 16 bitsvalor para representar el número de fila. Y dos a 16 es 65,536--menos uno, porque si índice cero significa que fue elmayor número de filas que pudiera tener. Y fue una decisión de diseño. Al ahorrar 16 bits, me limitan16.000 filas, en lugar de 4 mil millones, que podría haber tenido idealmente. Pero por ahora, vamos aintroducir esta más en un contexto web. Y lo que es bueno de SQL es que inclusoaunque es bastante potente y bastante sofisticado, que realmente se reducehasta cuatro operaciones fundamentales, cuatro funciones clave, si Voluntad-- seleccione,para la recuperación de datos, la búsqueda para los datos; borrar o eliminar datos;inserte para añadir filas a la base de datos; y actualización. Así que si alguna vez has usado GoogleHojas de cálculo, números de Apple, Microsoft Excel, se ha ejecutado,lo más probable, todo de estas operaciones como un ser humano porsimplemente usando el teclado y mouse-- la inserción de datos, el uso de sus ojospara seleccionar o buscar datos, o los datos de actualización o supresión de datos. >> Entonces, ¿qué significa esto? Bueno, pre-instalado en CS50IDE es un programa llamado MySQL. Es una, libre de código abiertobase de datos que es súper popular. Facebook, por ejemplo, la utiliza para estedía, entre otras herramientas que utilizan. Y un montón de sitios web muy populares utiliceen gran parte porque es rápido, y porque es gratis. Aunque sin duda existen alternativas. Y algunos de ustedes podrían incursionar conalternativas para los proyectos finales. >> Esta es una captura de pantalla, por su parte, deuna herramienta basada en la web llamada phpMyAdmin. Es una coincidencia queesta herramienta basada en la web es también escrito en un lenguaje, PHP,pero, ¿qué se supone que debe hacer es darnos una basada en la webinterfaz a una base de datos. Debido a que MySQL es típicamentealgo, históricamente, se sería interactuar con solamentecon una línea de comandos. Y sería estupendomolesto y arcana tener teclear comandos de texto para seleccionardatos, insertar datos y eliminar datos. Así que algunas personas en la internetescribió un programa basado en la web que sólo háganoslo gestionamoslos datos en nuestra base de datos. Es como hacer doble clic en Excel yque ejecuta una versión basada en la web de la misma. >> ¿Y qué vas a utilizar esto paraen última instancia, la próxima semana, no en p-set de seis, sino que es para construir algollamada CS50 Finanzas, que va a tener una base de datosusuarios, con los nombres de usuario y contraseñas, cantidades de dinero quetienen en sus cuentas bancarias. Va a seralgo que se utiliza para almacenar los símbolos y las cantidadesde las poblaciones que los usuarios de han comprado usando virtualesdólares que le vas a dar a ellos. Y que va a permitir a los usuariospara registrarse en su sitio, por lo que incluso sus amigospuede sintonizar a su sitio web y en realidad inscribirse,tienes que entrar y jugar y tratar de encontrar fallos en su código,y tratar de encontrar errores en su sitio web. Y ellos simplemente van a registrar porañadiendo a sí mismos, de manera efectiva, a través de código que se escribe en la base de datos. >> Por ejemplo, esta es una captura de pantalla rápidade lo que una base de datos podría ser similar. Esto era de una desolutions-- del año pasado esto es como un mini Excelpresentar, almacenada en nuestra base de datos, almacenada en este software llamado MySQL. Por el lado de la mano izquierda, tengo aparentementedado a cada usuario un número único. En la segunda columna, me he dadotodos un usuario nombre-- mi propia entre ellos. Y en el lado derecho,Yo les he dado un hash. >> Ahora bien, esto es en realidad una contraseña,pero no es una contraseña de texto sin formato. Es una contraseña encriptada, sise quiere, o un hash de la contraseña. ¿Qué vamos a volver al poco tiempo. >> Pero si alguna vez has leídoun artículo sobre cómo su contraseña en algún banco o algunapágina web podría haber sido comprometida, por lo general, puede significar una de dos cosas. Así que esto es sólo un extracto de seis usuarios. Todos ustedes pueden ahora calculara cabo a través de la piratería o formación de grietas lo contraseñas nuestros seis de la gente son. Pero si alguna vez has conseguidouna alerta o una disculpa de una empresa o sitio web refrán,lo siento, un hacker entró en nuestra base de datos, probablemente debería cambiar sucontraseña, lo que podría significar eso? >> Bueno, uno, podría significar laempresa ha sido más estúpido, y ha sido el almacenamiento de la contraseñaen una columna de este tipo, sin cifrar. Lo que significa adversario,que robó la base de datos, sabe, literalmente, sunombre de usuario y contraseña. Ese es el peor escenario posible. Y como se verá en el p-setsiete, tan fácil de evitar. No hay absolutamente ninguna excusa para queforma de estupidez en el Internet de hoy. Dos-- y lo encontraremos algunos artículospara dar testimonio del hecho de que esto todavía sucede, nonetheless--dos, tal vez el adversario robó esta versión de la base de datos. Que todavía está un poco mal, porque ahoraellos saben que yo tengo seis clientes, Conozco los nombres de usuariode esos seis clientes, y sé que el cifradoversiones, o las versiones hash, de contraseñas esos seis de los clientes. Pero cualquiera de ustedes que podríahaber hecho [? Hacker 2?] donde agrietado contraseñas, o tomasteUna mirada a esa versión del problema set, ¿por qué es todavía un poco preocupantesi el adversario sabe su picadillo contraseñas? >> AUDIENCIA: Debido a que pudieronentrar en todo el diccionario en la función de hash. Y si la contraseña es un diccionariopalabra, [? que sólo puede match--?] >> DAVID MALAN: Exactamente, el adversariopuede simplemente escribir código, al igual que algunos de ustedes hizo por [? Hacker?] 2,por el que usted iterar sobre todas las palabras en el diccionario,o todas las posibles combinaciones de A a la Z y uno a través nine--que suena a mucho, y lo es. Pero para un equipo,es bastante maldito rápido. Y, de hecho, esa fue laPunto de [? Hacker 2,?] Era tomar las cosas quese ve literalmente así, y técnicas de ingeniería inversalo que realmente era. >> Así que vamos a ver cómo podemosalmacenar esta manera más eficiente. Resulta que, por suerte en MySQL,no van a ser los tipos de datos. Y una de las partes divertidas sobrediseño de base de datos, para ser honesto, es en realidad decidir por sí mismo¿cómo debe representar los datos? En caso de que representan un número de teléfono comoun int, al igual que un número grande, o un largo? ¿O es que en realidad lo hacecomo una secuencia de caracteres? Y no puede ser muyimpactos no triviales de este. >> De hecho, una de lasprimeros, historias divertidas germano es cuando Mark Zuckerberg estaba construyendoFacebook, que fue escrito originalmente en, y aún así está escrito principalmente en PHP. Y uno de los mayores retosse enfrentaron desde el principio fue la ampliación. Cuando siguieron añadiendo escuela despuésla escuela después de la escuela, que yo sepa, una de las soluciones originalesera esencialmente para copiar y pegar algunas de las bases de datosy una parte del código, de manera que era Harvardque se ejecuta en su propio servidor, y el MIT se ejecuta en su propio servidor. Y esta era la razón, para algunosde ustedes que puedan recordar, no se podía tener amigosen otras redes. >> Es probable que no tiene amigos enMIT o Harvard hace 10 años más o menos, pero no se podía abarcar redespor parte esa razón. Y uno de los mayores retos paraMark y para empresas como Facebook es en realidad el manejo de cientosy miles y millones de solicitudes por segundo. Así las cosas vamos a empezarhablando de esta semana son realmente va a ser afín aescribir buen software, y popularmente herramientas exitosas quepuede manejar una gran cantidad de usuarios. >> Así que vamos a hablar de las cosascomo la indexación y búsqueda, pero eso es todo por hoy. Veremos por más el miércoles ti. >> [MÚSICA - TEMA "Seinfeld"] DAVID MALAN: Usted puede a, y restar de ella. Y usted no tiene que pegarse conuna cierta cantidad predeterminada de memoria. Bueno, ¿qué es eso va a llamar? >> ALTAVOZ 1: Bueno, ¿qué está pasando? ALTAVOZ 2: ¿Qué quieres decir? Él está dando una conferencia. DAVID MALAN: Y podemos utilizar unfunción llamada malloc a memory-- >> ALTAVOZ 1: ¿Por qué no se están moviendo sus brazos? >> ALTAVOZ 2: Bueno Eso es--ya sabes, eso es normal. Es igual que él acaba degrandes salchichas colgando allí. >> ALTAVOZ 1: Eso es normal? >> ALTAVOZ 2: Sí, creo quesimplemente asumir que accidentalmente reemplazado su desodorante con superglue.