[Powered by Google Translate] [Semana 8] [David J Malan] [Harvard University] [Esta es CS50.] [CS50.TV] Bienvenido de nuevo. Esto es CS50, y este es el comienzo de la semana 8. Hace un par de oportunidades esta semana, entre ellos esta charla aquí, en la que algunos alimentos serán servidos. Para más detalles, echa un vistazo a las diapositivas que están en línea. Y también otro evento de esta semana por nuestro propio Carriero Thomas. Es uno de los ex becarios de Head CS50 de enseñanza que ahora está en Dropbox, y él es el tipo que nos conectó con la sabes qué, así que si quieres más de que la cabeza de su charla de esta tarde para Dropbox y más. CS50 almuerzo es este viernes. Se unen a nosotros, si le es posible, 1:15, como siempre, en Fire and Ice. Y ahora nos sumergimos en algo llamado Seminarios. Nuestros Seminarios CS50, recuerdo, son estas clases opcionales dirigidas por los compañeros docentes y los asistentes del curso y amigos del curso, gente de un grupo en el campus llamado ABCD, que es un grupo de tecnófilos en el campus, así como de un grupo llamado HCS, la Harvard Computer Society, los estudiantes que están igualmente interesados ​​en la computación. Lista de este año incluye seminarios de seminarios sobre Android y iOS y JavaScript y PHP, Unix, Vim, y más, para darse cuenta de que estos seminarios se aproximan. Si desea hacer reservaciones para cualquiera de ellos se dirigen a esa URL allí. A continuación, se publica en la página web del curso de los tiempos y lugares, una vez que se finalicen. Pero vale la pena saber que hay 5 años de seminarios anteriores disponibles en línea, muchos de los cuales están todavía muy actual en términos de tecnologías que posiblemente encuentre quiero jugar con para sus proyectos finales, por lo que la cabeza allí para algunos videos disponibles del mismo. CSS, aquellos de ustedes que están familiarizados con CSS ya, ¿qué es en pocas palabras? ¿Qué es CSS? Se hojas de estilo, y qué significa eso? ¿Qué es lo que hacen por nosotros, CSS? Muy bien, vamos a calentar con una más fácil, HTML, lenguaje de marcas de hipertexto. ¿Qué es lo que hacen por nosotros? Cualquier persona en absoluto? Se está haciendo muy difícil hacer estas preguntas. HTML, HyperText Markup Language. ¿Sí? No? [Respuesta de los estudiantes inaudible] Bueno, bueno, que nos permite marcar texto para mostrar en un navegador web. No es un lenguaje de programación. Es realmente un lenguaje de marcas, lo que significa que indica al navegador cómo mostrar información, por lo que la simple encarnación de esta como hemos visto es algo super simple como boldfacing, abierto abrazadera abrazadera cerrada b dice hacen de este texto en negrita, y que en realidad es sólo una de las muchas maneras en el que podemos hacer eso, y de hecho, en estos días un mejor enfoque para estilizar tu página web, haciendo las cosas en negrita y cursiva y centrado y justificado y similares, no se lleva a cabo a través de las etiquetas HTML solo sino más bien con una técnica llamada CSS, Cascading Style Sheets. Este es un lenguaje en sí mismo. Esto tampoco es un lenguaje de programación, pero- a todos, este es Dan, que mantiene acompañarnos hoy. Algunas dificultades técnicas. No es un problema. CSS nos permite estilizar una página mediante el establecimiento de lo que se denominan propiedades, así que vamos a echar un vistazo a esto por medio de algunos ejemplos básicos. Déjame entrar en el aparato hoy. Tengo la fuente 8 Lunes directorio aquí, y yo voy a ir en un directorio llamado CSS, donde tenemos un montón de archivos que nos esperan aquí, y en esta carpeta tenemos, por ejemplo, search0.html desde la última vez. Ahora, recuerdo con search0 de partir en esta nota por tipo de implementación de Google o en realidad sólo la parte delantera para una semana o así que hace, y el aviso de que teníamos algunas etiquetas nuevas allí. Tuvimos h1 por un título grande, en negrita, forma, lo que nos permitió tener en realidad un formulario HTML para entrada de usuario. Acción, ¿cuál fue el significado de un atributo de acción en la etiqueta de formulario HTML? ¿Cuál era el significado de esta acción? Voy a hacer esto hoy. La acción es el destino a donde la forma va a ser sometido. El hecho de que la acción que dice = "google.com / búsqueda" significa que cuando el usuario hace clic en el botón de enviar o equivalente independientemente de la forma que llenaron los campos van a ser enviados a nuestro servidor no o nuestro aparato, sino más bien a la URL específica en Google. Y el método que va a utilizar se llama conseguir, y obtener, por ahora, es sólo una técnica para pasar información a lo largo de un servidor web a través de la URL, así que vamos a echar un rápido vistazo a cómo funciona esto. Tenga en cuenta que hay una entrada cuyo nombre es q cuyo tipo es texto y luego una segunda entrada del tipo de presentar cuyo valor es CS50 Search, y de hecho, si nos abrimos este archivo aquí search0.html, es una forma súper simple, y si busco algo como la informática y luego pulsa enter o haga clic en Buscar CS50 cuenta de que lo que sucede es más allá de llegar a Google He específicamente terminamos en este URL en la parte superior, google.com / search? q = ordenador + ciencia, y ciencias de la computación es, obviamente, lo que he escrito pulg El + sólo significa que es donde un carácter de espacio era, y se hace por el navegador sólo para asegurarse de que no hay confusión y el espacio en blanco en la dirección URL real. Y entonces q, por supuesto, es el nombre del parámetro. No hemos visto cómo, el programador, en realidad se puede acceder q todavía. Podemos suponer que Google sabe qué hacer con esto aquí, pero vamos a llegar a su debido tiempo hoy. Pero déjeme echar un vistazo en vez de search1.html, que se parece un poco diferente porque he decidido que esta forma aquí estaba un poco cojo. Quiero decir, que está en la parte superior izquierda. En realidad no hay estética a la misma, y ​​por eso quiero estilizar esta un poco más como Google, cuya página de inicio, recordar, aunque es posible que no lo visitan muy a menudo, se ve así hoy en Halloween. Si en lugar de abrir una versión de este archivo, 1.html búsqueda, me he centrado. , Still bastante feo, pero al menos ahora he empezado a controlar la estética de esta página no sólo para marcarlo hasta de los mismos. Echemos un vistazo a una búsqueda, y no hay realmente sólo una diferencia aquí, que podría saltar a la vista, o tal vez no, pero ¿cuál es la línea de un fragmento o de la diferencia? Hay un atributo de estilo, por lo que resulta que en HTML la mayoría de los elementos, la mayoría de las etiquetas pueden tener un atributo de estilo en ellos, y dentro de ese atributo style es una cadena entre comillas, y que la cadena entre comillas es CSS. Usted puede poner hojas de estilo en cascada allí especificándolo como un nombre de propiedad seguido de dos puntos seguido de un valor. Esto es un poco de una decisión de diseño desafortunado hace algunos años que CSS es un lenguaje en sí mismo, pero sintácticamente es muy diferente de HTML. En este caso, vemos que dentro de mi página web, que está escrito en HTML, Tengo CSS dentro de estas citas, y la convención de CSS es que usted tiene lo que se llama una propiedad seguido, nuevamente, dos puntos, seguido por el valor de esa propiedad, así que no hay signo igual. No hay citas adicionales. Es sólo esta separada por dos puntos par de valores clave, y la línea de texto hace exactamente lo que dice. Se alinea el texto en el cuerpo de la página, que es realmente el coraje de la página, en el centro. De acuerdo, entonces el resultado final, para ser claros, es este. No todo lo que más sexy, pero al menos está centrado y un poco más a lo real de Google. Pero ¿y si en vez abrir la versión 2 de este y señalar aquí una nueva etiqueta en total? Ahora, en la cabecera de mi página, que antes sólo tenía que etiqueta en todos los ejemplos anteriores? Se acaba de tener esto, el título. Hace un momento la etiqueta de la cabeza se veía así. Ahora, en cambio, tiene un estilo dentro de la etiqueta de la misma, y esto también, pido disculpas, sintácticamente se ve muy diferente de HTML, pero te acostumbras a él, por lo cual dentro de la etiqueta de estilo Ahora puedo factorizar lo que era hace un momento un atributo, el atributo de estilo, y lo puedo poner en la parte superior de mi página. ¿Por qué? Bueno, este es un paso hacia limpiando las cosas, al igual que en la escritura de código C nosotros a veces escribir funciones para factorizar la funcionalidad común. Es sólo un poco más limpio para iniciar factoring cosas como la estética a una ubicación central en vez de tenerlo todo intercalan a lo largo de su HTML. Esto también hace lo que dice, aunque hay un poco de nueva sintaxis. Esto aquí es un selector, y el cuerpo sólo significa seleccionar el elemento del cuerpo y aplicar las siguientes propiedades a la misma. Pues bien, la propiedad es exactamente lo mismo. Por si acaso he añadido un punto y coma al final, que tiende a ser la convención, y me he envuelto todo este inmueble entre llaves porque yo podía tener cosas diferentes aquí. De hecho, me podría decir algo como color: blue; Ahora bien, esto tampoco va a ser un paso hacia la nada todo lo que más bonito, pero si ahora volver a la versión 2 que he hecho por lo menos ahora el cuerpo de mi página de texto de todo azul. El botón se mantiene igual porque es una entrada. No es puro texto. Pero todo lo demás que es texto, como CS50 Búsqueda en lo alto, es de color azul hecho. Una vez más, todo lo que hemos hecho ahora es eliminar del cuerpo de la etiqueta, rótulo, el atributo de estilo, y hemos factorizado un vistazo aquí. Esto no es una gran mejora, pero si tomamos un paso más allá darse cuenta de lo que podemos hacer en esta tercera versión aquí. En search3.html la página web es casi idéntico a excepción de lo nuevo tag ahora? Link, por lo que éste no está muy bien llamado porque no se va a asociar en el sentido de un enlace clicable. Más bien, estás de suerte haciendo el equivalente de # include en C por lo que la etiqueta de enlace con un atributo href y un atributo rel dice que adelante copia y pega el contenido de un archivo llamado search3.css aquí, esencialmente. No todo eso, pero ese es el espíritu de la misma. Dice que ir abierto ese archivo, search3.css, y tratarla como si el usuario hubiera escrito aquí mismo en la cabecera de la página al igual que lo hizo en el ejemplo anterior. Search3.css, por su parte, es bastante simple. En realidad, sólo contiene exactamente lo que estaba hace un momento en la etiqueta de estilo, pero no tengo factorizar un vistazo aquí a su propio archivo. A pesar de que no he pasado mucho tiempo en absoluto en HTML o programación web sólo intuitivamente lo que es la motivación, tal vez, para factorizar este pequeño fragmento de CSS, incluso en su propio archivo y luego incluso con esta etiqueta link aquí? [Respuesta de los estudiantes inaudible] Bueno, es más fácil de leer en el sentido de que tiene la CSS en un archivo CSS. Usted tiene su código HTML en el archivo HTML, por lo que es más fácil de leer en ese sentido. ¿Qué otra cosa podría ser convincente? Si. [Respuesta de los estudiantes inaudible] Sí, para que pueda incluirlo en muchas ocasiones, por lo que ahora estamos haciendo estos ejemplos básicos con archivos individuales, pero supongo que en realidad estás haciendo un sitio web real como tu voluntad para pset 7 o el proyecto final tal vez, y desea tener varias páginas web, como es bastante común en la Web actual Wide, y sería una especie de lisiado a tener que copiar y pegar el mismo color azul y el mismo texto alineado centro en cada una de esas páginas. Más bien, tiene más sentido para excluir, al igual que hemos hecho en C con el archivo. h, lo puso en un lugar central, en este caso search3.css, y luego permitir que cualquier archivo en su página web para incluir ese archivo en realidad a través de esta etiqueta aquí en la línea 16. Como suele ser el caso, empezamos con la versión 0, que tipo de obras pero no es necesariamente la mejor, y con cada paso, búsqueda de una búsqueda de 2, 3 y ahora busca que hemos tomado estos pasos de bebé hacia diseños que son un poco más limpias y son más preparatoria para las páginas más complejas que podemos hacer en el futuro. Permítanme abrir un último ejemplo aquí sólo para mostrar una página aún más estilizado, pero primero vamos a ver el código HTML. Esto es search4.html, y note que estructuralmente es casi lo mismo excepto por la introducción de una nueva etiqueta, DIV. Div es una etiqueta que introduce una división de la página. Usted puede pensar en esto como un rectángulo invisible. De alguna manera crea una franja de área en la página web que se puede estilizar todos a la vez. Lo que he hecho aquí es la siguiente. En el interior de mi cuerpo de la etiqueta, que ha estado allí todo el tiempo, Digo crear una división de la página aquí a través de las líneas 45 a la 47, y eso significa esencialmente darme un rectángulo invisible a lo largo de la parte superior de la página. Entonces dame un segundo rectángulo, aunque invisible, más abajo, y se identifican por el nombre de contenido y, a continuación, por último, dame una tercera división de la página en la parte inferior llamado ID. Vamos a ver qué he hecho esto en un momento, pero conceptualmente Tengo una división de cabecera. Tengo una división de contenidos, y tengo una división pie de página de la página a pesar de que estos son sólo en el marcado. El usuario no va a ver 3 rectángulos, pero tipo de estructura hay detrás de las escenas que están realmente presentes. Ahora, ¿qué importa? ¿Por qué lo hacen realmente? Todo lo demás en la página es el mismo que hemos visto antes. Esta es mi forma. Aquí está mi entrada, mi entrada, un salto de línea y así sucesivamente. Aquí está una imagen, sin embargo, así que ya veremos dónde salió en un momento. Aquí hay un pie de página, que es nuevo, sólo porque quería introducir contenido un poco más aquí. Si nos desplazamos hasta notar que el ID de este div es cabecera. La identificación de este div es el contenido y el ID de ésta es pie de página. Y como su nombre lo indica, cuando se tiene un atributo ID en HTML, por definición, debe identificar exclusivamente uno de los elementos, una de las etiquetas en la página. La responsabilidad recae totalmente en usted recordar que tiene un ID de cabecera ya. Usted tiene un pie de página. Usted tiene un ID de contenido ya. El equipo no va a entender lo que es una identificación disponible para usted, por lo que accidentalmente podría dar una identificación 2 etiquetas de cabecera, y eso sería un error. Hay que tener en cuenta lo que han creado, pero una vez que hayas hecho esto fíjate en lo que podemos hacer aquí. Ahora puede especificar en mi etiqueta de estilo en la parte superior o equivalentemente en mi archivo CSS, si yo todavía estaba usando esa versión, Puedo decir # header, y es lo que quiere decir que cualquier etiqueta en esta página web tiene un ID de cabecera y #, sólo por convención humana, representa el ID. El signo de sostenido o la libra signo representa identificación. Cabecera es el nombre que le di. Esto significa aplicar esta propiedad CSS a cualquier variable de esta página tiene un ID de cabecera. Lo mismo pasa aquí. Aplicar esta propiedad, que pasa a ser el mismo, a cualquier elemento cuyo identificador es el contenido, y luego aquí cuenta de que tengo un poco más de lujo con pie de página. Cualquier elemento cuyo ID es pie de página, de la cual no puede ser sólo uno, por definición, seguir adelante y hacer su tamaño de fuente más pequeño, su fuente en negrita peso, su margen de 20 píxeles. ¿Qué significa eso? Es sólo un margen en la parte superior, inferior, izquierda y el de derecha. Esto quiere darme un margen de 20-pixel invisible a su alrededor sólo para empujar todo lo demás fuera de ella un poco, de que se puede hacer en Word, Microsoft Word o Pages o similar. Y luego alinear texto central. Vamos a ver el resultado final, y luego vamos a regresar hasta el fragmento restante de CSS allí. Esta es la versión 4, el último de los ejemplos de búsqueda, y es mucho más sexy, mucho. Ahora, para ser justos, sólo Google "fuente generador google logo". Y eso me permitió crear un GIF, un formato de imagen, que parece que no. De hecho, usted puede hacer esto también. Tenemos "google logo generador fuentes." Vamos a ver si podemos hacer esto. Bueno, creo que este es el sitio web que he usado. Podemos decir Ec 10, por ejemplo, y hacer que su propio. Usted puede jugar con esto todo el día y luego a la derecha haga clic en él y luego descargar el GIF real, que es todo lo que hice. Y de hecho, es por eso que en mi HTML, recordar, aquí Yo tenía una etiqueta de imagen, que vimos brevemente la semana pasada cuya fuente es logo.gif. Y lo que de nuevo fue la motivación para tener este atributo alt, este atributo alternativa? Si. [Respuesta de los estudiantes inaudible] Bueno, por lo que 2 razones realmente, si el navegador no puede levantar la imagen porque usted tiene una conexión de red lenta o la imagen está dañada o algo así como que al menos el ser humano puede ver "CS50 búsqueda" y luego también por razones de accesibilidad. Si usted tiene un usuario que es ciego y utiliza un lector de pantalla por lo que, obviamente, no puede ver las imágenes por lo menos pueden escuchar el texto si su computadora se les habla. En general, esta es la mejor práctica cuando se trata de la accesibilidad de las páginas para que los usuarios incluso en esa situación puede oír o ver, por así decirlo, qué es lo que está en su página. Hay otra cosa que lo hice aquí que es un poco interesante, y veremos más sobre esto en conjunto de problemas 7 a través de uno de los cortos dirigidos por uno de los compañeros docentes. Pero # contenido se refiere a la etiqueta cuyo identificador es el contenido, pero luego hay un espacio en blanco, y luego está la palabra de entrada. Bueno, lo interesante de CSS es que se puede se refieren a las etiquetas en una página clasificar de forma jerárquica, y lo que esto significa fragmento de CSS es encontrar la etiqueta cuyo identificador es el contenido, y luego aplicar las siguientes propiedades a todas las etiquetas de entrada que son descendientes de contenido, es decir que se aplica sangría dentro de ella. Indentación, de nuevo, sólo es importante para el equipo, no a la humana, pero por convención guión cosas a medida que profundizamos en una página, así que esto significa aplicar un margen de 5 píxeles a cualquier elemento de entrada que en algún lugar dentro o anidado dentro de  el elemento cuyo ID es el contenido. ¿Quién hace eso aplica? Bueno, en realidad hay sólo estos 2 chicos aquí. Tenga en cuenta que en el interior de la forma hay 2 entradas, ya que ha sido durante todos estos ejemplos. Pero nótese que las 2 entradas sucede que se desliza por el interior, aunque un poco profunda, un par de capas de sangría, dentro de la etiqueta cuyo identificador es el contenido. ¿Qué quiere decir esto? Si vamos al navegador aquí se puede ver muy ligeramente- déjame acercar-que hay un poco de relleno entre el botón y entre el campo de texto. Permítanme temporalmente apaga eso. Déjame ir a mi CSS, y me dejó ir adelante y sólo cambiar este margen de 5 píxeles a 0 píxeles. Déjame ir por delante y luego y guardar el archivo, vuelva al motor de búsqueda y volver a cargar y ver el centro de la página. Todo se comprimen juntos, y cuando por primera vez azotado este ejemplo hasta Pensé que se veía estúpido con el campo de texto y luego en el botón inmediatamente debajo. Quería almohadilla él un poco, así que introdujo márgenes. Lo que no va a hacer en clase es ir a través de las varias docenas CSS propiedades que existen porque, de nuevo, hay cosas como el tamaño de fuente, peso de la fuente, márgenes, alinear el texto, y una docena de otros pocos, y le refieren en conjunto de problemas 7 a diversos tutoriales en línea y las referencias que le permiten recoger estas cosas. Pero lo que realmente importa al final del día es entender cómo estas cosas se aplican. Una vez más, si tenemos el estilo dentro de la etiqueta de los cuales puede ir a los selectores, el tipo de identificadores que especifican ¿a quién desea aplicar estas propiedades, y después de poner las propiedades como par de valores clave separados por dos puntos y terminó con un punto y coma, o se puede extraer de todo eso y ponerlo en un archivo CSS en sí mismo. Muy bien, cualquier pregunta sobre los conceptos o el gran cuadro de CSS? Tú otra vez veremos más de él en pset 7, pero vamos a seguir por lo general bastante simple. No? Está bien. Es hora de que un lenguaje de programación real, y vamos a volver a un poco de CSS en forma de un ejemplo. PHP es en realidad un lenguaje maravillosamente accesible en que esté sintácticamente casi equivalente a C. En otras palabras, si usted sabe C, ya sabes PHP para la mayor parte, al menos sintácticamente, a pesar de que hay algunas nuevas características y algunos conceptos nuevos que tendremos que mirar. Sin embargo, para la mayor parte, ahora que la transición de C a PHP la mayor parte del nuevo material es realmente en el panorama general, cómo se utiliza un lenguaje de programa en la web en lugar de en la línea de comandos o en un mensaje parpadeando, ya que hemos estado haciendo hasta ahora. Como referencia, especialmente con pset 7 y el proyecto final en adelante, se aprovechan de esta URL aquí si desea leer sobre las formalidades de PHP. De hecho, es como un libro de texto en línea gratis con eficacia, y usted también encontrará que lo que es realmente bueno de PHP es que hay cientos de funciones que vienen con el mismo, mientras que en C que no necesariamente tienen acceso a más funciones que estaban en la biblioteca matemática, la biblioteca CS50. En PHP y un montón de lenguas modernas, Python y Ruby, entre ellos, , tendrá acceso a tantas funciones más, lo que significa que tienes que escribir mucho menos código, ya que puede estar de pie sobre los hombros de los demás que ya han escrito algunas cosas para ti. Echemos un rápido recorrido por la sintaxis de PHP y luego escribir algunos ejemplos. Lo bueno de PHP, ante todo, es que no hay función principal. Si desea escribir un programa en PHP que acaba de empezar a escribir código, y usted no tiene que preocuparse de principal. No hay int. No hay retorno. No hay argv, argc que se requiere cuando se escribe el programa. Más bien puede simplemente comenzar a escribir código, y esto es en parte debido a que PHP es lo que se llama un lenguaje interpretado. C fue compilado, y que fue compilado en el sentido de que se inicie con el código fuente, se ejecuta a través de Clang, que es un compilador, y, finalmente, después de una cierta cantidad de pasos que obtener el código objeto, 0s y 1s. PHP y Python y Ruby y Pearl y otros diferentes tipos de idiomas que no les compilar. No te vas a partir del código fuente de 0s y 1s. Usted acaba de ejecutar el código fuente, y se ejecuta el código fuente escribiendo en un archivo de texto normal, que termina en. php en este caso en lugar de. c, y lo que hace el programa en su ordenador se interpreta literalmente el código línea por línea por línea. En otras palabras, en lugar de escribir un programa y ejecutar el programa directamente en su lugar escribir un programa con un archivo con extensión. php. A continuación, se ejecuta un programa llamado php.exe, si estás en Windows, PHP o simplemente si estás en Mac OS o Linux, y se proporciona como entrada al programa PHP su propio código fuente, y su propósito en la vida es leer su código de arriba a abajo, de izquierda a derecha, y hacer lo que he dicho. Veamos lo que esto va a significar sintácticamente. En PHP tenemos condiciones. Esta diapositiva es idéntico a lo que vimos en la semana 1 porque sintácticamente condiciones, IFS e IFS else y else en PHP exactamente así. Cuando se trata de expresiones booleanas que van a ser exactamente así. Cuando se trata de Anding cosas juntos como booleanos que va a ser exactamente así. Cambia el mismo aspecto, y usted tiene el beneficio añadido en PHP que los interruptores en C sólo podía encender un char o int. No se podía encender un valor de cadena. En PHP usted puede realmente tener una expresión que es una variable cuyo contenido es una cadena, y en realidad se puede hacer la comparación de cadenas en la forma intuitiva real, No puntero comparación, a fin de decidir si hacer caso i o j u otra cosa. Veremos que posiblemente en poco tiempo. Loops demasiado maravillosamente son los mismos. Para bucles tienen una inicialización, una condición, y un cierto número de cambios. Aunque también existen bucles en PHP. ¿Es bucles while también existen en PHP, y existen matrices en PHP, pero aquí es donde la sintaxis empieza a ser un poco diferente, pero los conceptos son los mismos, y los conceptos realmente son los mismos como lo fueron en 0 Semana con Scratch. En primer lugar está el signo $. Esta fue una decisión de diseño en PHP por lo que cualquier variable en PHP de diseño comienza con signo $. No hay más X, Y, Z. Es ahora $ x, $ y, $ Z porque sí. Es algo a tener en cuenta, y ahora en el lado derecho esto es similar a una matriz, pero estamos usando corchetes aquí. En PHP y JavaScript, ya que finalmente va a ver, para declarar una matriz que hacer corchete abierto y cerrado corchete, y entonces usted tiene una lista separada por comas de valores, ya sea enteros o cadenas de caracteres, o lo que quieras, dentro de esa expresión allí. Ahora, ¿cómo hacemos algo como esto en C? ¿Cuál es la sintaxis para declarar estáticamente una matriz de números conocidos? Fue llaves, la diferencia tan pequeña aquí, pero tanto en PHP y, finalmente, que sólo utiliza JavaScript corchetes, por lo que realmente el único detalle interesante es el signo $ para el nombre de la variable y también los corchetes, y hay una cosa curiosa que se ha omitido también en el lado de la izquierda del signo =. Lo que falta que hemos estado requiriendo desde hace semanas? Si. [Respuesta de los estudiantes inaudible] El tamaño, por lo que no hay ninguna mención del tamaño de la matriz. Francamente, no hay mención de corchetes en el lado izquierdo del signo =, y lo que más falta en la línea? Si. >> [Inaudible respuesta de los estudiantes] El tipo, así que lo que es interesante en particular sobre PHP es que no es un lenguaje fuertemente tipado como C es, y eso es inflexible en el sentido de que hay que decir char, debe decir int, debe decir flotador. Cada vez que desee una variable que tiene que decirle a su Clang qué tipo es. PHP es un poco perezoso. Se escriben libremente en el sentido de que usted puede tener flotadores y caracteres y cadenas y ints y así sucesivamente, pero el propio idioma en realidad no importa lo que usted pone dentro de una variable. Usted no tiene que informar de antemano qué tipo de datos va en una variable. Es totalmente de usted, así que es agradable en que usted no tiene que preocuparse tanto acerca de los datos a escribir y preocupante lo que sus argumentos son y así sucesivamente. Esto también significa que, finalmente, las funciones en PHP va a ser capaz de volver o bien más de un int el tiempo, y una vez que tal vez en cuando van a devolver un bool, un valor lógico falso, por ejemplo, para significar que algo salió mal. Esto nos da algunas Upsides, sino que también nos hará por tipo de diseño un poco más flojo cuando se trata de tipos de datos. ¿Qué más hay que tener en cuenta aquí? Variables mirar como esto, así que $ s = "hola, mundo". Esa es quizás inferirse a partir del ejemplo anterior, y tenemos otro tipo de bucle. Esta realidad nos veremos de vez en cuando, ya que es bastante práctico, construir un foreach. En este caso, el bucle foreach lleva dentro de sus paréntesis 3 palabras típicamente, $ Algo en primer lugar, que es lo que quieres array para iterar sobre los miembros, entonces, literalmente, la palabra clave como, a continuación, por último, otro nombre de variable que puedes elegir. Puede ser foo, bar, o elemento, y lo que esta construcción no es si el array $ contiene 10 elementos en cada iteración de este conjunto-lo siento, en cada iteración de este bucle el elemento variable llamada va a ser actualizada para ser el primer elemento de la matriz, entonces el segundo elemento de la matriz, a continuación, el tercer elemento de la matriz, evitando así la necesidad para hacer el soporte de notación cuadrada ligeramente molesto y $ I con el fin de índice en una matriz. PHP hace todo ese trabajo por usted y en cada iteración sólo te entrega el siguiente elemento de la matriz sin que tenga que conocer o preocuparse por su posición de índice numérico. Y luego, por último, por ahora, no hay otra característica de PHP que va a ser enormemente útil, especialmente cuando comenzamos la programación en la Web, y que se conoce como una matriz asociativa. Los arreglos que conocemos hasta ahora como de 20 segundos hace y durante los últimos 8 semanas se indexado numéricamente arrays, tipo de arreglos tradicionales, donde los índices son enteros, 0, 1, 2, todo el camino hacia arriba. Las matrices asociativas son mucho más poderosos. Te permiten tener claves arbitrarias, índices arbitrarios y valores arbitrarios. Mientras que en una matriz tradicional es 0, 1, 2, en una matriz asociativa que puede tener un índice o una tecla de foo cuyo valor es bar. A continuación, puede tener otra clave cuyo nombre es baz y cuyo valor es qux. Una vez más, estúpidos informáticos genéricos nombres de las variables aquí, pero el punto es que esta serie no tiene soporte 0 o soporte 1. Está vez va a tener soporte foo y baz soporte. Esto es mucho más versátil en el que vamos a ser capaces de asociar palabras con otras palabras, las claves con valores completamente arbitraria, y vamos a ser capaces de obtener esos valores en el tiempo constante por debajo de la capucha lo que es un array asociativo realmente es una tabla hash. Recordemos que una tabla hash le permite poner en alguna entrada como poner en la palabra David si desea insertar David en una especie de diccionario, y luego volver algún valor típicamente. En el caso de la ortografía, verdadera o falsa. David o cualquier palabra que esté o no está en el diccionario. Una matriz asociativa es en realidad una tabla hash, pero es una encarnación de usuario mucho más amigable de la misma. Como veremos, esto va a permitir que hagamos algunas cosas muy, muy fácilmente. Echemos un vistazo a algunos básicos PHP ejemplos y ver lo que podemos hacer con este lenguaje. Déjenme seguir adelante y abrir en nuestro directorio de origen hoy un archivo llamado hello1.php. Este archivo es más un comentario de lo que es el código real, así que realmente me quite todos los comentarios en el archivo y presentar a usted tal vez el programa más simple PHP aquí. 5 líneas, y algunos de los que son los espacios en blanco, así notar algunas diferencias clave aquí. El archivo se llama hello1.php. La primera línea, sin embargo, es , significa que es para mi código PHP. Vamos a ver cómo manejar esto. Voy a volver a mi ventana de terminal aquí. Voy a entrar en mi directorio PHP. Tenga en cuenta que tenemos un montón de archivos, el primero de los cuales es hello.php. Déjenme seguir adelante y ejecutar este hello1.php, entrar. Permiso denegado. Bien. ¿Cómo nos hemos fijado este tipo de cosas en el pasado? ¿Qué es eso? >> [Respuesta de los estudiantes inaudible] Necesitamos leer y escribir, pero me deja hacer ls-l. Recuerde que esta salida un tanto críptica cual hello1 parece ser de lectura y escritura por mí pero legible por todos los demás. Resulta que este hecho no es un paso en la dirección correcta. La diferencia, de nuevo, con un lenguaje interpretado es que no se ejecute el programa directamente. Usted en vez ejecutar un intérprete y entregarla el código que has escrito para que pueda interpretarlo línea por línea. En este caso, el intérprete o el programa que realmente desea ejecutar es, literalmente, llamado PHP. En algún lugar de este disco duro de la máquina hay un programa alguien escribió llamado PHP, o en Windows php.exe. Lo que voy a hacer aquí es que voy a correr realmente PHP pero lo da como un argumento de línea de comandos el código que he escrito, y luego voy a alejar la imagen y pulsa enter. Se ejecuta mi programa para mí, de arriba a abajo, de izquierda a derecha. Déjenme seguir adelante y abrir una variación leve de esto. En hello2.php aviso que esto también es en su mayoría comentarios, así que vamos a deshacerme de ellos como una distracción, y lo que es claramente diferente ahora sobre este archivo? Hay una nueva línea, un tanto críptica en la parte superior. En la línea 1 es #! / Bin / php. Bin es una convención en Linux y Mac OS para binarios, por lo que / bin significa que es una carpeta que contiene un montón de archivos binarios que se programa, una de las cuales es PHP. El #! Es apodado shebang, que es la forma más rápida de decirlo, y lo que significa este es que cuando se ejecuta este programa ahora hay una alusión a la parte superior del archivo que le dice al ordenador qué intérprete de usar. Se pone un poco molesto si tienes que decirle a sus usuarios y clientes "Hey, escribimos este programa llamado hello1.php". Todo lo que tienes que hacer es correr PHP para siempre y luego el nombre de este programa. Francamente, no sería más que agradable para correr hello1.php, y, de hecho, podemos si hacemos lo siguiente. Déjenme seguir adelante y hacer ls-l, y el aviso en hello2 todavía es sólo de lectura y escritura y luego leer leer, así que todavía no puedo hacer esto, hello2.php. Pero hemos introducido esta muy brevemente la última vez, el comando chmod. Si lo hago chmod a + x, lo que significa todo ejecutabilidad plus, y luego hello2.php y luego hacer ls-l de nuevo notar lo que ha cambiado. Uno, Linux me muestra el nombre del archivo en verde para transmitir la idea que es ejecutable, pero que es más importante, en el lado izquierdo cuenta de que el bit que representa para x ejecutable ha sido establecido. Lo que esto significa es ahora puedo correr ./hello2.php como de costumbre, pulsa enter, y debido a todo el asunto en la parte superior del archivo que hay una pista, una vez más, que dice a Linux utilizar este intérprete para ejecutar este archivo. No te preocupes por obligar al usuario a realmente escribir. Y lo que es bueno es que es algo irrelevante a mis clientes o mis amigos idioma que escribí este programa, así que me puede seguir adelante con mv y cambiar el nombre de esta cosa hello2, por ejemplo. Y ahora si me lo ./hello2 y alejar mi programa sigue funcionando. Estas extensiones de archivo son una convención humana que es necesario para algo como Clang y hacer que buscarlos. Pero para PHP, yo podría llamar a esto cualquier cosa extensión de archivo que quiero. Podía engañar al mundo haciéndole creer que soy realmente bueno en Ruby, y yo podría escribir hello2.rb y luego ejecutarlo, y listo, ahora tengo la versión de Ruby, que es una completa mentira. Sin embargo, las extensiones de los archivos no tienen sentido si el archivo es ejecutable y tiene esta pista especial en la parte superior del archivo. Ahora, en un aparte, permítanme mostrarles rápidamente la versión 3, que es una especie de truco útil conocer. En hello3 hice algo un poco mal que voy a actualizar la línea de código fuente. En la versión 3, resulta que en la mayoría de sistemas Linux hay un programa llamado env para el medio ambiente, y lo que puedes hacer aquí es que si usted no tiene ninguna idea de dónde PHP está instalado en el disco duro local, ya que en realidad podría variar en función de la computadora que alguien está usando, env sólo dice ejecute env, que se encuentra en la mayoría de los sistemas, y averiguar donde PHP es. Sólo un truco común por lo que no tiene que preocuparse de saber que un programa es. Pero si te importa para saber dónde es un programa y no se ha atendido hasta el momento puede utilizar el comando que. Permítanme hacer un zoom hacia fuera y que tipo php, y note que me dice que es en realidad en usr / bin / php. Es una especie de mentira. También en salida. Se me acaba de mostrar el primer golpe. Si te has preguntado donde Clang es decir, que Clang, que está en usr / bin / clang, que hacer, usr / bin / make, y lo que eso significa es que todo este tiempo que podría haber estado escribiendo usr / bin / clang Intro para ejecutar Clang, pero es un poco tedioso para hacerlo, por lo que algunas carpetas como usr / bin bin y se supone que son valores predeterminados por lo que el equipo sabe que mirar en ellos para usted. Cualquier pregunta sobre cómo escribir un super, super sencillo programa Hello World en PHP y luego lo ejecuta? Porque ahora vamos a empezar a introducir la sintaxis más convincentes. Muy bien, aquí vamos. Estos programas que hemos visto a todos ellos antes. Si abro, por ejemplo, vamos a hacer beer1.php, no vamos a ir a través de varias versiones de esto, pero lo que hice Se me senté y lo derramó o se convierten mi código C para el código PHP aquí. La mayor parte de la parte superior del archivo es comentarios aquí. Resulta que hay una nueva función que necesitamos llamada readline. GetString, el recuerdo, desde la semana 0 en adelante fue una cosa CS50. PHP viene con su propio fácil de usar función llamada readline que toma un argumento que especifica el indicador que desea mostrar al usuario, y hace lo que readline se devuelve todo lo que el usuario escribe pulg En este caso, estoy declarando una variable llamada $ n. Estoy almacenando en ella el valor de retorno de readline después de preguntar al usuario con esta cadena. Simplemente copia de seguridad, para ejecutar realmente esta cosa, déjame ir por delante y ejecutar beer1.php php. ¿Cuántas botellas habrá? Vamos a hacer esta vez 2. Intro. Eso es todo. El programa es funcionalmente idéntica a la versión C de semanas atrás. Pero sintácticamente vamos a ver lo que es diferente. Después de obtener un int partir de la notificación de usuario que estoy haciendo un poco de comprobación de errores, y si n es menor que 1 dejé y me imprimir un mensaje no para el usuario y con la salida 1. Esto también es un poco diferente.  En C, ¿qué hicimos? En C volvimos 1. En PHP salir con 1, que, francamente, creo que es un poco más intuitivo porque estás literalmente salir del programa. Muy bien, y entonces aquí la canción molesta es sintácticamente idéntico a excepción de la variable, por lo que aquí abajo, en la línea 24 en adelante cuenta de mi bucle for es casi lo mismo, pero tengo $ delante de i y n, y lo que es también falta de la línea 26 que hemos tenido en el pasado cuando se declara una variable i? No hay ningún tipo. No es correcto decir que en PHP int. Simplemente no es necesario hacer eso. La computadora, el intérprete PHP es lo suficientemente inteligente como para darse cuenta de que si se pone un número en $ I este será tratado como un número para ti. Y aquí nos conecte $ i, $ i, $ i - 1. Todo esto es lo mismo, y entonces aquí hacemos un "Wow, eso es molesto" printf y luego salir (0). Una vez más, la comida para llevar es que a pesar de que vamos a pasar relativamente poco tiempo en PHP, sin duda frente a lo que hicimos en C, que es casi lo mismo, y así lo vamos a hacer hoy y la semana que viene y más allá es realmente centrarse en algunas de las nuevas ideas. Sólo para ver que otra cosa se traduce por encima de C, Este fue un programa super simple que hicimos en la Semana 1 o 2 en cubos que un valor. Pero lo interesante en el momento de este programa es que introdujo la noción de una función personalizada escrito que nosotros mismos hemos escrito. La sintaxis de PHP es casi el mismo. Aquí está mi programa hasta la parte superior. Note una vez más ausente es cualquier noción de principal. Empiezo a escribir código, y esto es lo que va a conseguir ejecutado por el intérprete. Puedo imprimir x ahora es 2, es de suponer. Entonces me dicen cubicar ... Entonces llama a la función cubo y pase $ x y asigne el valor devuelto a $ x. Entonces me dicen que está en cubos, y luego me dicen esto, que es de esperar diremos que x es ahora 8. La sintaxis de la función en PHP es muy ligeramente diferente. Una vez más falta es el tipo de retorno. Una vez más falta es el tipo de retorno y también es lo que falta otro tipo? [Respuesta de los estudiantes inaudible] Bueno, está bien, eso es bueno. Vamos a volver a eso en un segundo. No tenemos, por ejemplo, int aquí. No tenemos, por ejemplo, han int aquí porque, de nuevo, en PHP simplemente no es necesario y no debe hacer eso, sino que hay esta nueva palabra clave se llama función. En PHP es casi un poco más claro, porque cuando se desea una función que literalmente dicen función, le das un nombre y una lista separada por comas si alguno de sus argumentos. No hay necesidad de decir nula o algo así, y luego de retorno es el mismo, $ A * a * $ $ a. Lo que también falta? Sammy señalamos aquí. En la parte superior del archivo completamente ausente en PHP también es un prototipo. Esto también es por diseño. Idiomas e intérpretes como PHP son más inteligentes que alguna vez lo fue C en los compiladores como Clang. Recordemos que Clang, si no lo digo que existe cubo, si no lo digo que printf existe como un prototipo o con un # include, bueno, iba a gritar a usted y ni siquiera compilar el código. PHP y otros idiomas modernos son mucho más inteligentes cuando se trata de esto. Ellos se encargan de leer a través de todo el código y luego gritan a usted sólo si se encuentra en ninguna parte del cubo. No importa si es cubo en la parte inferior o la parte superior o incluso en algún archivo separado. Lenguajes PHP y similares son ahora lo suficientemente inteligente como para mirar hacia adelante en todo considerando que antes por haber cometido un error. ¿Dónde nos deja eso? Vamos a hacer un último ejemplo aquí en las condiciones, y si abro aviso conditions2.php demasiado sintaxis aquí es casi el mismo. Estoy usando readline en lugar de GetString, pero esa línea es la misma que antes, "Me gustaría un entero por favor." Después, hay una condición si, una persona si, a continuación, una persona, pero funcionalmente este programa también es idéntico a lo que hicimos semanas atrás, así que si me quedo esto, php de Condiciones2, y le doy un número como 23 - Escogí un número positivo. Si le doy -1 cogí un número negativo. Si le doy 0 Yo a la verdad recogió 0. Entonces, ¿quién se preocupa de todo esto? Bueno, uno de la clase de diversión ejercicios aquí al menos para mí era ir hacia atrás y ver lo rápido que podría poner en práctica pset 5, el conjunto de procesadores faltas de ortografía. Recordemos que había un archivo llamado speller.c, y había un archivo llamado dictionary.c. Lo que yo hice fue un poco gastado unos minutos y me convertí el código C de código PHP, y no vamos a pasar mucho tiempo en speller porque al igual que en el conjunto de procesadores 5 usted realmente no necesita pasan mucho tiempo en ortografía sí mismo porque su atención estaba en diccionario. Baste decir que si usted lee a través de ortografía, este archivo aquí, que es más o menos equivalente al código C le dio para pset 5. Acabo de añadir un poco de $ en los lugares. He cambiado algunos nombres de función si no existe en PHP. Hay una cosa adicional aquí, preg_match, que es la forma un poco más elegante de hacer algo, pero vamos a volver a ese tiempo. Pero en fin, ortografía es casi idéntico, y si nos fijamos en la parte inferior lo que finalmente escupe es esto aquí, palabras mal escritas, las palabras en el diccionario, las palabras en el texto. Muy bien, así que lo interesante ahora es la siguiente. En la parte superior de mi archivo que estoy requiriendo dictionary.php. Al igual que C ha # include PHP tiene una función especial denominada requieren que más o menos hace lo mismo, requieren un archivo llamado dictionary.php. ¿Cómo puedo ir sobre la aplicación pset 5? Déjenme seguir adelante y abrir un archivo aquí. Permítanme tomar una pequeña referencia aquí. Y me deja crear un nuevo archivo y empezar a llamar a este dictionary.php. Permítanme decirlo de otra carpeta para que podamos hacer esto en vivo. Y ahora voy a hacer un zoom in Voy a empezar mi archivo PHP con soporte abierto php cerrado soporte. Y entonces aquí hay algunas funciones que se necesitan para poner en práctica para pset 5, así que vamos a empezar a aplicar algunas de las personas, así que la función de verificación, que tuvo que tomar una palabra como argumento. Vamos a hacer eso y volver a ella en un momento. Se carga la función, que tuvo en lo que como un argumento? Diccionario, por lo que el archivo que yo realmente quería cargar. Había tamaño de la función, que no toma ningún argumento y no había función, ¿qué era lo otro? Unload, que no toma ningún argumento tampoco. Estas son las 4 funciones que tendrían que aplicar ahora en PHP, y lo que voy a hacer es seguir adelante y hacerlo. Muchos de ustedes utiliza una tabla hash en pset 5, así que voy a seguir adelante y crear una tabla hash en PHP. Hecho. Eso me da una tabla hash. Bueno, ¿por qué? Una, la variable se llama $ tabla, sólo para evocar la idea de una tabla hash. Los corchetes, sin embargo, recordar, representan qué? Una matriz, pero en arrays PHP no tiene que ser indexado numéricamente. También pueden ser matrices asociativas, lo que significa que usted puede tener llaves arbitrarias y valores. Al igual que en pset 5, aquellos de ustedes que hicieron implementaciones tabla hash probablemente inserta la palabra y después se inserta en una cadena de listas enlazadas, o almacenada en algún lugar del valor de verdad o algo por el estilo. De alguna manera recuerda el hecho de que la palabra estaba allí. Por ahora, eso va a ser mi tabla hash, y lo que ahora ir sobre la aplicación de la función de comprobación Sólo tengo que mirar dentro de esa tabla hash y ver si una palabra está ahí. Lo que voy a hacer es que voy a decir si- digamos isset, que es una función PHP que literalmente quiere decir es el conjunto de claves, así isset ($ tabla [$ palabra], y si es así devolver true. Eso es todo. Eso es pset 5 en PHP. Bueno, para ser justos, está bien. Else return false, por lo que no está ahí. Lo que realmente está pasando aquí? Bueno, si la tabla de mesa o hash aquí más general- es una matriz asociativa que significa que usted puede indexar en él con una palabra como "palabra", y hay que volver algún valor. Somos una especie de conseguir un paso por delante de nosotros mismos. Sería algo bonito si en realidad carga el primer archivo, así que la carga no es tan simple, pero déjame seguir adelante y batir  una implementación muy rápida de la carga. Déjenme seguir adelante y decir palabras se Diccionario archivo. La función de archivo en PHP abre un archivo y regresa a usted una gran variedad de todas las palabras en ese archivo, sólo les da a ustedes. Ese fue un dolor demasiado grande, ¿no? Ahora foreach, esta es nuestra nueva construcción, foreach ($ palabras as $ palabra). Este ciclo va a comenzar a iterar sobre las palabras de la matriz y asignar a la variable $ palabra cada palabra en el archivo desde la primera a la segunda a la tercera a la cuarta todo el camino así que no tienes que hacer el molesto [i] notación y similares. Y lo que estoy simplemente vas a hacer para cada una de estas palabras se lo guarde en mi mesa de indexación en la tabla y luego haciendo así porque hay que recordar que una palabra está en mi diccionario lo único que realmente tenemos que hacer es una especie de vuelta un poco y decir esta palabra en mi tabla hash está ahí, es cierto. Y si no está allí, no tengo que poner explícitamente falsa, de lo contrario, tendría que poner falso para todas las palabras posibles en el universo. Es suficiente para mí sólo para fijar un valor de índice en true si una palabra está en realidad en mi tabla hash. Ahora, me voy a cortar un par de curvas aquí que voy a agitar las manos menos por ahora, pero ahora la función de carga se realiza. Me carga todas las palabras en el archivo en una matriz. I iterar sobre dicha matriz, y para cada palabra de la matriz Lo conecto en mi tabla hash con una línea de código. Esto es divertido. ¿Sabes cómo se puede implementar tamaño ahora? Pues bien, el tamaño es siempre muy fácil, para ser justos. Aquí sólo puedo hacer recuento de regresar de mesa. Eso es bastante fácil también, cuente el número de cosas en la mesa. Eso es en realidad un poco no es el más eficiente. Probablemente debería tener un tamaño variable llamada para que lo podamos hacer en tiempo constante, pero eso es bastante fácil. Ah, y luego descarga, si de verdad queremos ser anal aquí podemos decir que es como se descarga algo. Usted acaba de establecer la variable igual a un conjunto vacío, y se deshace de todo lo que estaba allí. No hay necesidad de llamar libre. Una vez más, he cortado algunas curvas, y me disculpo por conjunto de problemas asignando 5 quizás en C, pero si ahora seguir adelante y ejecutar esto, Voy a correr en realidad la versión que escribí con antelación sólo para que yo no he cometido ningún error de sintaxis que sea. Déjenme seguir adelante y ejecutar corrector ortográfico. El uso es el mismo. Aquí hay un archivo de diccionario que sólo contiene la palabra foo. Aquí hay un archivo de texto que contiene sólo foo bar. Vamos a revisar la ortografía de esto, así ortografía, utilizando el archivo de diccionario en el archivo de texto. Hay una palabra mal escrita, bar, y listo. Hecho con pset 5. Vamos a tomar un descanso de 5 minutos aquí, y vamos a volver y más en PHP. De acuerdo, estamos de vuelta. Vamos a hacer-me odias por un tiempo. Ahora vamos a ver realmente si esto no era un positivo la aplicación real de esta cosa en PHP. Por supuesto, nos tomó 45 segundos para implementar. Pero vamos a seguir adelante ahora y manejar las cosas. Déjenme seguir adelante y ejecutar una versión de C de ortografía, y vamos a correr en uno de los mayores archivos, que es la Biblia King James. Y aquí es en que vamos a entrar en nuestra carpeta de C, speller en King James la 5 ª. Una gran cantidad de palabras mal escritas. Muy bien, así que esa es la salida que probablemente se hizo aún si los tiempos son un poco diferentes, si tienes todo funcionando correctamente, y el tiempo lo que en total para corregir la ortografía la Biblia King James fue 0,38 segundos, así que bastante bien con esa implementación. Ahora voy a ir a la versión de PHP, que acaba de escribir. Déjame correr ortografía en King James. ¡Vaya, ignorar ese error. Estoy en el directorio equivocado. Speller sobre King James la 5 ª. Ya está casi hecho. Bien, el astuto observador se dará cuenta de que era más de 3 segundos allí. Ese es el verdadero tiempo en funcionamiento. Resulta que se necesita tiempo para escupir gran cantidad de texto fuera debido a buffer temas, pero de corta larga historia, que fue de 3,15 segundos de tiempo de máquina, tiempo de CPU, frente a lo que era hace un momento? Al igual que 0,3. Quiero decir, es un orden de magnitud más lento, así que ¿dónde está ese desaceleración ridículo viniendo? Pues bien, como ha sido el caso con la mayoría de las decisiones de diseño que hemos hecho en la clase durante las últimas 9 semanas casi siempre este equilibrio. A veces, sólo entre el espacio, a veces entre el espacio y el tiempo, espacio, tiempo y esfuerzo de desarrollo, y de hecho aquí, aunque nos ahorramos una gran cantidad de tiempo, tal vez potencialmente 10.20.30 horas el tiempo de desarrollo de la aplicación del corrector ortográfico con azotes que en tan sólo 45 segundos con este lenguaje el precio que se paga es que se trata de un orden de magnitud más lento como resultado, y este es generalmente el caso con la mayoría de cualquier lenguaje interpretado, PHP, Python, Ruby, Pearl u otros por el que si usted va a ejecutar a través de un intérprete y que se lea el código línea por línea, de arriba a abajo, de izquierda a derecha, intermediario que se va a tomar algún tiempo propio, y lo que se siente aquí en los 3 segundos frente a 0,3 segundos es el hecho de que existe este intermediario que tiene que interpretar literalmente nuestro código línea por línea, y Dios no lo quiera, si usted está dentro de un bucle con un archivo enorme que contiene cientos de miles de palabras. Ese recargo se va a sumar y sumar y sumar y sumar. Para obtener una herramienta como esta probablemente no sea el mejor lenguaje a utilizar para la aplicación de un corrector ortográfico si inmediatez es de interés para sus usuarios y para ti. Pero el lujo que tenemos en este momento es si utilizar un lenguaje como PHP o una gran cantidad de lenguajes interpretados en el contexto de la Web, para el caso, que tiene el beneficio que Internet es mucho más lento que la mayoría de las computadoras. Usted tiene una CPU GHz en el equipo, 2 GHz, tal vez incluso más en estos días. Pero la realidad es que en Internet hay una gran cantidad de latencia por lo que para un navegador para hablar con un servidor, a pesar de que vimos la semana pasada que eso es bastante rápido, la mitad de una milésima de segundo más o menos, que también se suma, y ​​si usted está descargando cosas como una imagen o una foto de Facebook o recibir mensajes instantáneos a través de charla Facebook, Gchat o similares, todos de estos tiempos de ida y vuelta entre el navegador y el servidor de inicio de sumar, que hace que su elección particular de la lengua en muchos casos no es tan relevante, por lo que está muy bien usar un lenguaje ligeramente más lento como PHP o Python o Ruby pero para los que no son Upsides grandes para usted y sus colegas y sus amigos, ya que puede poner en práctica las cosas así, mucho más rápido. Y por otra parte, tiene mucho menos riesgo de ciertos defectos de seguridad. No hay punteros en PHP. No hay ningún fallo seg que fácilmente pueden inducir del mismo modo que se pueda en C. Con C que está súper cerca del hardware. Con lenguajes PHP y similares que eres una especie de nivel superior, por así decirlo, con un montón de defensas entre usted y lo que realmente está pasando en el interior de la máquina, y es sólo una compensación. Hemos llegado al punto de tener estos más modernos lenguajes de alto nivel como PHP debido a las lecciones aprendidas en lenguajes como PHP en C. Pero si usted no entiende lo que está pasando debajo de la capucha de todo este tiempo que sin duda no puede tomar las decisiones de diseño correctas, y, ciertamente, cuando se trata de trabajar en un lugar como Facebook o Google o en cualquiera de estos lugares que son cada vez más jugando con grandes conjuntos de datos incluso si usted regresa y se Premed y estamos trabajando con algunas de las EM en algunos gran conjunto de datos con pacientes y médicos y similares, usando las herramientas adecuadas es enormemente atractiva porque de lo contrario el análisis de un conjunto de datos puede tardar unos segundos, o que, literalmente, puede llevar horas. Este es sólo un ejemplo, no para frustrar con cuánto esfuerzo más fue en C, pero que le ayudarán a apreciar que cuando se ponen en práctica algo en C que realmente entienden, o en teoría, comprender realmente cómo todo lo que es o debería estar trabajando, y usted tiene un control casi completo sobre lo que está pasando debajo de la capucha, y con estos lenguajes de alto nivel usted tiene que renunciar a un mayor control de las personas que los inventados y están sujetas más a sus decisiones de diseño que la tuya. Pero si damos por sentado que el rendimiento no es tan importante en la Web debido a estas otras cuestiones, sólo las velocidades de red son un poco más lento que la velocidad de CPU de todos modos, para que podamos elegir de permitirse el lujo de utilizar un lenguaje un poco más lenta si los upsides son las cosas que podemos desarrollar 10 veces más rápido o más. Vamos a ver cómo podemos empezar a usar esto. Déjame ir a una carpeta entre los ejemplos de hoy en día llamado frosh.ims, y esto fue realmente personalmente motivado por el hecho de que la primera cosa Escribí para la web años atrás después de tomar CS50 CS51 y es un sitio web para el programa de mensajes instantáneos Frosh, deportes intramuros de primer año, que en ese momento se trataba de bastantes años atrás, que en el momento no había sitio para el programa, a pesar de que había una web, y en su lugar había un vigilante en Wigglesworth cual si quisiera para registrarse para el voleibol o el fútbol o lo que usted podría llenar una hoja de papel. A continuación, se camina por el patio. A continuación, podría llamar a su puerta y se deslizan en su puerta o en la mano al procurador un pedazo de papel con su nombre en él, sean o no quieres ser el capitán del equipo, ¿Qué deporte te quería hacer, y lo que se pulg dormitorio Era una especie de camino de la vieja escuela de hacer las cosas, y esto fue una de las principales oportunidad para automatizar una gran parte de este proceso. Usted sólo tiene que ir a la página web. Escribes algo pulg Usted recibe un correo electrónico de confirmación, y el brazo, ya está hecho. Esta fue la primera cosa que hice, aunque en un lenguaje llamado Pearl, pero es relativamente fácil de hacer en PHP, y esto es una especie de representante de los problemas que usted puede comenzar a resolver cuando puede expresarse programación y no tener que depender de cosas como los sitios de Google o Excel o herramientas que se entregan a ti. Ustedes tienen ahora la capacidad de hacer cosas como esta. Esta es una versión super feo de un formulario, pero vamos a utilizar para el inicio de la conversación mediante el cual se trata de más o menos cuál es la forma que parecía años atrás para nosotros para que las personas en la Web para inscribirse en Frosh mensajes instantáneos. Nos preguntamos por un nombre, una casilla de verificación para saber si son o no quería ser capitán, hombre o mujer, y entonces, ¿qué dormitorio en que estaban, y entonces se envíe este formulario. Veamos primero debajo de la capucha en el código HTML que representa esta página web. Déjame entrar en froshims0, y en un aparte, para pset 7 estoy dando por sentado los directorios y carpetas de los que estoy poniendo las cosas pulg Le guiaremos a través de cosas exactamente donde tiene que ir en el aparato, los comandos de mod que tiene que correr, así que no te preocupes por todo el detalles estúpidos sincronización desde el primer momento aquí. Muy bien, aquí está froshims0.php. Permítanme desplazarse hacia abajo, y lo que es curioso aquí, este es un archivo PHP, pero lo que hay dentro de ella, con claridad? Es un montón de HTML, PHP, y de hecho sus orígenes realmente eran para ser un lenguaje centrado en la Web. Hace un momento lo utilizamos para poner en práctica el ejemplo de la cerveza, las condiciones ejemplo, el ejemplo hola, y eso está bien. Puede utilizar PHP como lenguaje de scripting donde un script es en realidad la nomenclatura dada a un programa rápido y sucio o algo que se escribe en un guión o más generalmente un lenguaje interpretado. PHP es super útil para los que ya has visto con qué rapidez relativamente podemos avivar programas en PHP. Pero fue diseñado realmente para ser utilizado para la Web, y diseñado para la Web, en el sentido de que notar aquí en la parte superior del archivo Empiezo con