DAVID Malan: Todo ben. Este é CS50, e este é o fin de semana nove. Foi un turbilhão sobre nos últimos días. E sete conxunto de problemas, se é xeonllo profundamente dentro del, entende que hai un gran pouco novo que está aí dentro. Pero imos ver se non podemos remendos todo xunto aquí brevemente antes, logo desviando en máis noutra dirección e visión onde máis podemos ir. Entón, ata agora, nós xa falamos sobre HTML. Nós falamos sobre CSS. Nós falamos sobre PHP. Vostede comezou a probar SQL. Hoxe, imos falar un pouco sobre JavaScript. Pero como facer todo isto dispares linguas se encaixan? Entón nós falamos a semana pasada sobre o noción de ter un servidor. Entón imos chamar este rectángulo como un servidor web aquí. E un servidor web serve certamente arquivos. E algúns deses arquivos poden ser arquivos HTML. Entón, unha das cousas que un servidor web Pode cuspir pode ser un ficheiro que nós imos chamar así contendo un pouco de HTML. Así, en termos leigos, o que O HTML permiten que faga? Audiencia: Ollar Páxina agradable. DAVID Malan: OK, facer unha páxina de bo aspecto, aínda que eu creo que eu teño probado que doutra forma. Así HTML deixa pór para fóra páxinas estruturalmente, e permite que tipo de estética marcar unha páxina, marcar o contido estático, de xeito que Pode, entón, vela cun navegador web. Pero esa é a clave. É contido estático. Vostede escribe-lo, garda-lo, e logo, enviá-lo para ti. E o servidor web serve entón Lo para os seus visitantes. Pero nós estilizar cousas usando un diferente linguaxe completamente. Comezamos a usar un atributo de estilo en certos etiquetas. E o atributo de estilo, imos definir cousas como o tamaño do tipo de letra e cor. E probablemente xa comezaron a descubrir, ou vai logo para a final proxectos potencialmente, aínda outro propiedades que pode usar no CSS. E así, en termos leigos, o que realmente, será que o CSS fai? Estes son só algúns exemplos dos mesmos. Que fai isto HTML non parece que de que xa vimos ata agora? Audiencia: Establecer estilos por si mesmo. DAVID Malan: Establecer estilos por si mesmo. Así, establecer as cousas como clases de como pode ter atopado, ou exclusivamente identificar nós nun documento a que se pode estilizar a eles. Pero, máis en concreto, eu diría que a CSS realmente permite que levar as cousas a última milla e permite que especifique moi máis precisamente a estética, mentres HTML para a maior parte deixa vostede estruturar as súas páxinas. E aínda que existen algúns patróns, como vimos etiqueta para unha etiqueta título, que a grosso modo fixo cousas grandes e en negra. Iso é unha definición moi xenérica da marca - gran e valente. O tamaño da fonte é esa? Que cor é esa? Como negriña é isto? E CSS permite máis finamente sintonizar cousas así. Así como disposición, como algúns de vós xa viron. E, francamente, CSS é algo dunha linguaxe confusa. É moi poderosa que pode facer literalmente calquera sitio que ten ver na web hoxe con el, pero é un tipo de dor no pescozo. E algúns de vós xa bateu a súa cabeza contra as paredes xa só para facer algo estúpido como centro dun menú na conxunto de problemas de sete se chegou a Nese punto xa. Pero entender, isto ser máis doado co tempo. Comeza a conta patróns. E unha vez máis, Google vai ser o seu amigo para as varias formas en que pode resolver este tipo de problemas. E atrévome a dicir, con CSS, HTML e máis Xeralmente, pode resolver problemas en moitas outras formas, que pode moi ben ser correcto, do que podería en algo así como C, mesmo agora PHP ou JavaScript. Hai só moitos diferentes formas para poñer as cousas fóra. Pero iso comezou a estar desorde, dixemos. Só tipo de commingling seu HTML e seu CSS co atributo de estilo foi algo desleixado. E, así, no canto dixen, máis ou menos abstractamente falando, que ten que polo menos comezar a factor o CSS probablemente. Atributos non o seu estilo, pero polo menos usar a etiqueta de estilo dentro do que parte da páxina web? Audiencia: Head. DAVID Malan: Na cabeza. Ata agora, só tiñamos o título se alí, pero tamén se pode engadir un estilo marcar, e pode poñer o seu CSS aproximadamente falando en dirección ao principio da páxina. Pero, entón, levou as cousas un paso adiante e nós consignado que máis nun ficheiro separado. E así, estes dous ficheiros foron dalgún xeito, agora ligados. E, de feito, foi o tag que fixo iso. E o que foi un dos máis completo motivacións para a nosa factoring CSS todo o máis? Audiencia: Reutilización. DAVID Malan: Reutilización. Non? Podes ver en p establecer sete xa que moitas das páxinas, a páxina de compra, a páxina de venda, o portfolio páxina, son, probablemente, estructurado forma un tanto semellante. Hai un logotipo CS50 finanzas na parte superior a non ser que decidiu cambialo. Hai un pé na inferior das páxinas. E CSS permite que despois de levar para fóra lo nun ficheiro separado para que se quere cambiar algo no mundo ao longo de todo o seu sitio web, pode realmente basta cambia-lo nun lugar. Pero hai un prezo a pagar potencialmente por consignado o CSS do meu ficheiro HTML nun separado arquivo de referencia co tag, que vimos o luns. O que podería ser o lado negativo diso? Pensando dunha semana atrás, para cando estamos fala de HTTP e TCP / IP e como Internet funciona. Algo aquí? Audiencia: Hai que máis tempo. DAVID Malan: Hai que máis tempo. Por que? Audiencia: [inaudível]. DAVID Malan: Yeah. Por iso, sen dúbida, ten un pouco máis de tempo. Porque un, o CSS está obviamente non o mesmo ficheiro. Entón, agora non ten que facer un, senón dous peticións. E cada unha destas peticións, como vimos en Chrome no chamado Inspector, e nós miramos a guía de rede, cada deses arquivos require un HTTP petición, o que vimos leva unha certa cantidade de tempo. Agora, quizais non sexa moi. Quizais sexa só 20 milésimas de segundo. Quizais sexa a 200 milisegundos. Pero pensar nunha páxina, como Facebook, ou CNN, ou Google, que son moi maior que os exemplos que temos mirou ata agora. Estas páxinas poden ter decenas de arquivos, cada un dos cales pode esixir un Descarga de un arquivo. Entón, as cousas poden potencialmente comezar a desacelerar. E, sobre todo nestes días en que todos teñen teléfonos móbiles nos nosos petos e conexións de internet máis lentas, ter que agardar uns milisegundos, algúns máis milisegundos para adicional ficheiros poden realmente ser lento. Latencia é a palabra que describe o tipo de esperar que ten que probar ao esperar algún anaco de información. Pero hai un lado positivo. Polo tanto, non é todo tipo de un - realmente é un pouco de unha gangorra aquí. Desvantaxe agora, pero o que os navegadores pódense facer se son intelixentes, a fin de evitar ter que solicitar a mesma styles.css arquivo de novo pode ser para facer o que? Cache-lo. Entón caché - C-A-C-H-E - xeralmente significa aquí só para salvar a arquivo que solicitou por primeira vez, e logo comprobar o seu caché para el. Comprobe se está tipo de recipiente de almacenamento, e se xa ten un copia do styles.css, aínda que algún outro páxina en p-set, ou en calquera sitio, solicita-lo novo, só para dar o usuario que aínda copia en caché. Non te preocupes que o solicite. Desvantaxe alí, con todo, como algúns de vós ter tropeçar no p-set. Se se fai unha modificación no servidor e volver ao navegador e actualizar, por veces, o navegador fai un favor e non se incomoda re-descarga do seu arquivo styles.css porque, imos alí, cales son as posibilidades que estes estilos que Facebook usa van cambiar hora a hora ou día a día? É moi baixo. Poden cambiar co paso do tempo, aínda que non por minuto ou por hora. Así, un truco, só FYI ao facer web desenvolvemento, a miúdo manteña premida a clave cambiar, por exemplo, e despois prema en recargar no seu navegador, e que a vontade tipicamente dicir a recarga navegador todo, incluso se xa ten na caché. Entón, de novo, vantaxes e desvantaxes, pero todos eles en última instancia, decisións de deseño. Entón, agora, non só rematar a historia aquí. Se eu agora ir para atrás e cara atrás e cara atrás e volta, comezan a introducir non só HTML, pero PHP. Así, en termos leigos, o que PHP imos facer? Audiencia: [inaudível]. DAVID Malan: Qué é isto? Audiencia: Presente lóxica no código. DAVID Malan: Si, introducir lóxica no seu código. Polo tanto, é unha linguaxe de programación de verdade con loops e variables, e funcións e condicións, e todos as cousas que teño usado camiño de volta cando desde o principio. E PHP, que xa vimos, se pode usar ou na liña de comandos - é Non ten que ter nada que ver coa web, aínda que iso é realmente as súas orixes e que tende para ser bo e propicio para - pero pode usar PHP só pola natureza o feito de que ten unha impresión () función, e unha función () printf, ou unha función () echo. Hai grupos de formas que pode imprimir un texto con PHP. Polo tanto, pode utilizar esta programación lingua para saída exactamente o que estabamos a falar antes. Pode xerar dinamicamente seu HTML. Quizais non toda ela. Quizais as cousas códigos ríxidos, como o cabeceira e pé, e logo, e as súas follas de estilo, e todo iso. Pero para algo así como-p establecer sete, onde está manipulando accións e amosando a bolsa do usuario, que é vai cambiar dinamicamente, pode certamente usar PHP ea lóxica que dá vostede como unha linguaxe de programación para saída subconxuntos dinámicamente da páxina. Entón, cando fala sobre sitios dinámicos, ou programación web, que é o que está realmente a falar. Usando unha linguaxe como PHP, ou cousas chamado Python ou Ruby, ou Java, ou Aínda outras linguas, para consultar unha base de datos moitas veces, ou outro servidor, e despois cuspir dinámica de HTML. Agora, o resultado final, como un aparte, é que o HTML da maioría dos sitios, incluíndo o seu set-p sete, é, probablemente, vai ser unha gran confusión se ollar para a fonte código nun navegador web. Isto non é un gran negocio. Neste momento, cando nos preocupa estilo, nos preocupa co cousas que escribe. Non se preocupan as cousas que o que as súas saídas de código. Entón non se preocupe con sangría aquí, se é que é PHP de feito, a saída de material. Despois de todo, o teu navegador non vai se importar, e un ser humano non estará ollando na fonte de calquera maneira. Nós os funcionarios, por exemplo, sería estar a ollar para o PHP. Entón deixe-me dar un exemplo rápido agora de por que máis que pode ser útil. Entón, francamente, eu non me lembro da última xa que eu usei C para resolver un problema en do mundo real. Foi, probablemente, na posgrao cando Eu precisaba usar unha linguaxe que foi moi baixo nivel e me deu a oportunidade de facer algo moi alta realizando para realmente salvar o maior número de CPU ciclos que puiden, en gran parte, porque eu estaba usando enormes conxuntos de datos, e cada ciclo de CPU contadas. E, francamente, mesmo en cousas como teléfonos nos días de hoxe e outros dispositivos onde non pode ter tanto memoria e non pode ter como moi CPU, mediante linguaxes máis rápidas aínda é atractivo. Pero no mundo real, cando acaba de quere xogar un programa conxunto para analizar algúns datos, ou recadou unha morea de inscricións para algún grupo de estudantes e queres rapidamente automatizar o envío de correos electrónicos un por un para cada un dos registrantes, vai chegar a unha linguaxe de alto nivel de C, por así dicir. Algo así como PHP ou Python, ou Ruby, ou unha media ducia de outros que existen nos días de hoxe. Pero os tres son probablemente o máis de moda agora. E o que isto significa que pode abrir un editor de texto como o gedit ou máis que calquera outra cousa e despois é só comezar escribir o código sen ter que se preocupar sobre a compilación, sen ter que realmente preocuparse a xestión de memoria, manter presente que algo desleixo acabará por volver para morde-lo, se o conxunto de datos queda maior ou o problema queda grande. Pero o que iso supón para nós é o seguinte. Déixeme ir adiante e executar ortográfico do conxunto de problemas seis. Entón, esta é a miña implementación baseada en trie que eu usei no gran placa onde eu non tan ben executada. Nós imos voltar nunha semana e revisitar os que se acabar na parte superior do tarxeta grande na nosa última clase. Pero, por agora, déixeme ir adiante e só executar a miña solución no texto, e nós imos facer a Biblia King James, e aquí imos nós. Polo tanto, estas son todas as supostamente palabras con erros ortográficos en cada a Biblia King James. E a miña implementación levou medio segundo en total. Entón, non moi malo neste determinado ordenador. Pero pense o que código que eu tiña que escribir. Debería canto código tiña que escribir. Debería cantas horas gastou no D-hall ou o seu dormitorio ou onde queira realmente codificación se esa solución. Ben, se eu realmente teño un nivel máis elevado linguaxe como PHP, tome nota do o que podo facer aquí. En primeiro lugar, supoña que este é, en vez o seu código de distribución. Este é un ficheiro chamado ortográfico. Está dispoñible como parte hoxe código de distribución. E eu vou acenar a man a máis dos detalles, pero esta é realmente un exemplo interesante de como podes porta unha linguaxe como C sobre a PHP. Eu literalmente abriu dúas ventás de texto, un coa miña versión C de speller.c, e eu só comecei a traducir-lo no meu cabeza para PHP e escribindo-lo usando funcións equivalentes máis próximos. Entón, algunhas destas cousas son diferentes. Vimos a última vez que o PHP non usa incluír no exactamente da mesma maneira. Usa esixe normalmente, aínda que inclúen existe. Establecer é un pouco diferente do # Establece en C, pero iso é como nós facemos unha constante. $ Argc botan existe en PHP, polo que temos visto iso antes. Estes son só variables, todo de que comezan con cifrões. Teña en conta que estes son só unha banda de flotar puntos. Así, longa historia curta, vostede é benvido navegar este curioso, este é case unha conversión liña por liña do Versión C de speller.c en PHP. E pode facelo de novo para media ducia de outras linguas. Pero o que é interesante é iso. Ou o que é francamente desanimado é iso. Déixeme ir adiante e escribir sobre dictionary.php, e afirman que eu son indo a ir adiante e re-aplicar conxunto de problemas de seis aquí. Entón, imos propoñer que, neste primeiro arquivo, que aplicarase en PHP, entón déixeme abrir miñas marcas como estas. Deixe-me dar a min mesmo un mundial variable, $ tamaño queda cero. E eu vou dar me unha táboa hash. Vou usar unha táboa hash para esa cousa. ¿Como declarar unha táboa hash en PHP? Feito. Aceptar. Soporte de forma aberta preto do soporte representa que en PHP, como vimos? Unha matriz, senón unha matriz que podería ser unha matriz asociativa. Unha matriz asociativa é unha estrutura de datos que asocia chaves con valores. Agora, o máis sinxelo numericamente indexado matriz, as claves son o que? Cero, un, dous, tres, non? Old school cousas de volta a partir de C. Pero pode tamén ser cadeas como foo e bar, ou Maxwell, ou calquera cadea. Para que eu poida aproveitar esta en só un momento. Déixeme ir adiante e declarar unha función como - imos facer load () en primeiro lugar. Así, a carga () función. E PHP é un pouco diferente, xa que vostede literalmente clase de función, pero non escribir un tipo de retorno. Eu estou indo a ir adiante e dicir que o función load () debe ter en argumento $ dicionario, só como a versión C fixo. Eu estou facendo iso da memoria. E propoño que eu son vai facer. Estou simplemente fará foreach. Vou chamar a unha función chamada file (), pasando o nome daquel ficheiro, que é a variable $ $ Dicionario como palabra. E, a continuación, dentro do meu loop for aquí, estou indo a ir adiante e gardar na miña $ $ Táboa que a noticia se realidade. Feito. Oh, espera. Feito. Aceptar. Esa é a función load () dicir en PHP. Agora, por que é que isto funciona? E eu son o tipo de trapaça aquí. Entón, un, foreach vimos brevemente última vez. Significa só que podes iterado unha matriz, sen preocuparse i e n e máis aló, e todo iso. Dicionario é, por suposto, o nome do ficheiro, algo así como grande ou pequeno, os dous dicionarios que usan última vez. Arquivo é unha función que abre o texto arquivo, le-lo na liña por liña, e mans cara atrás un abano enorme, cada un de cuxos elementos é un liña a partir dese ficheiro. Así que esta é a combinación de fopen, e fread, e mentres loop, e fclose, e todo iso. Por último, como a palabra significa só que esta é a variable que terei acceso a en cada iteración neste loop. Así, en breve, este forro aquí significa abrir o ficheiro cuxo nome é en dicionario, a variable, iterado liña por liña, e cada vez que comeza unha liña, almacenar nunha variable chamada palabra, e, a continuación, facer algo coa palabra. O que quero facer? Quero poñer palabras na miña táboa de hash. Ben, podo poñer algo na miña Táboa de Hash como en C usar corchetes. Este é o nome da miña táboa de hash. Vou índice para este hash mesa neste lugar. Entón non entre parénteses cero, non entre parénteses un. Cita bracket algo pecha comiñas, todo o que esa palabra é. E, así como pode ter no seu trie traballo táboa hash, só tenda efectivamente un booleano, implicitamente ou explicitamente. Feito. Estou almacenando o valor verdadeiro. Agora hai un par de cousas Estou cortando esquinas aquí. Tecnicamente, non vai ser unha nova liña irritante, / n, a finais de cada unha destas palabras. Así que probablemente debe chamar unha función PHP chamado costeleta (), que vai literalmente cortar aquilo. E eu realmente teño facer outra cousa. Eu probablemente debería incrementar o tamaño de cada iteración, entón estou mantendo o control globalmente do que é. E, francamente, e este é un dos aspectos máis estúpidos PHP, se está usar unha variable global, ten que dicir explicitamente que é. Entón, eu estou indo realmente escribir mundial $ Tamaño, $ táboa global, e agora miña función é completa. Polo tanto, non é tan sinxelo coma antes, pero probablemente levou menos tempo do que o C versión, quizais? Aceptar. Entón agora imos facer a comprobación () función. A ver se isto levou polo menos o horas a fío que nos levou en C. Entón, déixeme ir adiante e declarar comprobar como unha función. Toma na argumentación palabra, que é vai vir de Speller. E eu estou indo só para comprobar se o isset seguinte variable, mesa soporte strtolower de palabra - imos equilibrar todos os meus parénteses - a continuación, regresar certo. Else - que era realmente o disco parte deste programa. En caso contrario, volverá false. Feito. Isto é de verificación (). Agora, por que é que isto funciona? Ben, un pase nunha palabra, que é unha cadea. Dous, estou comprobando dentro do hash mesa, que se chama $ table. Estou forzando-o para minúsculas, chamando unha función moi semellante tolower () en C, pero iso fai toda a palabra, non un personaxe único. E se isto for definido, noutras palabras, non é un valor establecido, noutras palabras, se é verdade, entón si, esta é unha palabra. Porque eu poñelas alí con load (). E se non, eu vou voltar false. Agora, os outros son moi sinxelo. Tamaño Función (), como fago isto? Eu, esencialmente, facer retornar $ size. Pero eu teño que tecnicamente a facer esa cousa irritante. E en realidade se escoitar, eu estaba cortando un canto moitos. Realmente teño que facer $ table global. Pero o que se dixo, descargar). Descargar () é incrible. Unload () función. Como quero aplicar descarga ()? Feito. Aceptar. Entón descargar (), xestión de memoria é totalmente tomado coidado para ti algo así como PHP e moito de linguaxes de alto nivel. Entón, iso é incrible. Como por que diaños nós pasamos o pasado oito semanas máis sobre C escritura parecer moi lento, moito tempo consumindo problemas con decenas de horas de traballar baixo o cinto? Así, por unha banda, isto pode funcionar moi ben para pequenos programas. El certamente acelerou o meu tempo de desenvolvemento. Pero imos ver que pasa no mundo real. Déixeme ir a este directorio nunha fiestra de terminal. Hai ortográfico. E entenda como un aparte, e pode atopei isto en conxunto de problemas seis ou sete conxunto de problemas. Non ten que estrictamente acabar con arquivos PHP con. php. Se pór unha liña como aquel primeiro en o principio, que é unha liña especial de sintaxe que significa, esencialmente, atopar o programa chamado PHP e usalo para interpretar este ficheiro. Entón agora ninguén realmente sabe que Estou executando un programa PHP. Eu poida executa-lo só como se foron algo compilados en C. Pero aquí está a cousa. De feito, imos facelo de novo. Dropbox/pset6 /. Hai ortográfico. OK, 0,44 segundo. El ficou máis rápido desta vez. Agora imos para a versión de PHP. O toque agradable. Pero basta pensar canto tempo Salvei en horario de oficina. Aceptar. Entón, 3,59 segundo, o que realmente non soa ten tamén. Pero iso é porque longa historia curta, cando está imprimindo unha cantidade enorme de cousas para a pantalla, que si atrasa as cousas. O que realmente levou o CPU en aparello foi de 3,59 segundos, a contraste con C, que tivo 0,44 segundos máis recentemente. Isto é realmente unha orde de magnitude diferente. Entón, onde é que o prezo ven? Por que é moito máis lento? Por que PHP realizar tan mal? Danielle? Audiencia: Realmente non utilizar unha táboa hash. DAVID Malan: Realmente non utilizar unha táboa hash. Entón eu medio que fixen. Polo tanto, é un array asociativo. O máis probable é que a xente en PHP son moi intelixente, eles usaban por baixo da portada unha táboa hash que foi realmente executada en algo así como C ou C + +. Pero. É. Audiencia: [inaudível]. DAVID Malan: Yeah. Así, cada unha das funcións que escribín agora - En realidade, pode dicir que unha vez por pouco máis alto? Audiencias: Cada unha das funcións que vostede incluíu ten moito máis completo capacidade do que - DAVID Malan: Entón, iso é moi certo. Hai moito máis sobrecarga que estamos non realmente ver, concentrando-se só en dictionary.php, que eu acabo de escribir. Por outra banda, hai un intérprete enteiro ir ao fondo. En realidade, cando eu execute este programa, el non estaba funcionando ceros e uns compilados designado para o meu CPU Intel. Pola contra, estaba correndo liña por liña Código PHP parecer exactamente como se inseriu. E así, sempre que usar unha linguaxe interpretada, vostede realmente pagan ese prezo. Vai levar moito tempo para ler seu cume ficheiro para abaixo, de esquerda dereita, e entón executar cada liña de novo e de novo. Agora, en realidade, sobre todo na web, realmente pode acelerar este proceso almacenando en memoria os resultados da Código PHP que está a ser interpretado. E iso ten sentido na web, xa que se non ten un usuario, como me aquí, pero 1.000 ou 10.000 usuarios, a continuación, quizais a primeira vez que o arquivo é accedeuse é lento, pero, posteriormente, é moito máis rápido. Pero isto tamén, unha vez máis, é un trade off. E para algo como un datos de investigación establecido, ou incluso algo grande como tanto, os seus usuarios, finalmente, comezar a sentir que a desaceleración. Así, en breve, interpretado linguas son moi en voga, moi popular, e francamente son probablemente os idiomas debe chegar para a resolución de problemas posterior para CS50. Pero entenda o que está realmente tendo por seguro debaixo do capo Realmente estas últimas semanas en Hash táboas e árbores, e intenta, os cales son utilizados, en última instancia para realmente aplicar cousas como soporte aberto, corchete, que podemos agora gratitude tomar para concedida. Entón, imos dar un ollo agora neste contexto web. E eu mencionen a última vez que non hai unha banda de superglobais en PHP que non son realmente relevantes na liña de comandos. Son máis relevantes na contexto de usar PHP nun contexto web. Entón, executando o PHP nun servidor web, a fin para xerar cousas como HTML. E mirou $ _GET e $ _POST, e que é onde os usuarios automaticamente ' entrada acaba simplemente se enviar unha formar a un arquivo que remata en. php nun web servidor como o aparello. Pero imos examinar brevemente $ _COOKIE E $ _SESSION. En termos leigos, o que é unha cookie como entende-lo no contexto a través da web? Audiencia: o ficheiro no computador. DAVID Malan: Yeah. É un arquivo no ordenador do usuario plantada por calquera web ocorrer de visitar. Entón, cando vai para o Facebook, cando vai para bankofamerica.com, cando vai a google.com, cando vai a case calquera sitio no mundo nos días de hoxe, incluíndo cs50.net, unha cookie é plantada no seu ordenador, o que é ou un valor almacenado na memoria RAM no seu ordenador na memoria do seu navegador, ou ás veces, en realidade un ficheiro gardado no seu disco duro. E o que normalmente almacenados no ficheiro non é o seu nome de usuario, e non o seu contrasinal, normalmente non é algo sensible a non ser que o sitio non é tan bo coa súa seguridade, senón é un gran identificador único entre outras cousas. É un número aleatorio gran plantado no seu ordenador, pero pode pensar como unha especie de selo de man virtual como de un club ou algún parque de atraccións que permite que o equipo, os propietarios deste servizo, para lembrar quen é vostede. Entón, se o número aleatorio grande é como 12345678, a pesar de que, obviamente, non moi aleatorio, pense que, como o selo de man que cando visita facebook.com por primeira vez, carimbam ese número na súa man. E entón, porque fala HTTP, vostede sendo un navegador, e por mor do Facebook obviamente fala o mesmo que un web servidor, di o HTTP protocolo que a calquera hora, posteriormente, visitar facebook.com, tanto se se trata dun segundo máis tarde, unha hora máis tarde, mesmo o día seguinte, con tal de que non ten explicitamente desconectado, o que efectivamente é como lavar as mans. HTTP di que ten que presentar o seu selo man cada vez que volver ao web. Facebook, así que non é que mira aquel selo de man e din, ah, 123456789. Non sei, a primeira vista que esta é David Malan, en Cambridge, Massachusetts, pero poden comprobar o seu base de datos e dicir, oh, a persoa en cuxo equipo plantas 123456789 é David Malan de Cambridge, Massachusetts. Imos amosar que o usuario, a continuación, o seu perfil páxina ou do seu Feed de noticias. Pero hai un problema aquí se É así que a web de feito funciona. Imos dar un ollo a un exemplo rápido. Imos realmente ir dicir facebook.com. Pero antes de que puidésemos ir máis alá, imos me ir adiante e abrir Chrome Inspector aquí. Déixeme mirar a pestana de rede. E agora imos adiante e escribe en https://facebook.com. E eu estou facendo isto para que nós non vemos todas estas redireccións e desperdicios tempo mirando a través delas. Déixeme presione Intro. Todo ben. Vemos unha morea de peticións. Chega Facebook. Hai unha morea de arquivos. E aquí, pola miña mención de latencia a última vez, que é unha gran cantidade de solicitudes HTTP. Pero o primeiro é, probablemente, o máis interesante. Entón, imos rodar aquí, e Vou aumentar o zoom en un segundo. Esta vai ser unha especie de unha desorde, pero imos ver. Facebook está nos enviando un todo morea de cousas. Pero ei, interesante. Están plantando non un, senón catro selos man en man aquí. Set-cookie Set-cookie set-cookie set-cookie. E hai algunhas características aquí. Todos eles mencionar algúns tipo de validez. E parece que Facebook está esperando Recordarme ata 2015. Entón, iso é, presuntamente, o tempo en que Debo saír ou simplemente asumen automaticamente que eu son non volver. Entón, iso é realmente un decente cantidade de tempo. E hai algunha outra cousas a ocorrer aquí. A cookie semella forzosamente excluídos, dicindo que expirou en 1970 antes de galletas existiu. Así, o navegador é só ir asumir OK, iso é como lavado das mans selo. Pero agora, cando o meu navegador fai unha solicitude posterior - déixeme ir adiante e facelo de novo e volver cargar. Agora, deixe-me ir ao seu top solicitude e baixar aquí, as cabeceiras da petición. Teña en conta isto. Entón agora eu non estou so cabeceiras de resposta, de notar que di cabeceiras de solicitude. E entender que o meu navegador, como parte a súa solicitude tras recarga bater ten enviado polo menos o seguinte información. Non set-cookie, pero cookie. Polo tanto, esta é a liña, a cabeceira HTTP para dicir, onde o meu navegador é unha especie de sen que eu soubese presentando miña man para inspección de Facebook. Entón, eses cookies poden ser usar entón para que? Para lembrar de quen é vostede, ou lembrar de como cantas veces xa estivo alí, ou realmente nada. Entón aquí está counter.php. E déixeme ampliar a fonte. E cada vez que eu volva a esta páxina, teña en conta é recordar as veces Eu estiven alí. Ben, iso non é tan impresionante. Nós só pechar esta guía, e agora imos voltar http://localhost/counter.php. Oh, iso é interesante. El aínda se lembraba, aínda aínda que eu pechei a guía. E, francamente, se eu pechar o navegador, se implantado no camiño correcto, eu podería aínda lembrar que este usuario é que el ou ela era a primeira vez, e só unha vez eu vou ao menú de Chrome, que aquí está aquí, e ir a Histórico e prema en Borrar datos de navegación, Como algúns de vostedes poden ter no pasado, só entón os cookies realmente a súa eliminación na web desenvolvemento. Entón, se nós imos - Imos pechar-se gedit aquí. E se somos agora a este ficheiro. Déixeme ir ao noso vhosts / localhost / public, e deixe-me facer counter.php. Nótese que esta é unha fermosa programa sinxelo. É un sitio ben simple. Así, a parte superior do arquivo é só a comentarios. Pero aquí está unha nova liña que pode xa visto en p-set sete, session_start (). Esta é unha liña de código PHP que esencialmente informa ao servidor web, facer Asegúrese de carimbam as mans e facer Asegúrese de comprobar selos manuais. Isto é todo o que a liña fai, e fai todo este proceso para nós. Logo entender que eu só teño dúas filiais aquí. O contador de clave neste variable global especial chamada $ _SESSION Está axustado - noutras palabras, se hai algún valor alí - imos obtelo e almacena-lo nun lugar de variable chamada $ contador. Senón, imos asignar $ contador o valor por defecto de 0. Aquí está un aspecto de PHP que se tanto unha bendición e unha maldición. PHP é un pouco desleixado. Así, mentres en C, o que o marco do contador foron aquí ou aquí? Sería confinado a esas claves. Difícil de adiviñar o que? En PHP, hai mesmo fóra dos claves, aquí, e aquí, e aquí, e aquí, e mesmo a continuación. Entón eu digo que é unha bendición, no sentido de que non ten que pensar como duro como fixemos semanas. Pero é tamén un pouco de unha maldición en que non importa onde usar unha variable en PHP, polo menos nun programa como este, é globalmente accesible para mellor ou para peor. Así que ten que ter presente agora que súas variables non pode ser indefinido. Pode ter definido los noutro lugar. Pero que é o que eu vou facer en última instancia? Eu estou indo para almacenar dentro dese mundial variable como un valor de contador clave resultado facendo contra máis 1. Polo tanto, esta é só a aritmética que fai o incrementação do devandito contador. E o feito de que eu estou almacenando que valor de volta aquí é o medio para esencialmente, actualizar a base de datos para 123456789 usuario lembrar que houbo aquí dúas veces. E cando eu facelo de novo a próxima vez que actualizar a páxina, que vai comprobar miña man selo e dicir: ah, 123456789 usuario ten agora Estiven aquí tres veces. E así o PHP e linguaxes semellantes están a facer para nós é que están imaxinando como e onde e por canto tempo para gardar os valores neste especial superglobal. E este superglobal a próxima vez que eu visite a páxina é unha especie de pase de maxia condición poboada, chea de valores que estaban alí a última vez que visitou, se iso era un segundo atrás, unha semana atrás, ou en 2013 e agora estamos a falar sobre 2015. PHP e coidar do servidor web de todo isto para ti. Audiencia: [inaudível]. DAVID Malan: Variables en PHP son esencialmente sempre mundial a menos que declaralo las dentro dunha función, e logo, son lugares para só a función. Pero por que eu non teño escrito calquera funcións, eles agora están efectivamente mundial ao longo de todo o meu arquivo aquí. Audiencia: Existe un xeito para tornalos local? DAVID Malan: Hai algunha forma a tornalos local? Só por envolve-los en funcións. Que na última versión do PHP, pode facelo con unha función anónima. Pero máis sobre iso no contexto JavaScript. Pero a resposta é non. A resposta máis longa é si. Niza. Boa pregunta quiz. Todo ben. Entón, por fin, a páxina en si é realmente moi simple. Teña en conta que unha vez que saír do modo PHP, recordo que todo este material para abaixo abaixo está indo só para cuspir fóra prima para o web. O que é bo, porque quero enviar o usuario un pouco de HTML, pero quero para actualizar dinamicamente que HTML. E un xeito que podo facer isto é para clasificar de caer moi rapidamente de volta para PHP xeito, o uso do soporte aberto punto de interrogación signo igual, e, a continuación, presentar o valor do contador. Ou se isto parece un pouco enigmático, este signo igual é en realidade só algúns azucre sintático para este printf ($ contador). Pero, francamente, iso é só un pouco feo e un pouco aburrido de escribir. Entón PHP moi ben ofrece este recurso onde pode só dicir que máis brevemente, do mesmo xeito. Entón, o que está pasando por baixo o capó? Imos axiña ollar para a rede guía aquí para counter.php. E deixe-me ir adiante e primeiro imos limpar as cookies. Borrar datos de navegación do Permitir sempre o inicio do tempo. Agora imos voltar para aquí. Agora imos volver cargar a páxina. E eu estou de volta a cero. Porque o meu selo man foi lavado, Agora comeza un novo cookie. En realidade, se eu ollar para a guía de rede e ollar para cabeceiras de resposta, previo que o dispositivo está a enviar-me unha cookie cuxo nome é un pouco arbitrariamente, pero o tipo de razoablemente, PHPSESSID. E iso está me mandando que realmente número aleatorio grande. Non é un bo número. Non é así hexadecimal. É unha especie de secuencia alfanumérica, pero probablemente é aleatoria. E ese é o selo man para a falar que eu estou me referindo. Mentres tanto, se eu premer recarga e, a continuación, mirar para esta segunda liña para a miña segunda solicitude, aviso agora que a miña petición cabeceiras inclúen PHPSESSID iguala esta, non set-biscoito, pero só cookie. E iso é a presentación do meu navegador do meu selo man. Entón, agora como un teaser, e nós imos falar máis sobre iso nunha semana ou así, pero de que xeito iso fai vostede vulnerable, a súa conta de Facebook vulnerables, e outros, tales contas vulnerable? Audiencia: Se alguén ten o seu cookie. DAVID Malan: Si, se alguén ten o seu cookie. Quero dicir, en realidade, moi parecido con algúns de vós podería tentar a como un club ou un parque de atraccións, se tentar algo como este para copiar o selo, aínda que atrás na man doutra persoa, e, a continuación, el ou ela presenta como conta propia, se realmente se parece idéntico, 123456789, entón a tea servidor aparentemente está indo só para Confiamos que ese usuario é vostede. E iso é realmente un dereito fundamental ameaza a calquera momento usa cookies porque se alguén só satiriza así falar o seu cookie, descobre o que el é, sexa por realmente copialo ao ollar para o seu ordenador e sendo así, Aceptar. Bolinha de David é JJ3JIK e así por diante, e logo, son intelixentes abondo para saber como especie de enviar manualmente que biscoito desde unha ou dun navegador programa eles escriben, eles poderían totalmente entrar nun sitio web que. Non é tan difícil de finxir ser outra persoa, a menos que revisitar p-set dous, que introduciu o que? Audiencia: Criptografía. DAVID Malan: Un pouco bits de cifrado. Criptografía simple, polo menos en edición estándar, pero Crypto con todo. menos. Entón non é que se cifrar todo eses cabeceiras usando algo que pode agora obter máis familiarmente como SSL, Secure Socket Layer, ou https:// URLs, logo, todas esas cousas que fomos mirando realmente están cifrados, o que significa que é como se non pode ler o selo man. Só facebook.com pode, ou google.com, ou, neste caso, o aparello pode ler ese selo man. Traxicamente, con todo, e unha vez máis, este é moi apropiado co material NSA de tarde, aínda SSL é quebrável. E iso realmente non é tan difícil incluso romper o cifrado. Non tanto por romper o cifrado, pero enganando o navegador en descifrar os datos prematuramente. Pero, de novo, nós imos xogar contigo que en pouco tempo. Polo de agora, só ter medo. É traxicamente tipo de verdade. Todo ben. Entón, onde é que isto agora nos deixa? Ben, imos facelo. Imos adiante e dar unha rápida provocación antes de facer unha pausa. E eu creo que vai levar un pouco máis hoxe, pero imos mergullar algo novo e sexy, que será abrir o apetito a máis. Entón ese é o teaser. Entón, SQL, comezamos a falar de sempre tan brevemente última vez. Realmente vai ensuciar as mans con algúns deles en p-conxunto de sete. E, en termos leigos, o que fai SQL - S-Q-L - facer por ti? ¿Que é iso? Si Audiencia: Imos acceder os datos. DAVID Malan: Yeah. El deixa acceder a datos nunha base de datos. Structured Query Language. E isto é, esencialmente, un linguaxe de programación. Existen recursos de que Non imos mesmo utilizar en clase. Pero pode efectivamente definir funcións. Son chamados almacenados procedementos en SQL. Pero nós imos mantelo moi sinxelo e só usalo para algunhas operacións básicas como a selección de datos, entrada de datos, actualización de datos e exclusión de datos. E realmente pode pensar nunha base de datos, como unha base de datos SQL, como só sendo Microsoft Excel. Como o SQL se refire a un relacional base de datos, onde relación significa só mesas. As liñas e columnas. Entón, calquera cousa que pode pór nunha folla así ou Google Docs, pode pór nunha base de datos SQL declarando unha táboa. Agora, como o que realmente acceder esa información? Ben, con comandos ou consultas como esta. SELECT, INSERT, Update e Delete. E, na maior parte, estes son os só catro ingredientes que precisa para facer algo moi potente problema en establecer sete. Agora, de volta ao día, o que realmente interactuar con unha base de datos nunha fiestra de terminal branco e negro en unha ventá piscando así. E a base de datos que estamos executando o MySQL aparello chámase, que é motor de base de datos libre e de código aberto. Se Google e ler a Wikipedia artigo, vai saber que o nome é un pouco de transición para algúns versións de Linux. María base de datos é en realidade un garfo para falar de MySQL Para reducir a historia, a Oracle comprou a MySQL A Oracle é unha gran empresa. A xente ten medo de que sería non permanecer tan open source, entón que é só unha copia de MySQL que se aínda fonte libre, aínda en aberto, e instalado en Fedora Linux por defecto. Pero este é un tipo de dor no pescozo para familiarizarse coa base de datos dese xeito. Así, incluír no aparello CS50 unha ferramenta de código aberto gratuíto chamado phpMyAdmin. Só unha coincidencia que está escrito en PHP. Non hai ningunha base necesidade de PHP aquí. Pero esta é só unha ferramenta baseada na web que nós descargar de balde, instalado o aparello, o que nos permite ter unha interface gráfica de usuario co que para explorar sete base de datos do p-set con que a creación de novas bases de datos, dicir para o seu propio proxecto final se tivese gusta, e, finalmente, crear sitios dinámicos como CS50 Finanzas que lle permiten consultar datos e actualizar os datos dinamicamente. Non vai ter que usar só un ficheiro de texto simple ou CSV. Pode realmente usar unha base de datos intelixente programa para que poida executar máis consultas sofisticadas que ler por todo de forma lineal. Así, por exemplo, é o que nós damos sae do cadro de p-set sete. Esta é unha táboa con polo menos aparentemente tres columnas, unha das cales é nome de usuario, un dos cales é de hash e outro dos cales é ID. Pero o interesante, e só para destrinchar un pensamento aquí, nome de usuario é, presumiblemente, xa único, non? É dicir, máis calquera sitio, se ten un nome de usuario, non non pode haber dous Césares. Non pode haber dous Malans. Non pode haber dous jharvards. A súa única. Se non, eles non saben o que jharvard que realmente é. Entón, o que pode ser a motivación para tamén Tendo unha terceira columna da esquerda alí chamada ID, o que parece un número que é semellante única? Parece un pouco redundante me a primeira vista. Por que pode ser atractivo para ter non só nomes de usuarios únicos, pero tamén números exclusivos? Audiencia: Eles poderían o mesmo código. DAVID Malan: As persoas poden ter o mesmo contrasinal, con certeza. Isto pode absolutamente nada. Pero se eles teñen ese nome de usuario único, I diría que iso non fai moito importa, porque se escribir o seu nome de usuario, eu só teño comprobar a súa contrasinal, os mesmos hash. Por que outra razón? Audiencia: procura máis rápida. DAVID Malan: procura máis rápida. Por que? Audiencia: ID é só un. DAVID Malan: ID é só un personaxe, ou para ser máis exacto, é un número, polo que pode ser 32 bits ou algo así. Tendo en conta que o nome de usuario, ao parecer Jason Hirschhorn está alí enriba é unha especie de ridiculamente longo, e que vai me levar moito máis tempo para cadea comparar H-I-R-S-C-H-H-O-R-N, e quizais a / 0 ou algo así, a fin a mirar para arriba Jason, no canto de só dicindo que me dar o seu número de usuario dous. Isto é 32 bits. É a única que INT ten que comparar. E, de feito, é exactamente por iso que as bases de datos tenden a asignar IDs únicos para liñas neles. Agora o que os outros tipos de datos están aí ademais INT e, ao parecer, cordas como este? Pois ben, para ser máis axeitada, Bancos de datos SQL, como MySQL, teñen campos CHAR. E CHAR algo enganosa non é unha única CHAR. Un campo CHAR nunha base de datos MySQL é un ou máis caracteres, pero é un número fixo de caracteres. Así, por exemplo, se eu pasar por riba de phpMyAdmin como xa debería ter ou en breve unha serie de problemas de sete, e eu vou para o meu banco de datos, e só por diversión, imos crear unha nova táboa chamada probar con só dúas columnas. Vou prema en Ir E iso vai facer moi familiar, especialmente cando xogar ao redor do seu propio país. Aquí podo escribir ID para crear unha nova táboa do tipo INT. Pero aquí eu pode escribir o nome de usuario para recrear a táboa anterior. E noten que eu teño un grupo enteiro de tipos para escoller. E iso tamén é por iso que phpMyAdmin é unha especie de bo. É unha especie de auto-aprendizaxe, no que pode só unha especie de punto e prema, e mirar para menús suspendidos, e deducir que o que lle dá poderes SQL. E, de feito, se eu escoller CHAR, entón eu ten que especificar a lonxitude, ou como diversos valores, cantos chars. Valores moi comúns son cousas como 255, pero iso é un pouco longo. Comunmente é de oito a un nome de usuario. Pero iso é un pouco pequeno estes días. Polo tanto, esta é unha decisión de proxecto. É 8 caracteres como máximo, 32, 255, 1000? É realmente ata. Pero un campo CHAR é un número fixo. Polo tanto, escolla moi poucos e vostede é do tipo parafuso, se quere un nome de usuario máis grande. Escolla de máis e que se a desvantaxe? Audiencia: [inaudível]. DAVID Malan: É un desperdicio. Así como en C, se ten unha maior anaco de memoria que precisa, está só perdendo tempo e perdendo espazo. Así, como unha alternativa, existe Varchar, que resolve este problema Duración do tratamento e non como unha lonxitude fixa, pero como o lonxitude máxima, e usando un número variable de carácteres, que, a continuación, tende a usar só o número de chars como realmente precisa. Isto soa perfecto. Por que non se librar do Tipo de datos char, entón? O que podería ser a desvantaxe de usar VARCHARs, que soa como se fose unha fermosa vitoria? Si? Audiencia: [inaudível]. DAVID Malan: OK, moi bo. Entón, se todos os seus datos é a mesma lonxitude, cal é a preocupación? Audiencia: Porque está perdendo datos, dicíndolles todo. DAVID Malan: Entón, se todos os seus datos é a mesma lonxitude, con todo, eu diría especificando que a lonxitude máxima en varchar non é diferente de especificando unha lonxitude fixa sobre si CHAR sabe que o número de antelación. Pero non é certo, e eu vou clasificar de extraer que a resposta á realidade que aínda hai un máximo, o que podería ser irritante, especialmente se atopar o nome dunha persoa que está excepcionalmente longo que non fixo prevista. E tamén é un pouco menos eficiente para realmente investigar sobre VARCHARs como oposición á procura chars, sobre para mesas longas que teñen lotes e grandes cantidades de datos. Polo tanto, aquí tamén, temática é de novo ningunha opción obvia. Entón, só para lle dar unha sensación de outro tipos de datos que poden ser do seu interese tanto para p-set sete ou o futuro, hai INT. Hai BIGINT, que é como long long. El tende a ser de 64 bits. Hai decimal, que podes ver na o conxunto de problemas, que é un tanto limpador resposta aos problemas que atopado con flotador e flotando imprecisión punto. E despois hai datetime. Hai, literalmente, un tipo de datos que ten a aparencia de un ano, un mes, un día, e unha hora, minuto e segundo. Pero bancos de datos SQL tamén teñen cousas que vou chamar índices. E un índice é algo que especificar ao crear a táboa de facer buscas e outras operacións máis eficiente. En concreto, hai algo chamado o índice primario que podería declarar como segue. Fixemos isto para vostede coa táboa de usuarios que che dar. Mais repare se eu fose recrear manualmente a táboa de usuarios aquí dando un nome de usuario. Eu xa indicado ID. Eu especifiquei INT. Eu especifiquei nome de usuario máximo de 32 caracteres. Pero se seguimos a desprazamento neste bastante ampla fiestra, teña en conta que hai unha morea doutras cousas que podo indicar. Un deles, podo especificar atributos como, vostede sabe o que, iso INT debe ser asinado. Non quero que os números negativos, entón imos facelo sen sinal. Nulo non é relevante aquí porque Eu quero que cada usuario teñen un número impar. Non quero que sexa nulo. Pero iso é interesante. Podo especificar que ID sexa o chave primaria desta base de datos, ou se texto único, ou é indexado, ou completo. Así, para fins de hoxe, a longa historia , Principal medio curto que este debe ser tanto conceptualmente e tecnicamente O campo que usan para excepcionalmente identificar os usuarios. Así, cando miramos para os usuarios, esta é unha especie dunha promesa de procura-los principalmente por que identificador único. E a base de datos pode garantir que, se ten un número de usuario 3, non pode introducir fisicamente outro usuario co mesmo número 3. A base de datos vai simplemente se negan para gardar os cambios. Que é unha cousa boa, porque pode protexer-se de si mesmo. eu Alternativamente, o nome de usuario. Así, a segunda liña, aviso, é o campo de nome de usuario. Así, a segunda liña aquí é nome de usuario, como fixemos na esquina esquerda alí. Entón, o que máis eu podería querer especificar? Eu non estou autorizado, de acordo co SQL, para especificar dúas chaves primarias. pode especificar unha chave de conxunto, onde ollar a ambos os campos, pero non poden ser individual claves primarias. Entón, iso é fóra de cuestión. Entón, o que eu podería querer escoller? Ben, unique é semellante en espírito a un chave primaria, onde se especifica este campo debe ser único, pero é non vai ser a única Eu uso o tempo. E nós non estamos indo a usar este todo o tempo para o que razón de novo? É máis lento, potencialmente, se é unha longa usuario. É só un desperdicio de tempo. Index, pola súa vez, especifica que se non vai ser único, pero gustaríame traballar a súa maxia debaixo do capo para facelo máis rápido para min buscar neste campo. Entón, iso probablemente non é relevante aquí. Para o nome de usuario, eu diría que UNIQUE é unha boa resposta. Pero supoñamos que fixemos os usuarios máis interesante que os nomes de usuario, hashes, e números de identificación. E se deu ás persoas nomes completos? E se nós lles deu enderezos e outros datos sobre eles? Ben, se especificar que unha columna nunha base de datos está indexado, isto significa que MySQL ou Oracle, ou calquera base de datos está a usar, debe traballar a súa maxia e utilizar algún tipo de datos fantasía estrutura como unha árbore, ou unha trie, ou un táboa hash, ou algo para garantir que cando lle buscar datos mediante seleccionar nese campo en particular - como eu amosar a todos que vive en Oxford Street. Unha consulta así. Se ten especificado de antemán que quere un índice en que campo, o investigacións serán moi, moito máis rápido. Se non especifica un índice, o mellor pode facer é unha procura linear se non está clasificada. Pero se se especifica Index, o intelixente persoas que fixeron a base de datos - persoas coma ti que agora coñece árbores e intentos e táboas de hash - vai construír automaticamente un tal de datos estrutura na memoria RAM para asegurarse de que estas investigacións son moito máis rápidos. Fulltext, con todo, é similar en espírito, pero permite que faga curinga investigacións, como eu amosar a todos que vive en rúas que comezan coa letra O, por calquera motivo. Pode facer buscas curinga así. Ou cousas máis fortes, como mostran me as que ten a palabra - me amosar a todos cuxo nome comeza cunha carta particular. Pode procurar por palabras clave deste xeito. Todo ben. Así, oportunidades de deseño hai potencial. Hai outros que eu vou acenar as mans no. Acontece que pode ter mecanismos de almacenamento diferentes. E iso é máis misterioso do que necesitamos seguramente para o problema de definir sete. Por defecto, o que vostedes están a usar algo chamado InnoDB. Verá mención a isto en algún lugar A interface do phpMyAdmin máis probable. Pero sei que hai outro proxecto decisións que son de potencia intereses veñen proxectos finais fai algo baseado na web. Pero imos facelo. Imos adiante e poñer isto no pantalla como un teaser para unha historia que inclúen ti, un compañeiro de cuarto, e un vaso de leite. Imos dar un dous minutos ou entón romper aquí. E se pode ir por aquí, imos chegar cara atrás, mirar un pouco máis en SQL, e logo un pouco de JavaScript con -P establecer oito presente. Todo ben. Entón, imos comezar a pensar sobre un caso canto que pode moi facilmente xurdir no contexto do uso de unha base de datos, ou francamente, mesmo a usar as cousas do mundo real como caixas electrónicos para conseguir diñeiro. Entón aquí está un frigorífico. Supoña que vostede ten un tamén en seu dormitorio ou a súa casa. E ten un compañeiro de cuarto, e ambos realmente lle gusta de leite, por exemplo. Entón chega na casa da clase un día. El ou ela aínda non volveu. Se abre a neveira. Realmente quere un gran vaso de leite. Non hai leite. Entón, o que fai? Vostede pecha da neveira. Vostede agarra as súas claves. Sae á praza. E comeza na cola CVS aqueles cousas auto Checkout, que sempre levar máis tempo do que realmente ter caixas. De calquera forma. Entón, mentres tanto, dot dot dot, o seu compañeiro de cuarto chega na casa e el ou ela do mesmo xeito ten un desexo ardente un pouco de leite. Así, el ou ela abre a neveira, mira para dentro, e Oh, droga. Non hai leite. Así, el ou ela vai para fóra, pasa a ir a outro CVS, que era só un bloquear afastado por algún motivo, e el ou ela está na cola para mercar un pouco de leite. Mentres tanto, chega a casa, el ou ela chega na casa, eo que facer finalmente ten? Dúas veces máis leite. Pero o que realmente non me gusta leite moito. Entón agora ten tanto leite que agora un deles só vai aceda eventualmente. Polo tanto, este é un problema moi malo. Non? Entón o que pasou? Así, fundamentalmente, este é o tipo dun exemplo ridículo. Pero debaixo do capó, o que tivemos pasar aquí é tanto de ti verificados o estado dalgún anaco de memoria, a neveira. Ambos vostede comprobar o estado dalgunha variable. Vostedes dous tiraron unha conclusión que, a continuación, executado. Pero, desgraciadamente, mentres que o seu compañeiro de cuarto estaba na tenda, o estado dese variable cambiou, el ou ela volveu e agora quere cambiar o estado, pero el xa foi cambiado sobre el ou ela. E, por suposto, el ou ela non tería ir á tenda se eles sabían que xa estaban de camiño. Así, no mundo real, como pode evitar este problema, supoñendo que ten unha neveira, ten un compañeiro de cuarto, e realmente gusta de leite? Audiencia: Comunicación. DAVID Malan: Comunicación. Aceptar. Pero como é que pode comunicarse? Audiencia: Deixe un recado. DAVID Malan: Deixe unha nota, non? Sempre deixar unha nota, por os fans da serie. Todo ben, entón sempre deixar unha nota, ou poñer verdadeiramente como un cadeado ou algo na neveira que mantén o seu compañeiro de inspeccionar o estado de esa variable. Agora, por que isto pode ser pertinente para conxunto de problemas de sete, ou ATMs. Ben, imaxina un mundo en un cadro electrónico, onde pode ser capaz de ir ata un cadro electrónico máquina aquí e outro ATM aquí. E isto ocorre con bastante frecuencia. E supoñamos que tiña dúas tarxetas ATM, que se pode obter. E entra en ambas as máquinas efectivamente á vez, espero que mentres ninguén está mirando. E entón escribir o seu PIN aproximadamente ao mesmo tempo. E entón fai unha consulta equilibrio ver canto diñeiro ten. E digamos que ten $ 100 deixou na súa conta. Así, esencialmente, á vez, é dicir un, cero, cero, entrar. E espero volver algún diñeiro. Pero canto diñeiro pode recibir de volta? Agora, os ordenadores ao final do día, especialmente se eles están falando servidores, non necesariamente facer cousas na orde en que se espera. Así, supoñamos que sucede, por mor da calquera problemas de velocidade de rede non son, ou problemas de CPU existen, ou nada diso, supoñamos que o primeiro ATM comprobar o seu saldo e ve, oh, esa persoa ten 100 dólares. Pero, entón, se distrae, porque se cadra unha copia de seguridade está a suceder e por iso é abrandar. Ou quizais durante a verificación, a rede conexión quedou un pouco máis lento, porque iso simplemente ocorre. Son dispositivos físicos. Entón, mentres tanto, o segundo cadro electrónico facendo a mesma pregunta. Canto diñeiro é que David ten? 100 dólares é a resposta. Senón porque o primeiro ATM aínda non enviou a mensaxe restar 100 dólares, ambos ATMs ter inspeccionado caixa forte do banco, ver hai 100 dólares alí, e agora ambas as máquinas son potencialmente vai cuspir unha resposta. Agora, iso é óptimo para vostede, nalgún sentido O que o banco fai, finalmente, é cambiar o valor a menos de 100 por definindo a variable igual ao teu conta bancaria igual a 0, en oposición facendo menos 100. Agora, no peor caso para o banco - ou, no mellor para o banco, pola súa banda, eles dan-lle 200 dólares, e súa conta bancaria agora mostra negativo 100 dólares, o que realmente non fai beneficia-lo en todo. Pero o punto é que esta carreira condición para dous compañeiros de cuarto se leite, ou para dous caixas electrónicos intentando obter diñeiro e cambiar o estado dun cofre á vez, existe algunha xa que ten unha base de datos. Agora, no conxunto de problemas de sete, esta cuestión xorde no sentido de que se mercar un acción de Facebook, a continuación, para exemplo, comprar unha segunda parte Facebook stock, ten que facer unha decisión como programador. Co fin de decidir como actualizar o base de datos, as posibilidades son que vai ten unha liña para que o stock, e este é un xeito de implementar lo. E vai ter unha acción do FB, que é o seu stock Ticker para este nome de usuario, ou este usuario ID, o identificador exclusivo. Pero a mesma historia pode ocorrer aquí. Se unha instrución SELECT en SQL, como vai ver problema en establecer sete, cando ve, Oh, David ten unha partes de accións de Facebook. Déixeme agora cambiar este sexa dúas partes, porque quere mercar un segunda parte. Pero supoña que David realmente tiña dous fiestras do navegador abertas, ou supoñer que é unha conta conxunta con dous cónxuxes, e ambos están tentando realizar a mesma operación, hai, tamén, o existe potencial para unha decisión a ser feita con base na anterior estado do mundo - a conta ten unha acción - e ambas as persoas, ou dous servidores, agora tente dicir incrementar a dúas accións. Pero, neste caso, pode ter cobrado me cartos para ambas partes, aínda que incrementado só aquela vez. Así, en breve, o problema fundamental aquí, como coa broma sobre deixando un conta, ou poñer un cadeado nel, é se dúas persoas, ou dúas liñas - creo que volve a cero - pode inspeccionar o estado dalgunha variable e, a continuación, tentar cambiar esa variable, pero esas dúas cousas non acontecen no mesmo tempo, pero pode estar detido por outras cousas a suceder, os datos poden entrar nun estado moi raro. E pode beneficiarse ou pode sufrir no sentido do exemplo de diñeiro. Así, o conxunto de problemas de sete, dámoslle esta liña de código, que por moito tempo En resumo, resolve este problema no MySQL Isto moi longo instrución que non fai mesmo caber nunha liña no pantalla aquí asegura que o seu funcionamento é o que se chama atómica. Todo pasa dunha vez, ou iso non acontece en todos. Esta frase moi longa non pode estar detido parcialmente. E o que fai é literalmente o que di. Inserción nalgúns táboa seguinte tres campos eses valores específicos, pero en clave duplicada, non facer unha inserción. Facer unha actualización. Polo tanto, este é como facer un SELECT e un Inserir por así dicir, á vez. E o que é a clave que probablemente é sendo referido aquí? Acontece, e vai ver isto en conxunto de problemas de sete de spec, porque xa declarou que haxa unha clave única nesta táboa particular de tal xeito que non pode ter varias liñas para o mesmo usuario, coa mesmo símbolo tostón stock - neste exemplo, aquí, é DVN.V un stock parvo centavo que nos Consulte o spec. Porque temos declarado que sexa único, O que isto significa é que se tentar inserir unha liña duplicada, está en vez de ir para actualiza-lo sen ninguén ter unha oportunidade de cambiar o estado do mundo, quere. Así, en breve, o que garante as cousas son atómica. De xeito máis xeral, con todo, as bases de datos como MySQL - e non precisa deste recurso para p-set sete, pero mantelo presente para o futuro - apoiar o que son chamados de transaccións, onde se pode dicir COMECE TRANSACCIÓN literalmente. Pode entón realizar dúas instrucións SQL. E unha instrución SQL, como vai ver en p-set sete, parece un pouco algo así. Actualizar unha táboa chamada conta. Establecer a columna de equilibrio igual a calquera A columna Saldo actualmente é menos 1,000, onde o número, número de conta, como a identificación do usuario, é igual a 2, e, a continuación, actualizar conta dot dot dot. Así, en termos xerais, o que estes dous consultas parecen estar facendo na sentido real da banca? Audiencia: trasladándose para o aforro. DAVID Malan: Exactamente. Transferencia de fondos dunha conta a outra. E este é outro exemplo onde realmente quere esas dúas cousas a suceder ou non acontecer. Non quere algo para entrar no medio, e potencialmente interferir as matemáticas, ou desorde o que diñeiro que ten, ou o que diñeiro que o banco ten. Entón, o que é realmente bo sobre transaccións en MySQL é que, e bases de datos de xeito máis xeral, é que e persoas intelixentes que xa aplicaron estes recursos descubrir como facer seguro de que as dúas cousas acontecen ou non en todos. E se está realmente aspira a facer un sitio web que é usado por persoas en campus, as persoas no mundo real, facendo algo no sentido de arranque, estes son os tipos de decisións de deseño que facer-se sempre tan importante. En caso contrario, comeza a perder datos, perden usuarios, ou, no peor caso, vimos aquí, potencialmente perder cartos. Entón, de novo, máis sobre isto en conxunto de problemas sete, así como quizais para algúns dos ti en proxectos finais. Entón imos cambiar esa imaxe que tiña hai pouco máis só dunha maneira. Entón deixe-me ver realmente se eu puider - Non, iso foi. Non é iso. Polo tanto, este é o lugar onde nós deixamos a última vez. E resulta que nós estamos indo a tirar unha cousa na mestura por aquí - unha linguaxe chamada JavaScript. Entón JavaScript realmente encaixa nesta parte - e eu non quería moito deixar espazo suficiente, de xeito que este xa non é a escala. OK, iso é realmente patético. OK, entón iso é JavaScript. Todo ben. Estou realmente facendo un desserviço. Todo ben. Entón Javascript é outra programación linguaxe, e noso pasado, se iso axuda reafirmar que non hai moito máis dos hidrantes aquí. Así, é tamén un JavaScript interpretado linguaxe, o que significa que non compilalo en ceros e uns. Só executalo. Pero o que é fundamentalmente diferente con JavaScript é que normalmente lle non executa-lo no seu servidor web. Non se executa en segundo aparello de per si. Pola contra, é descargado por un usuario vía HTTP no seu navegador - Chrome, Safari, Internet Explorer, Firefox, o que sexa - e é o navegador que executa este particular, linguaxe de programación. Entón, para ser claro, PHP, ata agora, foi executado ou na liña de ordes en nosa ventá en branco e negro, nun servidor como o dispositivo, un ordenador como o aparello, ou foi executado por un servidor web executado nun ordenador. Pero o tema aquí é que o PHP, ata agora, foi executado no lado do servidor, polo tanto, o usuario eo navegador do usuario nunca ve unha liña de código PHP. En realidade, se nunca abrir un navegador para seu sitio web ou doutro e realmente ver o código PHP na súa fiestra, alguén ten asneira. Porque non está destinado a ser enviado por un navegador directamente. É suposto ser executado e virou en algo parecido a HTML. Pero Javascript é esencialmente todo o contrario. É concibida para ser executado normalmente dentro da xanela do navegador do usuario. E que tipo de sitios empregan JavaScript continuación, os días de hoxe? Como literalmente cada sitio popular. Cada sitio que vostedes probablemente uso cotián usar JavaScript para o máis simple e mesmo o características máis sexy. Polo tanto, algo así como Facebook Falar, se usa isto. Como é que isto realmente funciona? Ben, ata agora, todas as cousas que teño feito con HTML e PHP asume que lle tire unha URL, e premer Intro, e ve algún contido HTML. E fai clic na ligazón, que cambia a URL, cambia a páxina, e recarga algún contido novo. Prema noutra dirección ou enviar un formulario, vostede se levou a outra páxina e ves algún contido novo. Pero usar algo como Facebook Chat, ou Gchat, ou Google Maps, raramente non a páxina actualizar tal que verá unha pantalla en branco momentáneamente e logo, un novo contido. Pola contra, as páxinas web hoxe son dinámicamente ser actualizado de novo e novo e de novo todo tipo de bastidores. E verifícase que cando vai facer a algo como Facebook, ou Gchat, ou Gmail, e as actualizacións da páxina automaticamente sen recarregar as pantalla, o que pasou é que o explorador fixo unha especie de segredo solicitudes HTTP adicionais - non para páxinas web enteiras, pero só para pequenos bloques de datos, como o mensaxe instantánea que o seu amigo só enviou-lle, ou a actualización de estado que alguén só lle enviou, ou o tweet que alguén acaba de enviar. É só facer pequenos solicitudes de de datos, e logo usando JavaScript, este linguaxe de programación, para cambiar o que a páxina web parece sen a servidor de axuda, sen o servidor xeración que HTML. Así, en breve, Javascript se pode usar, a continuación, non só para buscar novos datos o servidor sen recarregar un todo páxina ou enviar un formulario. Tamén se pode usar para o cambio o chamado MOD - Document Object Model - que é só a forma elegante para dicindo que a árbore de HTML que vimos a última vez. Entón, para tranquilizar, JavaScript sintaticamente tan semellante a C tamén. Non hai ningunha función principal. Acaba de comezar a escribir o código e serán executados, ou interpretadas de xeito máis adecuada. Condicións será coma este. Non é diferente a partir de C ou PHP a esta materia. Expresións booleanas ou-ed xuntos será coma este. Anded xuntos semellante a esta. Switches será coma este. Por voltas será coma este. While loops será coma este. Do while será coma este. Isto é novo. Entón Javascript non ten un foreach construír, por si só, pero este constructo á variable i na matriz, e eu neste caso pasa a ser un valor de índice. Polo tanto, é un pouco diferente do que foreach, aínda que as novas versións do JavaScript están saíndo todo o tempo, así mesmo estes recursos de linguaxe evolucionan. E como un aparte, JavaScript nestes días tamén se pode usar nun servidor como PHP utilizando unha estrutura chamada Node.js. Un de CS50 TFS, Kevin, levou un seminario sobre Node.js que está dispoñible en cs50.net/seminars. Entón, se está curioso, sabe que pode usar esta no lado do servidor como ben, pero iso é unha tendencia relativamente recente, pero un poderoso niso. Este é un pouco diferente. Esta é unha matriz en JavaScript. E o que lle parece diferente contra C ou PHP? Existen algunhas historias rápidas podemos dicir aquí. O que falta en relación PHP? Audiencia: [inaudível]. DAVID Malan: Si? Sentímolo, dicir de novo? Audiencia: Non declarando o tipo de variable. DAVID Malan: Non estamos declarando o tipo de variable. Entón, en realidade, moi como PHP, non estamos especificando tipo de esta variable. Pola contra, estamos máis xenericamente dicindo var á variable. Non debemos problema PHP sinal de dólar, mentres que tedioso tipo, fai máis claro que algo é unha variable. Mentres aquí, somos unha especie de volta ao O enfoque de C por só chamar a un variable co nome que queiramos para darlle, como números. E tamén como PHP, temos corchetes a valores dentro desa matriz. Así, as variables en JavaScript tamén pode ser así. Teña en conta aquí esta é unha cadea chamada s, pero do mesmo xeito que nós non especificada que é unha cadea. Aquí, con todo, é unha característica que non fai hai exactamente da mesma maneira en PHP, pero un pouco semellante. Este é un obxecto en JavaScript. E os obxectos son unha especie de exército suízo Coitelo dunha estrutura de datos en que pode usalos para calquera número de cousas. Aquí, por exemplo, estamos declarando unha variable chamada cotización. O tipo de variable que é un obxecto. Podes pensar niso como un struct C que ten as claves e valores. Symbol é unha clave. FB é un valor, ao parecer un símbolo de acción. Coma. O prezo é outra clave, eo seu valor é aparentemente un punto flutuante, ou un número máis xeral en JavaScript, de 49,26 dólares. Entón PHP non ten - non vimos en obxectos PHP moi así, pero fixemos ver un analóxico, que era o que? Audiencia: [inaudível]. DAVID Malan: Matrices asociativas. Así, mentres que o PHP ten arrays asociativos cuxa sintaxe é sempre un pouco para diferente - vimos os corchetes. Vimos os símbolos frechas estrañas. JavaScript ten obxectos, pero esta é sobre todo unha diferenza semántica e unha sinónimo diferente de momento. Con todo, como un aparte, PHP tamén ten obxectos dun xeito que Java e outros linguas teñen obxectos en programación orientada a obxectos. Pero imos usar estes só para os tipos de datos para agora. Os obxectos e arrays asociativos. Este pode facelo un pouco máis clara. Aquí está o porqué dun obxecto é útil. Cando quere declarar un estudante, como Zamyla, podemos realmente encapsulado así dicir no interior do referido obxecto usando claves como antes de unha chea de claves e os valores aquí. Temos unha identificación, unha casa, e un nome para Zamyla, seguido por un punto e coma como habitual ao final. Por aquí tamén, iso é un pouco diferentes, pero tamén moi potente nos días de hoxe. Aquí está unha matriz, e eu sei diso porque hai un corchete up superior e un corchete na parte inferior. E isto é unha matriz de datos que escriba aparentemente en JavaScript? Esta é unha matriz de parece como tres obxectos. E sei que non é máis que un obxecto por mor das chaves. E teña en conta que hai bosquexo aberta, algunhas cousas, preto bosquexo, coma, a continuación, un pouco máis, coma, e, a continuación, un pouco máis. Entón, iso é tres argumentos separadas por dúas comas. Polo tanto, esta é unha matriz de tres obxectos. E cada un dos obxectos a ser exhibida un estudante ou funcionario dalgún tipo, cada un cun ID, casa, e nome. Pero eu chamei ese algo chamado JSON - JavaScript Object Notation. E isto é un formato de datos que realmente é tan popular e en voga nestes días que se escribir un aplicación que emprega Facebook API, a API de Twitter, realmente case calquera API aí nos días de hoxe, incluíndo algúns dos CS50 propia, o datos que recibe de volta non está na formato CSV da vella escola. Porque recorda que CSV é super sinxelo. Queda só a columnas separadas por dous puntos. Datos JSON dálle máis de metadatos. El asocia unha clave con todos os valores así non ten que simplemente asumir que a columna de orde cero é un valor, columna outra, de dúas columnas é outro. Todo nun obxecto JSON aquí é unha especie de auto-descritivo, porque cada un dos nomes neste ficheiro ten literalmente nome diante del como un cadea. Entón, imos dar un ollo a un algúns exemplos aquí. Déixeme ir a dentro do aparello. E deixe-me ir ao noso vhost directorio en público. E deixe-me ir ao JavaScript directorio. E imos adiante e abrir don-0.html, onde DON significa só Document Object Model. É o material árbore para que Me referín anteriormente. E deixe-me propor o seguinte. Velaquí unha páxina web cuxo corpo é moi sinxelo. Entón, aquí en baixo, na parte inferior, entender Eu teño un formulario. Vimos os antes. Ten dúas entradas, unha das cales ten un ID de nome, un dos cales ten un tipo de presentar, eo primeiro un do tipo é texto. Entón, iso realmente soa moi sinxelo. Imos aquí. Imos volver a esta páxina aquí. Imos entrar en localhost, e entra noso directorio JavaScript, e ir a don-0, e aquí temos esa forma. Entón, iso é, ao parecer, todo isto páxina fai. Ten un campo de nome con un botón Enviar. Pero eu non vou usar PHP aquí. Vou facer todo do lado do cliente por así dicir, en JavaScript do seguinte xeito. Teña en conta que realmente deu o nome campo de entrada esta unha única identificador, que será, de feito, salva-me algún tempo en un momento. E teña en conta que eu teño presentado outra etiqueta na cabeza da miña páxina web, o  tag. Polo tanto, é neste sentido que se JavaScript unha linguaxe de programación do lado do cliente. Neste caso, como CSS, engada en liña recta dentro do meu HTML. Pero teña en conta que eu declarada unha función que parece un pouco con PHP sintaticamente, pero esta é realmente JavaScript, porque unha vez máis, é do lado do cliente no navegador. E dar un palpite que isto vai facer, aínda que algúns da sintaxe aquí é novo. Audiencia: Diga Ola para o que quere. DAVID Malan: Vai dicir Hola para quen visita esta páxina. Entón, como? Entón, teña en conta, verifícase en JavaScript hai unha función de alerta (). Esta é unha función moi triste que tipo de realmente só tende a molestar aos usuarios. Non é que o que realmente debe utilizar normalmente, pero é un rápido e sucio forma dunha especie de impresión de algo a un usuario gráfica de interface, como un navegador. Teña en conta aquí que eu teño un cadea entre comiñas simples. Acontece que a diferenza de C, JavaScript realmente ten uso único cita, e, a verdade, é só tipo do convenio estilística entre JavaScript desenvolvedores usar comiñas simples. PHP, realmente teñen algo significado diferente. Pero, polo de agora, só sei que esa é a única razón. A convención en JavaScript é moitas veces a usar comiñas simples, pero poderiamos usar comiñas dobres en ambos os lugares tamén. Entón, iso é interesante. Teña en conta que a última vez que tivemos que imaxe na pantalla que deseñou unha árbore onde tiña o no HTML, eo nodo principal eo no corpo, e logo, algún texto. Pero non houbo un nó especial no moi superior que chamei ao documento. Ben, acontece que en JavaScript, calquera vez que escribir un programa en JavaScript nun navegador, ten acceso a unha variable global especial. Similares en espírito á superglobais PHP, este é chamado en todo documento minúsculas. É como unha estrutura, pero esta estrutura tamén ten funcións dentro dela. Así, un struct C só ten datos normalmente. Pero un obxecto JavaScript coma este tecnicamente é tamén ten funcións, tamén coñecido como métodos, no interior do mesmo. E pode chamar a unha función dentro este obxecto literalmente facendo a súa nome, punto, e despois o nome a función, ou aínda método. É só un sinónimo, realmente. E o que esta función fai? Pode tipo de adiviñar o seu nome. Obter elemento por ID. Entón, que vai buscar a páxina web, buscar a árbore, mirando para todo o que no, elemento aka, ten unha ID única da cita nome unquote. E entón o que é o que eu vou facer? Eu estou indo a obter o valor dentro ese nó na árbore, e eu vou dalgún xeito, dicir Hola a ese nome. Entón dea un palpite, aínda que nós non temos vin iso aínda, o que facer a máis símbolos significan aquí e aquí, probablemente? Audiencia: concatenar. DAVID Malan: concatenar. Correcto, e estes son só tipo de proxecto decisións persoas fixeron anos atrás. O PHP, concatenar cousas con puntos. En C, ir a través de marcos e varias funcións como strcopy () ou chame strcat () ou outras funcións. Pero en JavaScript, usa triunfos. Polo tanto, esta é só a concatenación tres cordas - Hola, un nome, e, a continuación, un signo de admiración. Entón, cando e por que esta función chamado aínda? Ben, dar un palpite do HTML na parte inferior. Por que cumprimentar () chamado, ou cando? Ao parecer, o mellor que podo dicir, en presentar, cando este formulario é enviado, Vou facer o que sexa dentro destas citas. E, especialmente, eu vou chamar a cumprimento () e, a continuación, voltar false. Ben, imos ver o que a rede efecto aquí é o primeiro. Entón deixe-me ir adiante e escribir en, digamos, Loren, en Enviar. Ola Loren. Imos ver se quizais este foi só unha implementación de sorte. Non. Entón está escribindo o que quere que nome realmente poñer alí. Pero teña en conta que non está cambiando. O URL que é don-0.html. Non hai register.php. Non hai segundo ficheiro. Non hai ningún atributo action. Entón, cal é esa falsa retorno presumiblemente facendo? Por que eu estou chamando cumprimento () e, a continuación, retornando teito probablemente? O que normalmente acontece cando fai clic Enviar nun formulario que aínda temos visto a semana pasada? Audiencia: [inaudível]. DAVID Malan: Vai nalgún lugar, non? El vai para un URL de destino. Pero eu non quero que isto ocorre aquí. Eu quero a miña páxina web para ser completamente dinámico como Gmail, onde unha vez que é alí, queda alí. A URL non cambia dun xeito que indica a páxina enteira está recargando. Pola contra, eu só quero cambiar algo como imprimir algo aquí na pantalla. Ben, deixe-me limpar iso -Se un pouco. Déixeme abrir non don-0, pero déixeme abrir don-2. Só para que teña visto algunha sintaxe aquí. Sucede que o que acabamos de se está a usar JavaScript cru. Polo tanto, esta é verdadeiramente a linguaxe JavaScript. Algúns de vostedes poden saber de unha biblioteca chamada jQuery. Así jQuery non é o mesmo cousa como JavaScript. É só unha biblioteca que realmente intelixente cara escribiu e popularizado como que case todos no mundo agora usa jQuery ao usar JavaScript. E a primeira vista, honestamente, parece un pouco máis enigmática. Pero vai atopar, especialmente se é alí para o seu proxecto final con web desenvolvemento, verás que este limpa as cousas e vostede aforrar bastante algunhas liñas de código. Só ollar Entón imos como este formulario funciona. Teña en conta o que eu eliminar aparentemente do meu HTML? Non hai en enviar manipulador por así dicir. Non hai ningún atributo. Porque vostede sabe, o que Realmente non me gusta? Eu me sentín como se está caendo en vellos hábitos alí. Así como estaba comezando a sentir-se desleixado mesturarse tanto con CSS HTML, porque está medio que xogando idiomas diferentes en todo o lugar, do mesmo xeito que iso comezar a sentir como un mal camiño para ir ata onde Estou poñendo o código JavaScript dentro da miña HTML no canto de factoring-lo. Así que esta é a lección aquí. En don-2.html, estou factoring-lo. E eu estou facendo as cousas un pouco de forma diferente. Por agora, eu vou acenar as mans o que iso realmente debaixo do capó. Pero por agora asumir que ese primeiro liña de código nesta biblioteca chamado jQuery significa só cando o documento está preparado, faga o seguinte. Como as páxinas web poden ter algún tempo para cargar. Podes estar nunha internet lenta conexión, e pode estar xirando e xirando, e, finalmente, el é cargado. Esta liña de código só di esperar ata a páxina enteira estea listo, o documento está preparado, antes de realizar este código. E agora entende, este é, probablemente, o máis útil primeiro sacar de jQuery. Esta liña aquí é moi semellante en espírito para esta liña por moito máis tempo aquí. Considerando que o código JavaScript cru, non existe un obxecto global documento que ten unha función chamada getElementById () as persoas que escribiron jQuery simplificado que dicir sinal de dólar, e logo, dentro parénteses poñer dúas citas, e, a continuación, poñer un símbolo de hash seguido polo ID único que quere pegar. Entón, iso é equivalente a document.getElementById. Mentres tanto,. Mostrar só significa en presentación de calquera forma está referíndose á esquerda, ir adiante e realizar iso. Pero isto é agora a curiosidade tamén. Que é estraño sobre o que Teño destacado aquí? Non só é unha especie de sintaticamente novo, tamén hai algo falta. Audiencia: É só unha chamada de función? Non se chama alerta? DAVID Malan: Yeah. Ben, entón alert () é baixo aquí, para ser xusto. Pero non hai ningunha mención dun nome, como vostede sabe, foo ou algo aquí enriba. E, de feito, esta é unha das características JavaScript que é moi poderoso, pero tamén moi novo. E PHP realmente ten iso tamén. Déixeme ir adiante e facer algo ben rápido. Déixeme ir adiante e poñer isto aquí. Déixeme facer. Función. Imos chamar ese manipulador (). A función de manipulador por así dicir. Algo que trata sobre algunha operación. Déixeme limpar o meu retroceso. E poñer isto aquí. E poñer isto aquí. Yep. Aceptar. Entón agora eu teño unha función chamada Handler () que realmente non sei o que fai aínda. El só aínda ten estas cousas. Berros. Levou moito. Imos facelo. Todo ben. Sentímolo. Todo ben. Déixeme facelo. Aceptar. Isto parece bo e en liña recta para adiante agora. Déixeme facelo. Faga iso. E Aceptar. Entón, agora, imos poñer isto aquí. Non hai máis a programación en tempo real. Aceptar. Entón, agora, imos voltar a onde a historia comezou. Anteriormente, eu dixen que esta liña aquí significa que cando o documento estea listo, vai adiante e facelo. O que quero facer? Ben, en concreto, quero ir adiante e faga o seguinte. Executar esta liña de código, e logo o que quero facer é chamar este funcionar cando o formulario é enviado. Agora iso é que é interesante. Isto non é en si mesmo unha función. Repare que eu non estou poñendo parénteses aquí dunha forma normal. Estou literalmente pasando por unha función chamada Handler () para outra función chamado submit () como argumento que é como unha variable. E esta é unha das características de JavaScript, estase a funcións son realmente só obxectos. En realidade, son realmente só variables de calquera tipo. E se o nome da función Handler (), non hai ningunha razón pola que eu non podo pasalo como un argumento aquí. E isto significa que cando o formulario co ID de demostración é presentados, chamar esta función. Pero agora, se eu desfacer de todo isto, por que entón eu quizais facer este un momento atrás? Ben, esta é unha función anónima. Porque, a verdade, podo entender por que eu son preocuparse en perder tempo declarando unha función chamada Handler () só para chamar nun e só un lugar? Se eu non ter nome, e eu non que chamalo máis dun lugar, imos aplicar a función exactamente onde eu teño. Que e así soporte JavaScript e PHP chámanse funcións anónimas que me permite facer exactamente isto aquí. Pero estamos só raiar a superficie. Imos xogar con só un par exemplos finais aquí. Se eu entrar quote.php. Teña en conta que este é realmente un PHP función, un programa PHP, que escribín espera que un parámetro HTTP chamada símbolo, e podo pasar en un valor como FB. E se nós realmente ollar para a fonte código, este é consultar un sitio de balde chamado Yahoo Finance, como p-set sete, e está volvendo para me algo aparentemente o formato coñecido é JSON - JavaScript Object Notation. É só un obxecto. Respecte as chaves, as citas, do colonos e as comas. Agora, con todo, iso é moi legal. Porque eu probablemente pode utilizar unha programación linguaxe para xerar URLs que se parecen con esta dinámica, non? Podo cambiar isto para Google e volver de Google prezo das accións de US $ 1,017.55. Entón, imos ver se non podemos usar isto agora. Déixeme ir ajax-0 aquí, que parecido co seguinte. É só un sitio web que ten un formulario con un botón. Deixe-me aquí, vai adiante e escribe YHOO ao símbolo das accións de Yahoo, prema Obter Cita, e agora entende que comece unha alerta con 32,86. Déixeme realmente ir a unha versión máis extravagante desta páxina, a versión dous, e escriba digamos Microsoft, MSFT. Obter cotización. E agora entender, ningún aviso. Teña en conta onde di prezo ser determinado? Non é o máis simple de que os exemplos apunta para o que Gchat e Facebook Chat, e Gmail, e outros tales sitios están a facer, en realidade, cambiar a páxina web. Teña en conta isto. Déixeme volver cargar a páxina. Déixeme abrir Inspector de Chrome. Déixeme ir os elementos guía aquí. Agora, teña en conta se eu zoom ata aquí e abrir tanto, entender que esta é a miña HTML DOM - o meu modelo de obxecto de documento. Este é o meu HTML. Pero, agora, entender, a pesar de que ser un pouco difícil de velo en ambos lugares á vez, se eu escribir no FB aquí enriba, teña en conta a parte inferior da pantalla só. É realmente cambiando meu HTML na Moscova. E está facendo iso, pura e simplemente facendo algo así. Se eu abrir ajax-2, teña en conta a posta en marcha algo tan sexy como que, a pesar de ser moi feo, pero tan sofisticado como o que funcionalmente, ten algúns HTML na parte inferior. Pero teña en conta que eu usei para marcar. Non usei iso antes, pero esta é como un, pero non forza todo nunha nova liña. E só fai unha rexión rectangular na mesma liña esencialmente. Repare que eu dei-lle un número de identificación de prezo. E ocorre que, usando o mesmo Biblioteca JavaScript, eu teño unha función chamado quote () que se chama sempre que o formulario é enviado. E o que eu estou facendo é iso. Estou declarando unha variable en JavaScript chamado url, aforrar o valor quote.php? símbolo =. Noutras palabras, eu mesmo estou comezando para preparar unha solicitude HTTP, e despois Estou concatenando para que con un plus calquera que sexa o elemento co ID de símbolo, que é que campo ben aquí texto. Así como tivemos formas no pasado. E entón el se transforma en jQuery, se chamar. val (), que chama dun val función, unha función de valor, que recibe o que o usuario inseriu dentro E, a continuación, todo o tráfico de rede o que pasa é iso. $. GetJSON. E, como un aparte, sinal de dólar é só unha notación abreviada. Realmente jQuery.getJSON. Tiren-me para JSON desde esta URL, e cando a petición vén de volta, chamar este función e pasar como argumento o que veu de volta dende o servidor. Polo tanto, noutras palabras, se eu volver á navegador, e eu voltar quote.php, o meu explorador está facendo é estar este bloque de datos. E cando eu ir a esta páxina web aquí, entender se en vez de ir para a rede pestana e limpa-la, e logo introduza algo así como GOOG a Google e gañe Cita, teña en conta a páxina non se alterou. Pero unha solicitude HTTP se fixo, eo que volvín aquí, se miramos cara ao resposta é unha morea de JSON que ás finalmente con esta liña simple aquí. Datos é o que se obtén desde o servidor. O prezo é o nome do clave que me interesa. Entón data.price dáme iso. Agora, con todo, e este é o último exemplo. Podes facer aínda máis coa páxina. Unha verdade, así dous. Podemos traer de volta a tag, se lembrar diso. Isto é JavaScript. Podemos facelo. Moi emocionante. Imos deixar isto como un cliffhanger. Pero o máis emocionante, pode facer cousas como esta. Se eu fose para xeolocalización-1, verifica-se que Chrome sabe que estamos en lonxitude latitude 42,37. -71,10. Así, hai aínda máis alá á súa disposición. Pero máis sobre iso a próxima semana. Vexo vostede luns.