HANNAH Blumberg: Hola a todos. Nós imos comezar só un par de minutos máis cedo xa que temos un lote enteiro de material para pasar. Eu son Hannah. Eu son un TF. María vai unirse nós en só uns minutos. Ela ensina sección dereita antes. Eu ensino sección dereita despois, polo que estamos indo para mantelo á hora e media. Entón, como vai ver aquí enriba, temos bastante algúns temas que necesitamos para pasar, así que imos estar indo un pouco rápido. Pero si nalgún momento dicimos algo moi rapidamente ou non entende, Sinto-se a liberdade de deixar con preguntas. Queremos ser capaces de facer deste un avaliar sesión como útil a todos vostedes como sexa posible. Impresionante. Entón, imos ir á dereita con algúns temas que, en realidade, moi, moi brevemente cuberta para o cuestionario 0 na revisión sesión cuestionario 0. Entón, comezando con listas ligadas. Entón, só tes que estar seguro de que algúns coñecemento básico sobre listas ligadas e son cómodos facendo algunhas das operacións básicas. Entón, só para revisar, conexionado listas son mellores que as matrices porque poden crecer de forma dinámica. Polo tanto, temos que enorme vantaxe. Vimos que emprega en táboas de dispersión cando Non sabemos exactamente cantas cousas que vai querer para introducir a estrutura de datos. Desafortunadamente, temos pezas de a lista vinculada todo memoria, por iso, non será necesariamente capaz de facer acceso en tempo constante para calquera elemento da lista encadeada. Co fin de atopar unha nomeadamente elemento, nós ten para percorrer todo o forma desde o comezo. Polo tanto, ten en conta que a maior parte do operacións básicas son omega de 1. Entón inserción está indo só para tomar un. Eliminar levará n sempre que ten que ir atopalo na lista. E investigación podería levar, no peor dos casos, n. Non podemos facer algo como busca binaria nunha lista ligada Como non podemos só ir ao chou para o medio. Legal. Impresionante. Un pouco de pilas. Iso, de novo, xurdiu a proba 0, para que debe ser super cómodo con iso. Pero para pilas, pedímoslle lembrar dunha pila de bandexas. E vai ser o primeiro en, último a saír. Entón, nós apilar as cousas na pila e logo se estamos tentando sacar algo off-- que chamamos o estalo fóra o stack-- que saír do cume. E se queren pór algo na pila, chamamos iso de empurrar. Por iso, sempre será crecendo dende o fondo como unha pila de taboleiros. Impresionante. Temos pilas visto aplicado coas dúas listas ligadas e matrices. Se está aplicando con arrays, quere para asegurarse de manter o control de tanto o tamaño e capacidade. Así, o tamaño será o actual número de cousas na súa pila, Tendo en conta que a capacidade é o número total de cousas que pode almacenar no seu stack. Legal. Moi semellante, temos filas. Neste caso, en vez de pensar unha pila de bandexas, pense nunha liña. Este vai ser o primeiro en entrar, primeiro fóra. Entón, se está aliñados para algo na tenda, Esperamos que a persoa en primeiro A liña será axudado por primeira vez. No canto de empurrar dicindo e pop como nós facemos a pila, nós só dicir enqueue e dequeue. E, de novo, se está aplicar iso cunha matriz, necesitamos manter o control de non só o tamaño e capacidade, pero tamén a cabeza, o que será a cabeza da nosa cola. Legal. Calquera preguntas sobre nada diso? Impresionante. Seguindo adiante. OK, táboas de hash. Aquí é onde comeza a estar realmente interesante. Así, unha táboa hash é unha implementación dunha matriz asociativa. Entón, basicamente o que pasou é que temos toda esta entrada, e nós dalo a un hash función que di: OK, este é o lugar onde o táboa hash pertence. Así, a función hash máis simple que vimos é só dicir, OK, imos supor que queremos poñer cordas na nosa táboa de hash. E unha idea moi simple podería ser a de dicir, OK, imos clasificar pola primeira letra da palabra. Así pode ver aquí, imos dar bananas, imos poñer-la a través dunha función hash, e el di, hey, que debe ir no índice 1. Así, podemos pensar, esencialmente, dun hash mesa como unha morea de diferentes baldes. E cada un deses baldes está pasando para soster a cabeza dunha lista ligada. E nesa lista ligada é onde podemos realmente poñer diferentes partes de datos. Entón mergullo un pouco máis nunha función hash, é aquí o exemplo que eu só describe en que só dicir, OK, tome a primeira letra da palabra e estamos vai clasificalos lo para os baldes. Así, presuntamente, haberá 26 baldes, un para cada letra do alfabeto. Por que non é este un gran función hash? O que fai este non ideal? Si. Audiencia: Vas ter colisións. HANNAH Blumberg: Si, exactamente. Terá colisións. Entón, iso é unha cousa. E imos falar sobre como podemos fixar colisións en só un segundo. Outro problema con esta especial función hash é que o noso diferente baldes van ser de moi notablemente diferentes tamaños. Sabemos que hai un lote enteiro máis palabras que comezan con A que X, así que nós imos ter moito baldes desequilibradas na nosa táboa de hash. Legal. Entón, si, imos voltar a o punto de colisións. O que imos facer se hai unha colisión? Temos un par de opcións diferentes. Entón un, polo que supoño que estamos tentando para poñer baga na nosa táboa de hash. E vemos, oh, queremos para poñelas nun índice, pero a banana xa vive alí. O que imos facer? Temos dúas opcións principais. O número un é que podemos dicir, OK, non hai espazo no índice 1, pero imos seguir a buscar ata que poidamos atopar outro lugar aberto. Entón, imos dicir, OK, imos poñelas no punto 3. Esa é unha opción. Iso é chamado de sondaxe lineal. E unha segunda opción está dicindo, OK, ben, imos só facer cada un destes baldes ser cabezas de listas ligadas. E é OK se hai máis dunha cousa nun balde. Nós só estamos indo a anexo-lo para adiante. Entón, aquí podes ver, OK, cando inserido baga, nós só tomou bananas, tipo de empurrou-o un pouco e lanzou unha baga alí. E iso é tamén totalmente ben. Isto chámase fío separado. Podes pensar niso como tipo de como unha serie de cabezas de listas ligadas. Calquera preguntas sobre haxix táboas, funcións de hash? Impresionante. Árbores e intentos. Así, unha árbore é calquera tipo da estrutura de datos en que hai algún tipo de xerarquía ou algún tipo de valoración dos seus obxectos diferentes. E iso vai facer super- claro cando vemos un exemplo. E vimos intentos, ao longo con táboas de hash, en pset5-- que, de novo, xogo totalmente xusto para este quiz-- como outra datos estruturas que pudermos almacenar cousas distintas. No caso de dicionario, nós gardamos unha morea de palabras. Entón, imos dar un ollo a algunhas árbores. Polo tanto, este é un exemplo dunha árbore. El ten un tipo de estrutura, que a estrutura xerárquica, onde se pode ver que este nodo 1 na parte superior ten algún tipo de clasificación por riba de 2 e 3, que son por riba de 4, 5, e 6 e 7, que son por riba de 8 e 9. Entón, iso é todo o que entendemos por unha árbore, de modo que pode só tipo de imaxinar que na súa cabeza. Agora temos un par de árbores máis especializados. Así, un exemplo é unha árbore binaria. E unha árbore binaria é, de novo, só será unha estrutura de datos con algún tipo de xerarquía, pero cada un dos nós pode ter, como máximo, dous nenos. É alí onde a palabra vén de binario. Polo tanto, este é un exemplo dunha árbore binaria. Entón esta é unha categoría menor de árbores. Agora imos estar aínda máis específica e falar do binario de procura binaria trees-- árbores, en vez. Entón, aquí a idea é non só cada nodo ter como moito dous fillos, pero todos os nenos ao esquerda van ser menor e todos os nenos ao dereito será maior. Entón, observe só na nosa árbore binaria, non hai ningunha relación entre os números. Pero, na nosa procura binaria árbore, vemos, OK, aquí é 44. E cada número da esquerda é de 44 todo o menor e á dereita é maior. E que mantén en cada nivel da árbore. Así, aquí, é menor que esta 22 e esta é maior que 22. E iso é árbore binaria de investigación. Por que cremos que é chamado unha árbore de busca binária? O algoritmo é que lembra-lo de? Audiencia: Busca binaria. HANNAH Blumberg: Busca binaria. Porque se está a buscar un número especial nesta árbore, en cada punto, pode simplemente bater off metade da árbore, o que é óptimo. E así que vai dar algo que se asemella moito a procura binaria. Algunha pregunta? Todo ben, legal. Todo ben, intenta. Todos favorito. Polo tanto, este é o exemplo que vimos unha chea de clase. E, de novo, este é só un xeito que podemos almacenar datos. No caso de dicionario, de novo, iso é só será strings. Entón, imos ver o que iso realmente Parece que a un nivel lixeiramente inferior. Entón, imos dar un ollo nun nó nunha trie. E vemos, OK, non vai ser un booleana e un nó, un punteiro para un nó. E vemos que a Boolean chámase is_word. Entón, basicamente, é tanto vai corresponder para estes pequenos triángulos que di, se chegou aquí, atopou unha palabra completa. Sabemos que "Turing" over aquí é unha palabra completa, Considerando só T-L-R non é unha palabra porque non vemos que pouco delta. E aquel pequeno delta, unha vez máis, corresponde a este is_word, este is_word booleana. E entón temos unha variedade de nenos. Así, en cada nivel, ten un determinado nodo, e ese nó apunta a un matriz de todo o alfabeto. Así pode ver, unha vez máis, neste picture-- son manterá a ir cara atrás e forth-- que esa matriz na parte superior ten unha morea de diferentes nós saíndo dela. Ten 26 anos, ou 27 se quere para incluír un carácter adicional. E iso nos dá unha forma de almacenar os nosos datos de forma que pode ser encarado que pode mirar para arriba super rápido. Cal é o tempo de busca para unha trie? Audiencia: [inaudível]. HANNAH Blumberg: Yeah. En teoría, é hora constante. El só vai ser do tamaño a palabra que quere ollar para arriba. Mesmo se sumarmos un zilhão Máis palabras para o noso trie, non está indo para levar máis tempo para determinar unha palabra está no trie. Entón, iso é moi bo. Audiencia: Acaba iniciar esa matriz? Perdeu un punto ou dous. Pode só falar que por un segundo? HANNAH Blumberg: Por suposto, absolutamente. Boa pregunta. A cuestión era: nós ten unha matriz que é terá estrela nodo como oposición a só no, non? Legal. Entón, aquí o que estamos dicindo é a nosa matriz é só será punteiros para outras matrices. Polo que é o tipo de essentially-- se sente como unha lista ligada deste xeito onde cada unha destas nenos basta apuntar ao seguinte nodo. E a forma que nós realmente determinar, hey, OK, nós iterado través dun todo palabra, é esta palabra no dicionario, nós só comprobar este is_word. Boa pregunta. Si. Audiencia: Aceptar. Entón, cal foi o tempo de execución para o trie? HANNAH Blumberg: Claro. Así, o tempo de execución para un trie para lookup será de tempo constante. Por iso, só vai ser o número de letras da palabra. Non é dependente do tamaño do dicionario ou o tamaño da estrutura de datos. Entón aquí está un exemplo algo máis simple. Neste caso, pode ver que a palabra morcego é no dicionario e ten zoom, pero Non ten algo como zoolóxico. Como poderiamos facer zoolóxico? Como é que imos engadir ao noso zoolóxico dicionario, para a nosa trie? Si. Audiencia: Fai is_word certo para o [inaudível]. HANNAH Blumberg: Good. Entón nós diriamos Z-O-O, e entón nós quere marcar a opción tamén. Gran. Imos comparar moi brevemente tenta contra táboas de hash. Tries son realmente grandes porque, como dixemos, eles proporcionar investigación de tempo constante. Pero a enorme desvantaxe é que son xigantescos marcan presenza. Pode obter o sentido, incluso de ollar para el, que vai levar unha cantidade enorme de memoria. Entón, eles van ser moi maior que táboas de hash, pero eles van dar os tempos de investigación moito máis rápido. Entón, ese é o tipo do seu tradeoff, o que se preocupa, tanto se se trata de velocidade ou memoria. Calquera preguntas sobre calquera dos que, todas as estruturas de datos C. Fermoso. Aceptar. Nós imos pasar un pouco bit de desenvolvemento web con María. MARIA ZLATKOVA: Lovely. Aceptar. HANNAH Blumberg: Pode usar o meu portátil. MARIA ZLATKOVA: Nice. OK, legal. A medida que avanzamos agora para web desenvolvemento, nós falamos un pouco sobre permisos cambio de arquivos e directorios de xeito que poden ser accesibles para outros usuarios, para o mundo, e para que poidamos ver como basicamente, podemos transmitir-lles cando realizamos cousas como sitios que na súa maioría ten feito. Entón vimos o mando chmod, que é o modo de cambio, basicamente. Isto é un comando Linux e cambia os permisos de acceso de obxectos do sistema de ficheiros. E un obxecto de sistema de ficheiros é só un directorio, un arquivo, calquera cousa que poida cambiar os permisos de. Entón, a ver os permisos de arquivo, que escriba o comando ls, lista, -l. E cando nós digitamos iso, adoitamos ver algunhas permisos que tipo de ollar como este diante dun nome de directorio. Entón d refírese ao directorio. E entón temos tres tríades que basicamente consulte os permisos de ambos un usuario, un grupo, ou do mundo. Tipo de permisos que pudermos ten para estes tres grupos de persoas son ou r para lectura, w para escribir, e x para realizar. E podemos estar aqueles para o grupo eo mundo tamén. O máis curioso é que, ás veces, cando escribir o comando chmod, iríamos escriba un número que consistía en tres anacos. Así poderiamos facer, como 777 e que basicamente se refire ao valor engadido de cada unha destas tríades r porque remite a 4, w faría refírense a 2, e x se refiren a 1, Así, cando engadidos, cada un dos números descendería a un número cumulativo para un valor acumulativo entre 0 e 7. Por iso, tamén pode ter 0 para ningunha permiso en todo. E iso sería, basicamente, dar os permisos para calquera usuario, o grupo, ou do mundo. Calquera preguntas sobre esta tan lonxe? Audiencia: Vostede dixo que lin foi 4? MARIA ZLATKOVA: Si. Audiencia: [inaudível]. HANNAH Blumberg: Yup. Audiencia: E, a continuación, engadir todos aqueles outros ía indicar o seu número. MARIA ZLATKOVA: Yeah. Si. Estas son grandes cuestións. Encantador. Logo nós pulamos para dentro HTML e un pouco máis sobre desenvolvemento web. Entón HTML significa só Formato Markup Language. E esa é a reserva linguaxe que é un estándar que se usa para crear páxinas web. Chama-se unha linguaxe de reserva porque non é realmente feita. El non di como un código debe executar ou algo así. El só delineia e describe como unha web A páxina debe ser creada con cada un dos seus elementos e como eles deben ollar para o usuario. Algunhas das etiquetas HTML que pasou por riba son os seguintes. Todos os nosos documentos HTML comezou co DOCTYPE html. Entón, temos sempre a etiqueta html. Temos unha cabeza e un corpo. E é importante que o HTML ten este tipo de estrutura aniñada porque é moi claro. E, a continuación, tórnase moi claro cando Debe abrir e, de feito, as etiquetas próximos. E nós sempre ten pechar tags que xa abriu. E aquí temos algúns dos tipos á cabeza das cousas que queremos ter. Polo tanto, temos, por exemplo, o título do CS50. E entón nós realmente pode vincular unha folla de estilo que define como nós denominar nosa web. Isto é CSS. Nós imos pasar por iso no próximo par de láminas ben. Dentro do corpo, definimos algunhas clases e IDs. E como un recordatorio, unha vez máis, IDs son únicos e clases poden ser atribuídos a varios elementos. E iso só quere dicir que podemos utilizar clases e IDs dentro doutro structures-- así, para exemplo, dentro de arquivos CSS ou estilo sheets-- referirse a elementos específicos e, basicamente, dicir que quere denominar ou proxectar un elemento dalgún xeito especial. E falamos de que por seus IDs e clases. E nós tamén pode referirse a cousas distintas por marcas, así como, pero IDs e clases só darnos algúns versatilidade e especialmente o que nós quere consultar. Polo tanto, só un exemplo. Podemos, de novo, dentro un arquivo CSS que quere definir algúns style-- así cores, fontes, e cousas así isso-- que pudermos definir o estilo para un corpo. Así que o definiría para toda a etiqueta body. Pero entón tamén podemos definir un estilo a un #title. E, de novo, a hashtag refírese ao noso ID eo punto refírese a nosa clase. E, a continuación, para os .info, nós Tamén é posible axustar algúns atributos. E, de novo, cando volver, tivemos a nosa clase chamada información eo noso título ID. E vemos que nos referimos a eles por #title e .info. Audiencia: Vostede diría hashtag [? me adoptar? ?] MARIA ZLATKOVA: Sentímolo? Audiencia: Vostede diría hashtag [? me adoptar? ?] MARIA ZLATKOVA: hashtag significa ID, así #title refírese a calquera elementos ter este ID chamado título. E, a continuación, o punto refírese a unha clase. Entón, .info refírese a este elemento porque ten a información de clase. Yup. Audiencia: Por que distinguilo los en HTML? Por que di certas cousas son IDs e certas cousas son de clase? MARIA ZLATKOVA: Isto é só ata você-- HANNAH Blumberg: Repita a pregunta. MARIA ZLATKOVA: Oh, desculpe. Por que nós distinguir certos elementos como IDs e outros elementos como clases? Iso é só porque é realmente moitas veces unha selección deseño. El lle dá unha morea de versatilidade en ser capaz de dicir que quero este elemento específico para ter este ID porque queren para facer unha chea de cousas con el, e eu só quere definir un estilo, estilo ou o que quere que a cor dese elemento. E a forma de facelo é só dándolle un ID. E entón, se quero ter un par de elementos diferentes Tendo en que, no canto de indo e definindo their-- no canto de facelo por tag porque a etiqueta faría definir a célula para toda a reserva para cada vez que tag é usada, pode definir unha clase a varios elementos. E despois é só acceder a esta clase e dicir Quero denominar esta clase así. E unha vez máis, a clase pode ser varios elementos diferentes eo ID debe ser único. Grandes cuestións. Algunha pregunta? OK, impresionante. Unha vez máis, esta é a forma na que estes selectores son referenciados en CSS, con hashtag, cun punto, ou sen calquera cousa para atribuíndo o estilo dalgún tag, como corpo. E aquí temos a xeral sintaxe de como iso é feito. Para repetir algúns mellor prácticas para HTML e CSS, necesitamos, unha vez máis, peche todos as etiquetas HTML que se abren. E o que recomendamos que facer para os seus proxectos finais, así como para CS50 Finanzas, é facer Asegúrese de que todo o seu HTML válida. E iso está feito coa W3 comprobador. E entón o que fixemos e o que recomendamos facer separarse o estilo, así CSS de código. Así, todo o que se refire á forma como súa páxina vai mirar visualmente e como vai ser modificado debe ir a un documento CSS. E entón a súa reserva dicindo que as cousas están en relación uns ós outros é HTML, e que debe ir a dentro dos seus documentos HTML. Algunha pregunta? Mhm. Audiencia: O que é exactamente está a suceder coa validación de páxina cando estamos valida o HTML que [inaudível] creado? MARIA ZLATKOVA: Entón creo que what--. Entón, o que exactamente está a suceder coa validación de páxina e por que necesitamos facelo? Basicamente, necesitamos facelo porque unha morea de veces, o seu navegador, se non pechar unha etiqueta ou algo parecido, o explorador aínda está en curso para procesar unha páxina e aínda pode traballar, pero é a mellor práctica para asegurarse de que ti, de novo, pechou as súas marcas, que todos os seus elementos son a forma que eles deben ser, e, basicamente, que é polo convencións que son predefinidos. É, unha vez máis, só un que ten que estar aprendendo a facer, en oposición a ter código sloppier e cousas así. Si. Oh, desculpe. Eu penso que estaba levantando a man. Audiencia: Non, eu era só [inaudível]. MARIA ZLATKOVA: Aceptar. Audiencia: Grazas. MARIA ZLATKOVA: Por suposto, grazas. Entón, de novo, a suceder en como a información é transferida e modelos de comunicación para transferir información. TCP / IP. TCP só significa Transmission Protocolo de Control e IP refírese ao Internet Protocol. E iso só se refire a o xeito no que os datos son entregadas. Se temos algúns datos que ten que ser entregado para você-- así fai unha proposta para un determinado servidor. Por exemplo, cando accederes cs50.net, facemos unha proposta para servidor CS50 e nós ver que queremos chegar este tipo de información. E, a continuación, están baseadas neste protocolo para saber como esta información é entregado, servidor de información dá de volta para nós, o cliente. E entón somos capaces de ver a información á páxina e, a continuación, usalo. Entón, a continuación, Protocolo de Transferencia de Hipertexto é só outro protocolo ou establecer dos convenios que define como o navegador web eo servidor web debe comunicarse. E poñer iso todo en conxunto, HTTP, de novo, só define como este hipertexto definido polo HTML que temos está a traballar-lo, como debe ser entregado a vostede e como que os datos que se entrega a vostede chega a ti. E é por iso, se vostedes me lembro dunha clase, tivemos unha morea de solicitudes e tivemos unha morea de sintaxe para estes pedidos que estamos vai pasar por riba de agora. Entón, de novo, cando enviamos unha proposta para un servidor, temos que establecer un par de cousas. Por iso, necesitamos de atopar o tipo da solicitude de que estamos asentados. E, de novo, temos, por exemplo, Get é un tipo de método que temos no noso pedido. E, a continuación, HTTP / 1.1 é só o protocolo que estamos usando actualmente. A maior parte do tempo, que vai co protocolo que estamos a usar. Entón, se ten unha pregunta como que no seu quiz. Isto é as convencións que temos ata agora. Backslash refírese a que tipo de cousas que estamos pedindo. A continuación, o noso anfitrión é, por exemplo, neste caso, estamos intentando ir google.com. Polo tanto, este é o valor para un servidor. Este é un tipo de solicitude que podería ser enviada. E a continuación, un tipo de resposta que podería enviar, de novo, con base neste protocolo, é novo, HTTP / 1.1. Entón esta é a versión HTTP novo. 200 OK é só o código de estado. E que OK é só unha frase con base nese código de estado. E, a continuación, o Content-Type refírese ao tipo que é devolto para ti que é para esa páxina web que recibe e que o seu navegador pode render despois. E iso é text / html. Audiencia: Que significa 1.1? MARIA ZLATKOVA: Isto é só o versión de-- Oh, o que significa 1,1? Esa é só a versión, o HTTP versión dun protocolo que estamos a usar. Boa pregunta. Outras preguntas? Audiencia: Podería resumir Content-Type rápida real? MARIA ZLATKOVA: Así que é o que o servidor. o tipo de information-- que é tipo de contido foi as preguntas. Así, foi o tipo de información que recibe de volta desde o servidor, o tipo de datos que o seu navegador pode, entón, ingresos que está a usar. Audiencia: Isto é o que este protocolo está dicindo para lle facer? MARIA ZLATKOVA: Sentímolo? Audiencia: Isto é o que o protocolo di? MARIA ZLATKOVA: A protocol-- Audiencia: -o que o Content-Type é ou what-- MARIA ZLATKOVA: O protocolo baséase on-- o que é o protocolo dicindo a vostede? Isto é só a forma que esta información se entrega a vostede en base de que tipo de protocolo foi esta información ten entregado de volta para ti. Isto ten sentido especie de? HANNAH Blumberg: Vostede pode pensar de protocolo como um-- Creo Profesor Malan descreveu- en clase como tipo de como um-- é como o equivalente humano de sincronismo. Dicir, como, hey, eu teño unha proposta e eu saber como xestionar HTTP da versión 1.1. E, a continuación, o servidor di: Oh, ben, I-- e ambos existen. Eu tamén sei como xestionar HTTP / 1.1. E eu vou dar- faga unha copia de algúns contidos. Neste caso, vai como do tipo text / html. Entón é un tipo de só un xeito un deles para communicating-- MARIA ZLATKOVA: É só confirmando que é ambos a seguir a mesma e que tanto o protocolo o cliente eo modo server-- o navegador eo server-- tipo de saber o que é falando e teñen a convención para pasar en datos. Audiencia: Entón o Content-Type part-- o texto Content-Type / html-- que é unha parte separada da mesma mensaxe? Ou é parte de, digamos, 200? Será que 200 dicirlles que é é-- MARIA ZLATKOVA: 200 di que todo foi ben. E, a continuación, tipo de contido é unha especie de parte separada do mesmo mensaxe, e dicir as cousas que eu retorno ten este tipo de text / html. É só dar máis información. Ten algo que engadir? Aceptar. Calquera outra dúbida sobre iso? Impresionante. Así, algúns outros estado de HTTP que poderiamos obter, ademais de 200 OK, os que vimos quizais posiblemente un lote son 403 e 404. Así, 404, se estaba tentando Acceso algo que non existe. Así, por exemplo, na súa Serie de exercicios CS50 Finanzas, se fose render quote.html e non ten o ficheiro, pero no seu canto tiña quote.php, que resultaría nun 404 Not Found porque o ficheiro pode non existir. Para un 403 prohibido, que refírese ás permisos. Polo tanto, se algún ficheiro non pode ser lido polo mundo, pode que un 403 retorno. Outros que podes get-- 301, movido permanentemente; 302, Atopado; 304, Modificado; 400, Bad Request; e, a continuación, un erro de servidor interno para 500 e 503, servizo non dispoñible. Si. Audiencia: Será que esperabamos Recordar todos os estados? MARIA ZLATKOVA: eu tería Los na súa folla de fraude. [Risas] Audiencia: Será que estamos espera para sabe o que desencadea cada unha delas? MARIA ZLATKOVA: Son? HANNAH Blumberg: Para os que temos executar into-- entón a cuestión foi-- MARIA ZLATKOVA: Son esperamos para saber o que cada un destes estado códigos pode ser desencadeada por? Así, para os que usamos e foi para dentro, eu diría, si. Entón, nós sempre visto 200 Aceptar e deu clases lo en Serie de exercicios. Vimos 403, 404. Para outros? HANNAH Blumberg: Eu faría dicir 500 parece un xogo xusto. MARIA ZLATKOVA: 500, si. HANNAH Blumberg: Yeah. Só ten que ter un sentido xeral o que lles causa. E tamén só por estes nomes, pode tipo de como facer un palpite como para o que realmente lles causou. Por exemplo, mudarse definitivamente probablemente o ficheiro foi movido permanentemente. Audiencia: Pero nun anterior exame, houbo un así como é que espera de nós para responder a isto? HANNAH Blumberg: Isto valía cero puntos. A pregunta sobre o 418 no bule é tecnicamente un estado de HTTP, pero valeu a pena cero puntos. Obviamente, non está Espérase que os coñezo. Audiencia: É un real? HANNAH Blumberg: É un verdadeiro un, pero iso non significa nada. É só unha broma. Internet a xente divertido. MARIA ZLATKOVA: Grandes cuestións, rapaces. Algunha pregunta? Audiencia: Qué é erro interno do servidor? MARIA ZLATKOVA: Internal Erro de servidor só significa que foi incapaz de comunicarse co servidor, por algunha razón. Polo tanto, non é necesariamente algo que ten que ver co cliente ou algo parecido. Eu non sei de ningún exemplo específico que temos pasado para explicar, pero si. HANNAH Blumberg: Claro. Así, por exemplo, como imos dicir que estaba traballando mashup e un servidor de Google descendeu para algúns razón, unha caída de enerxía, digamos. Iso sería un servidor interno erro ou algún tipo de-- me gusta de ti non obter unha resposta de volta. MARIA ZLATKOVA: Yeah. É só cando está incapaz de comunicarse co servidor, por algunha razón, porque de que vai para abaixo ou algunha outra razón. Entón ir para PHP. PHP, a diferenza do HTML, é un linguaxe de programación. E comezamos a usalo porque é moi útil para desenvolvemento web. Temos utilizado por primeira vez en CS50 Finanzas. E, basicamente, nos axuda a traer xuntos esta cita, o deseño, e como nós realmente usar información para amosar cousas nunha páxina web. Así, o propio PHP significa PHP Formato Preprocessor, polo que é unha backnorym recursiva de seu. E abrindo etiquetas para PHP nós á esquerda e frechas correctas cos puntos de interrogación e php. Entón, nós vimos unha chea del. Agora, só estamos indo a pasar por riba algunhas das cousas básicas sobre el. Así, con PHP, a variable nomes comezan con sinal de dólar. Non especificar, unha vez máis, unha variable de tipo máis. Así como fixemos con C, nós non necesitamos facelo. Podemos facer unha chea de diferente cousas con variables. Podemos poñer-los xuntos concatenando-los coa notación de punto, que nós non poderiamos facer en C de novo. Unha vez máis, temos un pouco máis de versatilidade con PHP en termos de variables. Unha vez máis, non temos unha función principal. E PHP interprétase en oposición a compilado, Entón, como fixemos para arquivos C, non temos que facelo para PHP. Pero si, a forma que a lingua corre por si só, é interpretado. E entón vagamente ingresaran Significa só que nós Non ten que especificar unha variable tipo e tipo de variables son comprendidos en tempo de execución. Audiencia: Pero o que fixo quere dicir con concatenación de punto? MARIA ZLATKOVA: Claro. Cando queremos poñer as cousas together-- polo que se tivemos algunha variable que tivo o valor de 3 e outro variable que tivo o valor de secuencia de caracteres, poderiamos poñer as variables xunto poñendo un punto entre eles e concatenar-los. Ou poderiamos crear un chamado nome de variable e poñelas en conxunto por concatenación de dúas secuencias. Entón, se nós tivésemos unha corda en parella citas e nós poñer un punto despois dela, e entón tivemos outra corda, que crearía unha secuencia completamente. Audiencia: Aceptar. MARIA LETONIA: Foi claro? Audiencia: É. MARIA ZLATKOVA: Aceptar. Si. Audiencia: Cando di interpretado en vez de compilado, está falando non fai iso Debe ser tan específico cando trátase PHP versus C? MARIA ZLATKOVA: Cando dicimos interpretado en oposición a compilado, o que queremos dicir? Entón isto significa que nós non precisamos arquivos executable para realizar o PHP. Isto significa que é executado como vai. Isto ten sentido? Un pouco máis. HANNAH Blumberg: Entón pode pensar dun intérprete como outro programa que se encarga para ir liña por liña a través do PHP e realmente executa-lo, a diferenza para compilar todo para abaixo para binario. En realidade, non significa nada sobre como específico que debe ser. Aínda necesitamos ser máis preciso, e non fazê- esqueza o seu punto e coma, e asegúrese ten o seu sinal de dólar, e cousas así. Boa pregunta. MARIA ZLATKOVA: Yeah. Entón, liña por liña, como diferenza con arquivos C, temos que facer toda a finais antes de que poidamos realmente executalo. Esa é a principal diferenza. Pero, de novo, non podemos realmente ser menos específico. Entón matrices en PHP representan actualmente un mapa ordenado. Entón valores matrices asociados ás chaves. As dúas formas de declarar unha matriz, derivada sintaxe, podemos ser máis explícito en dicir que temos un array e temos esa key1 que mapea para este value1, key2 que mapea value2. Ou podemos simplemente crear unha matriz que contén o propio valores e, a continuación, as teclas son entendida dunha forma. Calquera dúbida sobre iso? Audiencia: Qué as teclas estar no segundo exemplo? 0, 1, 2, 3? MARIA ZLATKOVA: Por exemplo, é só as claves neste non necesariamente facer a diferenza. Eles só definir como pode usar os valores dentro del. Entón, se tivésemos un foreach lazo en PHP que faría nos permite pasar por todos os valores, podemos pasar por todos os valores, mesmo se ou non definido unha clave específica dentro do lugar de sintaxe anterior. Así, mesmo con este tipo de array, poderiamos aínda ter un loop foreach que pasa a través de cada dos valores da chave na matriz. Así, a sintaxe dun foreach loop, imos comezar con unha matriz. Esta variable $ arr é a nosa matriz real que definimos no slide anterior como o valor que vai literalmente a través de cada un dos valores, independentemente do feito tivemos unha clave ou non. E entón podemos facer algo con o valor dentro do loop foreach. Entón, de novo, se tivemos un array como este aquí created-- polo que temos a clave de foo e valor de bar, chave de Baz e valor de qux-- podemos ter un loop foreach que pasa por matriz como valor de clave e, a continuación, facer algo coa clave e / ou o valor. Pero non necesariamente sempre ten que ter un foreach loops que pasa por matriz como mapa clave para valor. Podemos pasar polo matriz loop foreach como valor. HANNAH Blumberg: E eu creo que a-- foi a pregunta, o que é o índice implícito? Audiencia: kind. MARIA ZLATKOVA: Oh. HANNAH Blumberg: Si, si. Entón, basicamente, se non especificar unha clave, que vai ser 01. MARIA ZLATKOVA: Yeah. Así como co C, é de cero indexados se non especificar unha chave. Audiencia: Sentímolo. Vostede podería tentar falar un pouco máis alto? Estou tendo un pouco de problemas para escoitar todo. MARIA ZLATKOVA: Eu sinto moito. Si, por suposto. Entón quere me para pasar por riba de novo? Ou é isto-- Audiencia: Entón o slide-- anterior podería simplemente voltar un segundo. MARIA ZLATKOVA: Por suposto, desculpe. Audiencia: Entón o segundo matriz aquí non parecen ter un valor de chave, tipo de [? o nexo de causalidade. ?] MARIA ZLATKOVA: Correcto, non. Audiencia: Entón, como é que funciona cando di que é todo ou nada. Para min, iso parece un [? foo?] xa. MARIA ZLATKOVA: Si, si. Entón, de novo, este é un mapa ordenado, neste sentido, que non son comprendidos, por exemplo, os índices aquí pode ser entendido como 0, 1, 2, 3. De novo, iso é ter os índices é a equivalente de claves mapeadas en valores. Entón, se a nosa clave foi 0-- desculpe. HANNAH Blumberg: Non, alí está giz ata aquí. É realmente moi bo. MARIA ZLATKOVA: Isto é óptimo. Aceptar. Entón, de novo, $ arr 0 sería a clave para o valor 1. 0 sería a clave para o valor 1. Audiencia: Eu sinto moito. É invisible. HANNAH Blumberg: Todo ben, deixa para alí. Chalk foi unha mala idea. Eu leva-la de volta. Pode pensar das claves como 0 mapea ao valor 1. MARIA ZLATKOVA: Yeah. Polo tanto, este é 0, é dicir 1, 2, 3. Estes poden ser as súas claves. Pode pensar neles as-- si. Entón, en vez de ter claves explícitas, son tipo de entenderse como os índices desde 0. O giz non axuda. Si. Audiencia: Para o loop foreach, se quixésemos ver o que de valor, Sería só o índice automaticamente a 0? MARIA ZLATKOVA: Yeah. Sería pasar por cada un dos valores. Audiencia: [inaudível] como 0 ou tería que facer 0? MARIA ZLATKOVA: Vostede tería para dicir como sinal de dólar e, a continuación, algún nome da variable, valor. Audiencia: [inaudível]. MARIA ZLATKOVA: Sentímolo? Audiencia: Sentímolo, eu son só tentando me lembrar. Como faría iso se pode facelo automaticamente indexación é só 0 de? MARIA ZLATKOVA: Entón, como faría iso se non teñen nomes clave específicas? Audiencia: É. MARIA ZLATKOVA: tería só define-- só dicir a si mesmo como un nome. Así, na súa Serie de exercicios, vostedes poderían Teña en conta que foreach $ row como $ liñas, creamos a nós mesmos desa $ row dicindo queremos pasar por liña como $ liñas. Aínda que non tivésemos esta $ explícito liñas definidas, puidésemos simplemente ir e dicir que este sexa o noso clave, e só pasar por cada un dos valores. Audiencia: Entón é unha nova variable de valor estamos creando para almacenar [inaudível]? MARIA ZLATKOVA: Entón non é inherentemente unha nova variable. É unha variable que se refire á no interior da matriz para cada un deles. HANNAH Blumberg: É un novo nome variable. MARIA ZLATKOVA: Si, é un novo nome de variable, pero non é inherently-- si. É só unha nova variable que pode facelo. Entón, como facer fixemos $ Liña como $ liñas, liñas era un novo nome da variable que podería crear no noso loop foreach. Non ten que preexistir antes diso. Audiencia: Podería pasar polo lóxica para cada un, usando o exemplo alí? MARIA ZLATKOVA: Mhm. Oh, desculpe. Aquí está o exemplo. Claro. Así, para cada array-- así isto significa ir a esa matriz como clave value-- que está pasando que pasar por esa matriz e primeiro ir buscar foo, o foo clave ea barra de valor. E, a continuación, no segundo iteración do bucle, vai pasar e tomar o Baz clave eo valor Qux. E entón podes facer algo con calquera deles ou de ambos. Audiencia: Entón, a idea detrás tendo un punto clave para o valor, que é o que acaba accedendo? MARIA ZLATKOVA: Cal é a idea de ter un enlace clave para valorar? É só unha outra convención, outra xeito de atravesar a matriz e ser capaz de acceder tanto o clave ou o valor ou ambos, e utilizalos. Audiencia: Cal é o papel para o ordenar que o foreach execútase en? Entón, se nós estabamos para engadir elementos para a matriz máis tarde, serían eses os primeiros chamado na matriz foreach, ou sería máis tarde? MARIA ZLATKOVA: Entón, cal é a fin de que o foreach circuíto pasa por unha matriz en? Ela pasa por o primeiro elemento para o último elemento, para o último elemento engadido. Se engadir elementos máis tarde, farían accessed-- ser os primeiros elementos que pode acceder como o primeiro elementos da matriz, e, a continuación, que ía pasar por cada un os elementos como unha especie de ordered-- non un ordenado, pero a forma que eles foron colocados na matriz. Audiencia: Entón, novos elementos engádense máis tarde? Entón, eles están added-- van ser o últimas no [? iteración. ?] MARIA ZLATKOVA: Novos elementos can-- basicamente, cando novos elementos son engadidos, son engadidos ao final da matriz? Audiencia: É. MARIA ZLATKOVA: Eu creo que si. Si. E despois co seu loop foreach, despois de ter engadido novos elementos e pasar por eles, os novos elementos faría accessed-- ser o novo elemento, se é engadido por último, sería acceder por última vez. Audiencia: Pode só dar un exemplo algo que ía [inaudível] con algo con valor como o [inaudível] ou o valor, como o xeito no que desexa que formatear? MARIA ZLATKOVA: Claro. Podo dar un exemplo do que fariamos co valor? Entón, o que vostedes poden estar familiarizado con é que nos pasamos por unha matriz e, basicamente, impreso cada un dos elementos, por exemplo, como parte dun lista ordenada ou algo que. Isto ten sentido ou queremos a-- Audiencia: Podemos imprimir eses valores para fóra? MARIA ZLATKOVA: Si, poderiamos imprimir e, a continuación, basicamente debido a $ Valor este valor específico, que sería imprimir o valor no interior do mesmo. Entón, se nós estabamos na nosa primeira iteración del e nós impreso $ value, estariamos a impresión bar. Audiencia: Hai tamén son para loops en PHP ou só loops foreach? MARIA ZLATKOVA: Non hai tamén para loops en PHP. E a súa lóxica é principalmente o aínda que o que está acostumado. Audiencia: Entón, o seu valor é nulo. MARIA ZLATKOVA: É como se o mesmo. Si. Audiencia: Eu só vou preguntar. Entón, cando declarar un array, non para dicir o tamaño que vai ser, o que significa que pode só engadir e eliminar elementos [inaudível]. MARIA ZLATKOVA: Yup. Yup. Exactamente. Cando declarar unha matriz, nós Non é necesario dicir o tamaño que é, así que podemos só engadir elementos para el máis tarde tamén. Máis preguntas? Así, traendo PHP e HTML xuntos, o que temos seen-- ben, Por exemplo, neste exemplo, temos un formulario HTML que ten un campo de entrada. E o campo de entrada só nome e, a continuación, el ten un botón Enviar. E cando prema o Subir botón, no noso arquivo hello.php, porque o método para o formulario é obter, podemos acceder todo o que está no nome polo que obter variable global que é-- a sintaxe para iso é de R $ _GET. E entón podemos acceder calquera que sexa a entrada do usuario dentro do mesmo formulario para nome especificando o nome dese campo. Calquera outras preguntas ou calquera preguntas para este exemplo concreto? Audiencia: Onde está o PHP? MARIA ZLATKOVA: Aquí. Entón esta é a nosa marca de apertura cara ó PHP. Audiencia: Oh, non. MARIA ZLATKOVA: Si. HANNAH Blumberg :? A = é un atallo para iso é PHP e só eco. Audiencia: Oh. MARIA ZLATKOVA: Si, desculpe. Eu debería ter feito isto ben claro. HANNAH Blumberg: impresión. MARIA ZLATKOVA: É só a función que nos permite imprimir algo. Boa pregunta. Entón going-- si. Audiencia: É alí vai ser moi un pouco de codificación manual de PHP e HTML no cuestionario 1? MARIA ZLATKOVA: Non pode haber un boa cantidade de interpretación de PHP e HTML, non necesariamente como unha enorme cantidade de codificación, aínda pode ter que escribir loop foreach, porén, un loop. Calquera das espiras que cubrir aquí é un xogo xusto. E iso é todo el. HANNAH Blumberg: Eu estaría preparado. Do mesmo xeito que nós lle pediu para escribir unha morea de funcións C na proba 0, Eu estaría disposto a facer o mesmo en PHP e JavaScript. MARIA ZLATKOVA: Yeah. HANNAH Blumberg: Eu diría un little-- como non somos vai facer vostede escribe un enorme HTML A páxina só porque iso é un pouco tedioso, pero pode ter partes. Iso é xogo totalmente xusto. Como páxina HTML pequeno, totalmente xusto. Audiencia: Aceptar. Que tal en JavaScript tamén? HANNAH Blumberg: Yeah. Xogo xusto do JavaScript. MARIA ZLATKOVA: Yeah. Iso é xogo completamente xusto. HANNAH Blumberg: Nós imos chegar para que, como 10 minutos. MARIA ZLATKOVA: SQL, unha vez máis, Structured Query Language. El basicamente nos permite xestionar datos nunha base de datos relacional de xestión sistema. Isto significa basicamente só que temos en algún lugar para almacenar algúns datos que nos pode querer usar nunha web ou dalgunha outra forma. E entón temos consultas para obter información de nosa base de datos ou para introducir a información neles contida. Unha morea de o Update ones-- común, INSERT, SELECT e DELETE. Así, para Update, esta é a sintaxe para actualizar datos nunha base de datos. Actualizar esta táboa chamada mesa dicindo SET, podemos definir algúns valores en todo liñas para igual outra cousa. Por iso, tamén pode especificar algunhas específicas entradas que queremos modificar e que pode ser usando WHERE. E podemos especificar que queremos só modificar algunhas liñas onde a casa para, se tivésemos unha táboa de estudantes e todos os alumnos tiñan casa, por iso, só podería modificar algúns valores onde unha casa é igual Currier, por exemplo. Para INSERT, podemos introducir certos valores nunha táboa. Entón INSERT INTO táboa, e, a continuación, os valores, e, a continuación, entre paréntesis, nós especificamos cales os valores que quere inserir. Entón INSERT INTO táboa, col1 e col2, o valor é val1 e val2. Polo tanto, este introduce basicamente unha nova liña na unha táboa que contén os valores 1 e 2 segundo as columnas 1 e 2. E entón nós imos pasar por riba un rápido exemplo de como isto parece como no noso banco de datos un pouco. Pero esta consulta final que creo que nós imos pasar por riba, SELECT, só nos permite para seleccionar datos a partir dunha táboa para posiblemente usalo despois. E o xeito no que facemos é que nós só almacena-lo en algunha variable. E entón podemos posiblemente usalo de novo. Entón, escolla estrela significa seleccionar todo. Isto é só unha abreviación para a selección de todos. FROM táboa WHERE, estamos á procura para algunhas condicións específicas, Entón, onde é igual a columna algo, por exemplo. Se nós só queriamos Seleccionar todo a partir da táboa, iso só selecciona todas as columnas e todas as liñas de unha táboa. E, a continuación, DELETE FROM táboa ONDE col é igual a algo, este só exclúe algúns liña da nosa mesa onde temos algunhas condicións específicas. Neste caso, as condicións son columna é igual a algo. Entón, só tes que un rápido exemplo diso. Se temos esa mesa aquí e nós inserir-lo nunha táboa, estes valores, que ía introducir unha nova liña. E se tivésemos de incremento automático, isto só incrementar o ID de 0 a 1 a 2. Se seleccionado todos os alumnos a partir del, só retorna todos os campos e as liñas. Onde ano é maior que ou igual a 2016, que só ía volver Hannah e eu. E entón se nós só seleccionado ID de ano e ano dos estudantes onde a casa está Cabot House, que sería, de novo, volver Hannah e eu. Entón, se eliminada dos estudantes onde o nome é igual a Rob, que ía eliminar a liña enteira. E entón, se imos definir o nome, estudantes ACTUALIZACIÓN Nome do conxunto é igual a Daven ONDE casa é igual Cabot House, que está indo a ir a esas liñas e, a continuación, actualizar o nome. E despois de algúns tipos de datos SQL son CHAR, varchar, INT e float. Estes son xogo xusto. Eu ía de novo e asegúrese de que vostede sabe e te-los na súa folla de fraude, o que cada un destes personaxes foron usados ​​para, o que usou a eles nos seus Serie de exercicios, e asegúrese de que vostede está familiarizado e cómodo con ter que escoller desde diferentes tipos de datos na súa pset. Si. Audiencia: O que foi que a táboa almacenada? Si, onde está esta táboa almacenada? MARIA ZLATKOVA: Ben, agora, non está almacenado. En calquera caso, onde está esta táboa almacenada? Pero pode ser almacenada nunha base de datos de SQL. Audiencia: E onde está a base de datos SQL? No ordenador, en liña nalgún lugar, o servidor? MARIA ZLATKOVA: Pode ser un serie de cousas distintas. HANNAH Blumberg: Temos interface Táboas SQL principalmente con phpMyAdmin. Así, poderiamos preguntar a un servidor para almacena-los para nós. Poderiamos almacena-los no noso propio ordenador. MARIA ZLATKOVA: Depende só de como quere facelo por si mesmo. Pero temos que chegou a almacenar eles, como Hannah mencionado, en phpMyAdmin, que é en liña. E, a continuación, a forma como usamos PHP e SQL, nós almacena-lo nalgúns variable o que temos consultado para. Entón, se nós Seleccionar todo historia onde user_id é igual a identificación da sesión, que seleccionar todas as liñas para a persoa específica que é rexistrada no desde a historia mesa e clasificalos en liñas. Unha cousa legal é saber que a función de consulta do CS50 protexe contra marcas de inxección de SQL. Isto só significa que garante a entrada que é ingresaran é correcta e que a persoa que está a entrar na entrada non está intentando input algúns malicioso código, tanto soltar nosas mesas ou borrar todo dentro do noso banco de datos. Unha rápida visión xeral do Modelo Model View Controller, é só unha forma de organizar e pensar sobre o código. É unha vez máis, un paradigma de deseño. O que isto significa que nós can-- e é unha boa práctica para separar as diferentes pezas do noso código eo que controlar a estes tres paradigmas. Polo tanto, a nosa visión é a maioría das veces a nosa modelos, o noso deseño, o camiño que definir como o noso código parece. Isto é principalmente nosos arquivos CSS e da forma que definiu o deseño do noso código, basicamente. Noso controlador é principalmente o que temos está a facer con arquivos PHP. Entón, de novo, traballando co información que temos e establecer como iso información é utilizada, e, a continuación, pasa esta información tanto para a visualización ou o modelo. E o modelo, o xeito que temos benvida a empregar é foi o noso banco de datos, de xeito que a nosa información é almacenado para que teña en algún lugar para vivir, e calquera dos código que se relaciona coa forma como que obter a información ou a xeito que actualizar esta información. Así, no modelo MVC, HTTP solicitudes enviaranse a un servidor web. A continuación, o controlador interpreta a petición do usuario e, a continuación, valida a entrada do usuario. É opcional que temos o controlador comunicar cun modelo, de xeito algo como a nosa base de datos ou algunha outra función que retransmite información. E, a continuación, finalmente, o controlador pasa a información para a vista de xeito que pode ser rendida e que pode chegar a ser visible para calquera persoa accedendo á páxina web. Algunha pregunta? Impresionante. Entón, de novo, o modelo, a súa función, unha vez máis, é persistente almacenamento de información, xestionar e organizar datos. E o que vimos ata agora é a base de datos MySQL e os ficheiros de datos que poden utilizar. Ver, a presentación de información para o usuario, a interface de usuario ou interface de usuario. E o exemplo disto é HTML. E entón poderíamos ter PHP mínima. Entón, un loop que itera sobre os datos que son impresos é parte da visión, como oposición ao controlador. E, a continuación, unha morea de nosos arquivos PHP se enmarcan na categoría de control. El só trata sobre as solicitudes de usuario e obtén información a partir do modelo. Saltando ao documento Object Model, iso só refírese á forma como HTML documentos son organizados. E eles están organizados nunha árbore estrutura que ten unha xerarquía. Entón, se temos acceso a [inaudível] representación do documento, podemos traballar co documento, como nós basicamente manipular obxectos. E para facer este un pouco máis claro, cando temos unha morea de nosa tags diferentes responder a distintas rutas na nosa árbore. E, a continuación, para este exemplo, teñen o no documento inicial. Temos, pois, a nosa nó HTML que se divide en cabeza e corpo. Cabeza ten título e, a continuación, Título contén Ola, mundo. E o noso corpo contén só Ola, mundo tamén. Así dúbidas sobre calquera dos cousas que nós Cubrimos ata agora? E se non, Hannah vai asumir con JavaScript. Impresionante. HANNAH Blumberg: OK, legal. Se ocorrer algo co PHP ou HTML, ou calquera das cousas Maria cuberto, podemos sempre facer unha pausa. Estamos facendo mellor en outra vez, tan impresionante. E só para volver realmente rápido para iso, se ollar para todo exame do ano pasado, este trátase aquí é either-- algúns HTML, fan deste diagrama. Ou aquí está neste diagrama, facer un HTML, polo tanto, en definitiva practicar iso. E entón iso é un garantida pregunta que pode obter dereito. Legal. Entón, imos falar sobre o JavaScript e como é un pouco diferente de linguaxes como PHP e C, as dúas linguas que vimos antes. Entón, número un, é vagamente ingresaran. Isto é como PHP, pero a diferenza C. É unha linguaxe interpretada. De novo, iso é como PHP, a diferenza C e esta vai permitir-nos-lo use-- Funciona moi ben con páxinas web. Vai permitir-nos para manipular os contidos e como mira eo que fai. Nós imos ver un pouco de Ajax. Permite que nos comuniquemos assincronamente con diferentes servidores e obter información. E esta é a única cousa que realmente JavaScript separa de PHP e C é que é do lado do cliente. PHP e C son normalmente no lado do servidor. Para a maioría e case enteiramente o que vimos, polo menos en esta clase, JavaScript actúa no lado do cliente, o que significa que o navegador é, en realidade, responsable de executalo. E isto significa que nós non precisa interactuar co servidor. Entón, isto significa que pode ser moito máis rápido porque é realmente só é Chrome, é Safari, Firefox é, o que usar, de feito, executando a súa JavaScript. Audiencia: Qué asíncrono significa? HANNAH Blumberg: Ah, o que non de forma asíncrona significa? Boa pregunta. De forma asíncrona means-- así, o contido que podemos usalo é, OK, nós está creando unha páxina web e necesitamos a obter unha información. Así, co exemplo de mashup, unha información que podemos querer é artigo títulos. Agora, could-- unha opción é facelo de forma síncrona e iso significa que let de parar, ir buscar o artigo, obter o artigo para atrás, e, a continuación, renderse, pero que sería moi lento. Iso sería unha mala experiencia do usuario porque tería só que estar sentado alí esperando por algo para responder. De forma asíncrona significa que nós imos seguir indo sobre o noso negocio, renderización da páxina, e nós imos enviar unha solicitude Ese é un tipo de ir pasar no fondo. Creo que usamos o exemplo na charla de Rob chamando e dicindo: hey, pode ollar este riba para min e volver para min, no canto de só me esperando o teléfono. Así, de forma asíncrona significa que isto ocorre no fondo de distancia de nós en paralelo. Boa pregunta. Algo máis? Gran. Nós imos ir moito máis en solicitudes asíncrono con Ajax. Audiencia: Será que JavaScript-- onde fai Lo caer con MVC? HANNAH Blumberg: Excelente pregunta. Cando fai a caída JavaScript con MVC? Hm. Creo que pode fall-- por iso, non adoitan quere esmagar-lo que paradigma, pero eu creo que eu diría, OK, entón JavaScript realmente vai permitir que nós para recoller datos, interpretar datos, en realidade, facer cousas significativas cos datos. Desta forma, é moi control-like. Pero tamén vai permitir amosar cousas e impresión cousas. Desta forma, é moi vista-like. Si. Entón, é tipo como de PHP en onde se pode tipo de ambos. Boa pregunta. Algo máis? Todo ben, impresionante. Seguindo adiante. Entón, imos ver un exemplo de como podemos utilizar JavaScript nun dos nosos programas de web. Entón, eu vou considerar iso index.html con unha morea de HTML. E a cousa que quero que centrar é esa etiqueta script. E iso, di, OK, quero correr algúns Javascript e aquí é onde vive. Vive hello.js. E moi parecido CSS, poderiamos poñer JavaScript no HTML. Por que queremos para separalos lo fóra? Si. Audiencia: Máis fácil de reescribir? HANNAH Blumberg: Yeah. É máis doado de usar en toda diferentes páxinas web. Mantén as cousas limpas. É só unha boa práctica. Impresionante. Boa resposta. Tan bo, entón iso vai para ser o noso index.html. E entón aquí é a nosa minúsculo ficheiro JavaScript pouco. E todo o que di é alerta Ola, mundo. Entón o que ocorre é cando Nesta páxina renders-- polo que se vai a calquera sitio este é-- todo o que vai ocorrer é que vai dicir, OK, eu son indo para executar este código JavaScript. E este código JavaScript só di alerta Ola, mundo. Entón, eu estou indo a obter esta friendly little emerxentes. Legal? Isto é tipo como o noso primeiro JavaScript programa, o noso Ola, mundo. Imos mirar un pouco máis sobre o que A sintaxe de JavaScript parece. E, especialmente, imos comparar co C e PHP, o que vimos antes. En JavaScript, nós imos ter var, o nome da variable e, a continuación seu valor real. E nós non especificar un tipo, só como en PHP, pero moi ao contrario C. Así, por exemplo, se quixésemos para almacenar o valor 50, no C, teriamos que dicir, hey, C, quero un número enteiro, Vou chamalo i, eo seu valor é de 50. En PHP, é un pouco máis fácil. Nós dicimos, hey, eu quero unha variable i chamado eo seu valor é de 50. Moi semellante, no JavaScript, nós dicir hey, eu quero unha variable chamada i, o seu valor é de 50. Cada vez que eu uso posterior i, eu non teño escribir var. É só eu a partir dese punto. Do mesmo xeito, en C, onde xa dicimos int i, nós só usar i. Legal? Todo ben. Pasando para loops, Afortunadamente, estes case ollar exactly-- Eu creo que son exactamente o mesmo que o que loops son indo ollar como en algo así como C que o seu loop for terá tres parts-- unha inicialización, unha condición, e unha actualización. Un loop while, parece exactamente o mesmo. Nós só darlle unha condición. E un loop Do While, de novo, exactamente o mesmo. Nós darlle unha condición. Digamos que eu quería facer unha iteración over-- Eu quería facer algo por cinco veces. En C, podemos escribir ao init i é igual a 0. i é menos de 5, i ++. A única diferenza, en JavaScript, en vez de dicir int i é igual a 0, dicimos var i é igual a 0. Fermoso. Esa é a única diferenza. Calquera preguntas sobre nada diso? Si. Audiencia: Entón, en PHP, que é o mesmo cousa, excepto senón como unha variable? Ou foi un exemplo var? HANNAH Blumberg: Yeah. Así, en PHP, vai ser un sinal de dólar. Entón vai a $ i é igual a 0, $ i é menos que 5, $ i ++. Boa pregunta. Agora imos falar sobre declaracións de funcións. En C, cando declarou un función, demos-lle un nome e nós demos algúns parámetros. E ao principio, escribimos o tipo. En JavaScript, todos ten que facer é escribir a palabra chave función que di, hey, JavaScript, Estou a piques de establecer unha función. Neste caso, ten nome suma. E leva dous argumentos, xe y. Teña en conta que nós non nos importa sobre os tipos de x e y. E, así como C, temos ese retorno de palabras clave, así que podemos facer algo como retorno xe y. E agora, xa que escribise esta primeira función, podemos utilizar suma en calquera lugar. E iso é totalmente bo. Unha cousa moi legal sobre JavaScript que é moi diferente de C é que as funcións poden ser tratados como valores. Así, podemos facer algo parecido aquí onde supoño que cubrir este up-- Cobre-se a suma var part-- e nós só dixemos xy é igual a función de retorno x máis y. Iso é o que sería chamado unha función anónima. É unha función sen un nome. Considerando que a presente di función suma, bla, bla, bla, este só diría función. Pero agora, aínda que eu teña esta función anónima, que a función é realmente só un valor. Podemos tratala como un valor. Así, podemos salvalo nunha variable do mesmo forma, poderiamos almacenar 50 nunha variable. Así, podemos dicir, OK, quero un variable, que se chama suma, e é esta función. Entón, estas dúas cousas son, en realidade, vai facer exactamente o mesmo, pero a sintaxe é un pouco diferente e unha especie de nota do desfrute. Si. Audiencia: Entón, vostede podería chamar un función que era anónimo, dicindo: soportes suma 2, 5? HANNAH Blumberg: Yeah. Pode chamar ese anónimo en función do mesmo xeito. Faría sum (2, 5);. Iso sería totalmente ben. Se eu non fago a suma var igual función, se eu simplemente suprimido isto-- Sei que é na miña man, pero finxir que eu excluído isto-- continuación esa función é tipo de acabado. Vostede non pode usalo de novo porque non ten un nome para el. É difícil referirse a algo vostede non sabe o que chamar. Boa pregunta. Si. Audiencia: pode facer referencia suma en outros lugares co valor de x máis y? HANNAH Blumberg: Pode suma de referencia noutros lugares co valor x máis y? Non son enteiramente certo o que quere dicir. Audiencia: Entón o seu pasado semi-anónimo función é a suma é igual a este función anónima, entón suma é agora unha variable que can-- HANNAH Blumberg: Correcto. Así, a suma é variable, pero é actually-- tal que a suma é unha variable cuxo valor é a función. Por iso, é unha función, que é unha especie de unha cousa estraña de romper a cabeza en torno a desde que comezamos a xogar con C e non pode facelo en C. Pero agora podemos chamar sumar o mesmo xeito que poderiamos chamar suma aquí. Audiencia: Aceptar. HANNAH Blumberg: Yeah. Boa pregunta. Si. Audiencia: Entón non utilizar o prototipos en PHP ou JavaScript? HANNAH Blumberg: Non, Non é necesario empregar prototipos, especialmente en JavaScript. Entón, unha cousa mala práctica que eu son vai dicir que non debe facer é que non ten que escribir var i = 50. Vostede podería simplemente comezar a facer i = 50. E eu faría só unha variable global. É moi mala práctica nunca diga explicitamente var i, pero é algo que podes facer. O intérprete non é vai berrar con vostede. JavaScript é moi semellante, pode facer o que quere. Oh, desculpe. Hai dúas. Nas pantalóns laranxa. Vai adiante. Audiencia: Non, en primeiro lugar. Audiencia: Non, eu só estaba dicindo Eu non tiña a man superior. Aceptar. Entón, se fose chamar que por primeira vez, agora resumir, chamamos-lle do mesmo xeito, x, y, como en cada momento? HANNAH Blumberg: Yeah. Entón, eses dous esencialmente facer o mesmo. Audiencia: E cal é a vantaxe de usar un ou o outro? HANNAH Blumberg: Ningunha vantaxe de usar un ou outro. Eu só quería amosar-lle dous diferentes anacos de sintaxe. Unha morea de veces en que anónimo funcións teñen un propósito é o argumento para outro función debe ser unha función. E nós imos ver que en só un segundo co Ajax. Entón, se isto non ten sentido, almacena-lo na parte de atrás da súa cabeza. É alí onde un anónimo función pode ser útil porque non é realmente paga a pena dándolle un nome, xa que estamos só vai usalo unha vez. Si. Audiencia: Se x e y cambio máis tarde en, sumará cambiar tamén? HANNAH Blumberg: Se x e y cambio máis tarde, vai sumar cambiar tamén? Polo tanto, este é, en realidade I creo que algo que é, de novo, el só se sente moi diferente de C. Este non é un valor. Non é 5. É só a propia función. Así, logo que lle dá parámetros, entón vai realmente calcular un valor. MARIA ZLATKOVA: E, a continuación, pode chamar a función e usalo para obter un valor. HANNAH Blumberg: Correcto. Exactamente. Si. Audiencia: Entón, se só almacena-lo na variable, como var x é igual a suma de dous values-- HANNAH Blumberg: Yeah. Entón, vostede podería só facer var sum é igual a suma dos dous valores. Si. Algunha pregunta? Si. Audiencia: Pero será que confundir suma e suma? Como se chamar seu importe variable, chamaría a suma función? HANNAH Blumberg: Mm. Mm. Se fixo algo como, suma é igual a suma de 2, 5? Audiencia: É. HANNAH Blumberg: Eu creo que ía substituír o valor de suma. Polo tanto, outra interesante cousa sobre JavaScript é que unha única variable pode asumir en unha morea de diferentes tipos. Bad práctica. Non debe facer algo como o que acaba de dicir. Pero en C, si existe igual a un número enteiro, sabemos que non é vai facer unha cadea. Este non é o caso en JavaScript. Si, boa pregunta. Algo máis? Todo ben. Facendo todo certo a tempo. Manter indo. Todo ben. Mira un array en JavaScript, é aquí un rápido exemplo dunha matriz de cadeas. E matrices poden crecer de forma dinámica. Eles non teñen un tamaño fixo do mesmo xeito que fan en C. Podemos acceder ao elementos con só os corchetes. Isto se asemella moito a PHP e unha morea como C, onde podemos dicir neste caso se eu quería a palabra JavaScript, eu o faría que arr corchetes cun 0, 1, 2. E entón se recorda en C cando quería ter a lonxitude dunha matriz, que era realmente irritante. Pero en JavaScript, super fácil. Todo o que facemos, .length. Dálle as lonxitudes. Iso é. Audiencia: É sinxelo. HANNAH Blumberg: Si, fai a súa vida moito máis fácil. OK, non object-- alí. Obxectos en sensación JavaScript moi parecido estruturas en C e arrays asociativos en PHP. Entón, o que vimos un moi é JSON, que significa JavaScript Object Notation. E é basicamente unha forma de estruturar nosos datos. Entón, imos ver un exemplo, probablemente o máis fácil. Entón aquí está un exemplo dun obxecto que almacena a clase, CS50. E cando digo clase, quero dicir, por suposto, non como-- si, o curso, CS50. E vai ver que todo no obxecto vai ser contido entre chaves. E comezamos a asociar nomes de campo ou claves cos diferentes valores. Así, pode comezar a ver como este tipo de se sente como unha matriz asociativa en PHP. Entón, nós estamos indo a asociar o campo ou o nome da chave, por suposto, coa corda, CS50. Nós imos ter un instrutor. Nós imos ter TFS. Nós imos ter número de Serie de exercicios e nós imos ter gravado. E unha cousa legal para notar é todo de esas cousas teñen distintos tipos, e iso é totalmente bo. É bo para un obxecto, de feito, probablemente se espera a un obxecto ter unha combinación de cordas e números e Booleans e matrices e calquera outra cousa que pode quere ter no seu obxecto. E teña en conta que estes van ser os nomes ou as chaves, e entón nós só axustalo igual cun pouco de colon. Audiencia: O que é exactamente significa JSON significa? HANNAH Blumberg: Qué JSON exactamente significa isto? JSON só representa JavaScript Object Notation. É só unha forma de formato. Si. É un xeito de formatar nosos datos. En C, é estruturas. En PHP, é matrices asociativas. En JavaScript, temos obxectos. Audiencia: Entón CS50 é un obxecto? HANNAH Blumberg: CS50 é o obxecto, neste caso. Agora, como é que nós, en realidade, o acceso estes campos ou cambiar estes campos. Por exemplo, supoñamos que decidimos que quería un menos pset neste semestre. No canto de nove, estamos só terá oito. Como poderiamos cambiar isto? Oh, forma incorrecta. Hai dous xeitos que podemos facelo. O número un é o punto notación e número dous é coa notación paréntese. Así, por exemplo, se eu quería cambiar ou acceso Serie de exercicios de campo no noso obxecto CS50, o que me gustaría facer é CS50.psets, de xeito que o nome do obxecto de puntos o nome do campo ou a clave. Moi semellante, é exactamente equivalente a facer CS50, e, a continuación en corchetes, Serie de exercicios. Legal? Si. Audiencia: Entón é JSON tecnicamente aínda JavaScript, aínda que nos temos Serie de exercicios separa-lo para fóra [inaudível]? HANNAH Blumberg: Claro. Entón a pregunta é, son Javascript e JSON equivalente? Entón JSON é notación basicamente a forma que escribimos para fóra un obxecto de JavaScript. Así, non son exactamente o mesmo. Eu diría JavaScript, alí son obxectos en JavaScript. JSON leva estes obxectos e os imprime e apresenta- ou almacena-los nunha forma agradable. Así JSON non é unha programación lingua de maneira que é JavaScript. É só a notación para nosos obxectos en JavaScript. Si. Audiencia: Entón, o que exactamente [Inaudível] completar? HANNAH Blumberg: Claro. Entón, iso realmente non fai nada. Esta é só unha forma de acceder. Entón, imos dicir que quería cambiar o número de conxuntos de problemas de nove a oito. O que facemos é facer algo como CS50.psets = 8;. Si, grande importancia. Este é só para amosar-lle sintaxe. En realidade non fai nada de útil. Algunha pregunta? Seguindo adiante. Entón, imos ollar para un rápido exemplo de como JavaScript funciona porque eu dixen a vostede que fai todas esas cousas legais e permítenos modificar páxinas web. Imos realmente velo en acción. Entón tome, por exemplo, o ficheiro HTML. E a cousa que quero que concentrarse en esta etiqueta particular, que é un botón, con id search_button. É só na páxina. Entón agora imos ver o que podemos realmente facer. Ben, supoñamos que, cando fai clic neste botón, queremos facer unha alert-- premeu no botón. Imos ver como podemos facelo. Entón window.onload-- iso non é algo que xa viu na clase, pois Non é preciso saber que para o quiz. Pero iso basicamente di, OK, chamada esta función cando a carga de ventá. Entón, iso é só unha especie de código de configuración. Non te preocupes tanto con iso. O que quero que centrar é aquí. Dicimos var searchButton igual document.getElementById search_button. Entón, como podes imaxinar, o que isto significa que, di, OK, vai atopar o elemento con ID search_button. E agora temos que elemento real e eu son indo para almacena-lo nun searchButton variable. E agora podemos realmente usar este elemento e cambia-lo, ou acceder os seus valores, cousas así. Podemos realmente comezar a involucrarse coa páxina web. Entón aquí digo: OK, agora que eu teño ese botón, cando é premendo, chamar esa función anónima. Polo tanto, este é o lugar onde anónimo funcións chegar a ser útil. E o que fai a función de facer? Ben, el só chama iso función de alerta e di, premeu o botón Buscar. Entón, o que vai pasar se eu vou para onde queira este HTML vive e premo o botón, Vou coller un pouco de fantasía alerta que di que premeu no botón. Así, as cousas para centrar aqui-- document.getElementById recibe un HTML especial elemento co ID dado. E agora podemos definir o que debe ocorrer cando aquel elemento en particular é premendo. Audiencia: Temos que poñer todo isto en? HANNAH Blumberg: Sentímolo? Audiencia: Será que temos que codificar fisicamente todo isto? HANNAH Blumberg: Temos que codificar fisicamente todo isto? Si. Non é este tipo de irritante? Este é un monte de código. Audiencia: Podería importar algo. HANNAH Blumberg: Correcto. Poderíamos usar algo. E en particular-- Oh, é me dicindo que eu teño que ensinar sección. En particular, imos usar a biblioteca jQuery, porque ese era realmente longo e moi aburrido e quero ser capaz de simplifica-lo e facelo máis curto e máis fácil de escribir. Entón jQuery é unha biblioteca JavaScript. Entón JavaScript é a programación linguaxe; jQuery é unha biblioteca. E fai unha morea de cousas máis fáciles. Que fai o cambio e ir adiante un documento HTML moito máis fácil. Fai eventos de manipular máis fácil. Fai a animación máis fácil e fai máis doado Ajax. Entón, imos ir a dous isto agora. Desculpe-me. Antes de facer, algúns sintaxe básica. Isto é o que máis chama a a biblioteca jQuery opinión. Usan esta dólar sign-- ningún sinal de conexión para PHP, inconvenient-- só o nome dunha selector, punto, e, a continuación, unha acción. Entón, imos ver algúns exemplos concretos de que. Entón iso realmente é o mesmo código desde o slide evento. Entón, iso, cousa fea longa convértese en esta cousa moito mellor, menor. Entón, imos tentar romper iso. Este di, OK, jQuery-- esta dólar sign-- jQuery, atopar-me da xanela. Entón ese é o selector. Cando leva, chamar esa función. Entón, iso é todo dentro. Aceptar. Tan lonxe, tan bo? Todo ben. Agora, jQuery, atopar-me o cousa con ID search_button. E o que é premendo, chamar esa función. E entón esa función de exactamente o mesmo. Só ten que facer un pouco de alerta, premeu o botón Buscar. Polo que é moi bo. Realmente condensa e simplifica o noso código. Como eu sabía que é ID search_button e non como clase search_button? Audiencia: hashtag? HANNAH Blumberg: Yeah. Este símbolo de hash, é só como CSS. Entón lembre, con CSS, cando quería escoller algo por ID, utilizouse o sinal de libra. E cando queriamos para seleccionar algo por clase, usamos o punto. Gran. Ten sentido? Entón jQuery se quere só facer a nosa vida máis fácil. Si. Audiencia: Entón, eu estou un pouco confuso como o xeito no que a función anónima funciona. Vostede nomear esta anonymouse función, funcionar? Como se chama? HANNAH Blumberg: Claro. Entón función é só unha palabra clave que di, eu estou a piques de establecer unha función. Audiencia: Oh, Aceptar. HANNAH Blumberg: OK? E, despois, pasalo como un argumento a-- imos dar este um-- interior para a función de clic. Entón, si, para que función, esta función anónima, pasa a ser un argumento real. Entón lembre de JavaScript, que pode tratar funcións como valores. Audiencia: Oh, Aceptar. HANNAH Blumberg: Yeah. Me gusta diso "oh". Niza. Outras preguntas? Equipo? MARIA ZLATKOVA: Good. Bo. HANNAH Blumberg: Awesome. Algúns jQuery útil rápido. Eu non estou indo a ir a través de todos estes. Estes diapositivas será en liña un pouco máis tarde, para que poida comprobar Lo un pouco máis tarde. Pero, basicamente, o xeneral estándar se mantén en que dicimos, OK, hey, jQuery, aquí está o meu selector e, a continuación, aquí está unha acción. E pode facer cousas como acceso a valor dun formulario, acceder algúns HTML, Controlar o que acontece cando o usuario envía un formulario, cousas así. Si. Audiencia: Entón, o exame, nós imos ter saber unha morea de a documentación do jQuery. Así, dado que copiar / pegar o jQuery documentación para a nosa folla de fraude, onde está a liña trazada? Como cantos que necesitamos saber? HANNAH Blumberg: Excelente pregunta. A cuestión é esencialmente dado que Non se pode acceder á documentación do jQuery durante a proba, o que ten que sabe? Non esperamos que veña arriba con algunha función aleatoria que sería de esperar que en Google. Cousas que son xogo xusto é eu faría dicir só unha especie de a sintaxe xeral, poder seleccionar pola ID e por class-- así como CSS. E, a continuación, as funcións reais themself, imos probablemente dicirlle. Si. Audiencia: Entón, cando selecciona por clase significaría punto. HANNAH Blumberg: Si, exactamente. Bo. Cando vostede selecciona por clase, que vai sendo punto no canto do sinal de libra. Si. Audiencia: vostede atravese a diferenza entre a selección por ID e por clase? HANNAH Blumberg: Claro. A diferenza entre seleccionar ID e seleccionando por clase. Así como dixo María a pouco máis cedo, hai só pode haber un elemento HTML cun dato ID mentres clase, ela nos permite agrupar unha morea de diferentes elementos xuntos, así que as cousas que están relacionadas, pero non exactamente o mesmo. Isto responde a pregunta? Impresionante. Si. Audiencia: E se ten múltiples cousas que están na mesma clase? HANNAH Blumberg: Qué acontece se ten moitas cousas que son da mesma clase? Así, por exemplo, se estamos só usando puro JavaScript, fariamos algo document.getElementsByClass. E entón o que realmente fai é devolve unha matriz de elementos. E ten que quere iterado eles ou atopar un que quere. Non vai dar vostede un único elemento. Vai darlle unha matriz de elementos. Boa pregunta. Algo máis? Impresionante. Entón eu creo que se está familiarizado con calquera jQuery viu no pset, ten que ser bo para ir. Pregunta? Oh, non. Realmente teño que ensinar. Relax. Se ve todo ben. Eu vou chegar alí. Imos falar sobre o Ajax. Entón Ajax será um-- ben, imos comezar co que representa. É un acrónimo. Está a asynchronous JavaScript e XML. E XML é basicamente será [Inaudível] cun tipo de nosos datos. Pero nós realmente non teño usado XML. Pola contra, pode usar JSON. Entón, basicamente, é algunhas data-- asíncrono, JavaScript, e os datos, Neste caso, JSON. E o noso obxectivo, como dixemos un pouco máis cedo, está a ser capaz de facer unha solicitude, ter que facer petición súa cousa no fondo, pero continúan facer o que estabamos pretendendo facer. E entón, cando esa información é listo, así que imos incorpora-lo. Entón, imos ver o que este realmente parece. E iso, ten que ser un pouco familiarizado de pset8, o que acaba de facer en. Entón aquí está o jQuery válido función que poderiamos Quere saber about-- este sinal de dólar. Por iso, di función jQuery, .getJSON. E o que esta función fai é leva un URL e algúns parameters-- entón eu creo que no caso de pset8, era como, a URL eo foi articles.php parámetros era go = algún código postal. E di, OK, facer un pedido á este URL cos parámetros datos. E iso simplemente ocorre. Cando remata, ou é vai completar con éxito ou que vai fallar. Polo tanto, este é o equivalente de chamada Rob e pedirlle para facer algo. E entón cando chama de volta, é tanto vai dicir que eu son feito ou eu fallei. Así, no caso de que vostede está feito, di, OK, eu son feito. E entón chamar esa función. Neste caso, vai ser un función que leva unha información. O que xeralmente se preocupan o datos, os datos que estabamos realmente devolto como consecuencia da chamada .getJSON. E pode facer algo con el. Así, no caso de pset8, eu amosar-lo como unha lista. Fallo será unha función que se chama a solicitude falla por calquera motivo. E no caso de pset8, nós só console.log-lo. Calquera dúbida sobre iso? Si. Audiencia: Podemos simplemente usar a función theta no canto da función, textStatus, jqHXR. HANNAH Blumberg: Claro. Entón, si, creo que no pset, que acabamos de ver datos da función. Entón é só as-- si, Aceptar. Iso é o que vimos no pset. Isto é totalmente bo. Estes son só se quería para sacar máis información, estas son as cousas que podería comezar a partir .getJSON. Boa pregunta. Algo máis? Si. Audiencia: Entón .getJSON é Ajax? HANNAH Blumberg: Aceptar. Polo tanto, este é o tipo de parte complicada. É unha función jQuery que permite facer chamadas asíncrono. E esas chamadas asíncrono, é o que vimos referir como Ajax. Si. Tanto me levou moito tempo para separar cando era estudante. Audiencia: Pode dicir iso de novo? HANNAH Blumberg: Yeah. Podo dicir iso de novo? Esta función .getJSON, é unha función jQuery. E vai facer unha chamada asíncrono. E esas chamadas asíncrono, temos foi referíndose a aqueles como Ajax. Algunha pregunta? Temos só un par de minutos do final. E María vai involucrar-se coa seguridade e entón nós imos sendo practicamente feito. MARIA ZLATKOVA: Awesome, OK. Entón, iso é-- pode ter un par de segundos para ollar sobre iso. E iso non é algo realmente grande. E alguén me pode dicir por que? O que está a suceder en foo e maio podería potencialmente producir algo malo, e que iso se chama? Si. Audiencia: O argumento de que é pasado é máis de 12 caracteres, pode rebosar. MARIA ZLATKOVA: Correcto. Perfecto. Cal é mesmo nome? Acaba de mencionar isto. Audiencia: Buffer overflow. MARIA ZLATKOVA: Yup, estourido de buffer. Entón, iso é algo que nós se refiren como buffer overflow. E vemos que dentro foo, definimos noso buffer, c, cun tamaño de 12. Con todo, no inicio, non o facemos comprobar en calquera forma en todo o xeito que argv1-- foi o segundo argumento. Non comprobar se o de tamaño que é conveniente. Entón, se tivemos unha user especialmente malicioso que poñer en algún argumento de que era máis que 12, e, a continuación, potencialmente alá do que argumento, tiña un código executable que estaba tentando facer algo malo con el; despois diso, o que acontecería, ía substituír o retorno enderezo da función foo, facendo que a función de cando retornando para realizar ese código. E entón as cousas malas poden ocorrer. Será que isto ten sentido para todos? E como podemos protexer contra iso? Algunha suxestión? Basicamente, dentro potencialmente foo, como podemos comprobar a certificar- que iso non pode ocorrer? Audiencia: O tamaño 12 é excedido, ía reservar memoria adicional? MARIA ZLATKOVA: Suxestión é, reservar memoria adicional do tamaño excedido. De feito, podemos facer algo un moito máis simple do que ben. Podemos só obter a lonxitude da corda do argumento de que é ingresaran, comproba que é menos que ou igual a 12-- que é o que queremos que ser, porque nós non queremos Lo a superar os límites da nosa buffer. E entón, se iso non acontecer, nós pode traballar co argumento. E, a continuación, se isto acontecer, queremos realmente para amarelo g potencialmente ao usuario. Pero isto é coma nós faría iso. Si. Audiencia: Podería vostede explicar real rápido memcpy? MARIA ZLATKOVA: Oh, desculpe. Si. Memcpy toma o que quere que é-- moito, Aceptar. Memcpy leva todo o que é no bar, o que quere que é pasado para foo como argumento de liña de comandos. Por iso, vai levar argv1. Argv1 chámase bar aquí. Por iso, vai tomar bar e vai copialo en c. Audiencia: Aceptar. MARIA ZLATKOVA: E vai copy-- terceiro argumento refírese só de canto vai copiar c. Audiencia: Ah. Entón esta é a copia de todo isto, entón. MARIA ZLATKOVA: Si, está copiando todo isto. Yep. En primeiro lugar, asegúrese de que o bar non é igual a nulo, porque iso é un punteiro. Entón comezamos a lonxitude da corda de bar. Temos seguro de que é inferior ou igual a 12. E entón, porque temos seguro, podemos, de feito, memcpy e estar seguro de que está todo OK. Algunha pregunta? Gran. Teño dúas preguntas de verdadeiro ou falso. Alguén me pode dicir inmediatamente se estas son verdadeiras ou falsas? Si, é falsa. Exactamente. Ambos son falsas. Entón, usando unha única contrasinal nunca é realmente unha boa idea porque se alguén sabe a chave, poden simplemente acceder a todas as súas outras contas. E, a continuación, iconas non facer nada para garantir a seguridade. Debemos xeralmente buscan HTTPS no canto de HTTP e URL. E algúns outros tipos de ataques que xa mencionados, que David mencionou en charla, os ataques de inxección SQL. Vimos que, se o don't-- Función de consulta CS50 asegura que SQL ataques de inxección non pode ocorrer. Pero se non estivésemos usando CS50, Cita, pecha comiñas "na consulta," teriamos que estar seguro de que o entrada do usuario non é realmente algunha SQL consulta que fará que todas nosas mesas para ser descartado ou algo de malo pasar co noso banco de datos. Secuestro de sesión é outro tipo de ataque Que pasa cando un mal persoa usa a sesión de algunha vítima ID para acceder a información de inicio de sesión. Así, un exemplo moi trivial de que é como se temos un ordenador público, a continuación, a mala persoa entra e, a continuación, teñen cookies que son gardadas. E as cookies non pasar á sesión. A continuación, ten por vítima entrar e, a continuación, entrar no sitio. As cookies non cambiar para unha determinada sesión. E, a continuación, a vítima accede ao o sitio web e, a continuación, sae. E, a continuación, a persoa que vai cara atrás a continuación, pode aínda utilizar a ID da sesión para acceder a súa información. Entón este é un exemplo de como isto podería ocorrer. E entón eu non me preocuparía moito sobre o código específico ou nada como aquel que podería causar iso, pero ter algún tipo de idea que as variables implicadas neste son. E, a continuación, manipular cabeceira é outro tipo de datos de ataque que ten David falou. E iso só se refire a o que pode ocorrer cando a resposta, o HTTP resposta dentro do noso cabeceira non é higienizado adecuadamente. E calquera dos fields-- por exemplo, Se alguén substitúe un dos cabeceira valores para conter algo máis que o que deben contain-- e, de feito, conter, por exemplo, un 200 Código de estado OK, entón eles podería facer mal intencionado cousas cando non se quere. Pero eu non me preocuparía moito moito sobre o código específico que podería causar este, só unha especie de entendemento de alto nivel cousas así. Eu creo que iso é todo que temos que cubrir. Incrible. Alguén ten algunha dúbida sobre calquera das cousas que nos códigos? Si. Audiencia: Entón unha especie de pregunta máis loxístico. O contido está centrado principalmente para as cousas segundo cuestionario 1? MARIA ZLATKOVA: Entón, pregunta é, é o contido enfocada principalmente para as cousas segundo cuestionario 1? Así, o foco é sobre despois cuestionario 1, con excepción que temos que concentrar en cousas en pset5 e unha morea de as estruturas de datos que nós Cubrimos. E non podemos dicir que nós pode ignorar calquera cousa antes que xa constrúe encima del tamén. Así, o foco en que, ademais de material de pset5 como incluíndo enlaces listas, pilas, colas, e todo que Hannah pasou. HANNAH Blumberg: Correcto. Si, nós fomos sobre todo o material C en principio, moi rapidamente. Pero asegúrese de revisar iso. Vaia cara atrás e ver o quiz 0 avaliación. Un par notas máis loxísticos, só mentres temos a súa atención. Nós imos ter o horario de oficina ambos o luns e martes noite. Eles van estar en MD 119. Isto é todo o sitio, para se non oín-lo, non se preocupe. MARIA ZLATKOVA: 8: 30-11: 00. HANNAH Blumberg: Si, 8: 30-11: 00. Estaremos alí. Estaremos alí para responder preguntas. É moi frío e divertido. Podedes preguntar calquera dúbida que ten no cuestionario 1. E cuestionario 1 é o Mércores, entón boa sorte. Se ten algunha dúbida, quizais vir falar connosco ata aquí one-on-one. Legal. Moitas grazas. MARIA ZLATKOVA: Moitas grazas, rapaces. Audiencia: Yay. [Aplausos]