1 00:00:00,000 --> 00:00:01,940 >> [Música tocando] 2 00:00:01,940 --> 00:00:11,130 3 00:00:11,130 --> 00:00:14,620 >> DAVID MALAN: Este é CS 50, e este é o começo de semana nove. 4 00:00:14,620 --> 00:00:18,240 E o que nós pensamos em fazer hoje não é só fechar o capítulo sobre a da semana passada 5 00:00:18,240 --> 00:00:22,670 material de onde nós nos concentramos em servidor programação web lado com PHP e SQL, 6 00:00:22,670 --> 00:00:23,549 algumas coisas banco de dados. 7 00:00:23,549 --> 00:00:25,590 Vamos falar sobre um pouco de hoje a segurança e, em seguida, 8 00:00:25,590 --> 00:00:29,590 transição para a programação do lado do cliente linguagem conhecida como JavaScript. 9 00:00:29,590 --> 00:00:31,330 Mas, primeiro, alguma redenção. 10 00:00:31,330 --> 00:00:35,030 >> Você deve se lembrar que, em Quarta-feira, eu me propus 11 00:00:35,030 --> 00:00:37,550 para escrever um site que tomou na entrada do usuário 12 00:00:37,550 --> 00:00:41,120 por um código HTML que formam então armazenado que os nomes de entrada do usuário, telefone 13 00:00:41,120 --> 00:00:43,124 números e celular portadores no banco de dados. 14 00:00:43,124 --> 00:00:45,540 E então eu tive um pouco de comando script de linha escrito em PHP 15 00:00:45,540 --> 00:00:47,956 que era para interagir sobre as linhas no banco de dados 16 00:00:47,956 --> 00:00:49,400 e enviar mensagens de texto. 17 00:00:49,400 --> 00:00:53,870 Apesar de várias, várias tentativas, nós não conseguir que o trabalho até o final. 18 00:00:53,870 --> 00:00:57,820 >> Então eu passei toda esta semana de trabalho em que o código para nos levar além do ponto 19 00:00:57,820 --> 00:01:01,220 de onde paramos, em que todos Eu tenho até o final desta quarta-feira 20 00:01:01,220 --> 00:01:05,500 Foi essa mensagem de texto de Margo enquanto eu lutava, 21 00:01:05,500 --> 00:01:09,940 seguido de uma mensagem de texto a partir de outro colega, você tem esse David. 22 00:01:09,940 --> 00:01:14,030 Seguido por este, maravilhosamente estimulante. 23 00:01:14,030 --> 00:01:15,840 Continuei indo, muito animador. 24 00:01:15,840 --> 00:01:20,960 Eu quase consegui até entăo-- e essa é a nota que terminou na quarta-feira. 25 00:01:20,960 --> 00:01:25,850 E então, na verdade, talvez o meu favorito, um momento depois, este entrou. 26 00:01:25,850 --> 00:01:27,000 Porra Assistir jogos. 27 00:01:27,000 --> 00:01:31,080 >> Então, hoje, nós corrigir isso com uma rápida olhar para o que eu tenho feito desde então. 28 00:01:31,080 --> 00:01:35,440 Então, todo esse código está disponível online a partir da semana passada, oito semanas, 29 00:01:35,440 --> 00:01:36,300 código-fonte. 30 00:01:36,300 --> 00:01:39,425 E você vai ver que eu passei, e eu realmente limparam um pouco as coisas. 31 00:01:39,425 --> 00:01:42,080 Eu apresentei um par outro características de um banco de dados SQL. 32 00:01:42,080 --> 00:01:45,300 Por exemplo, em vez de basta fazer transportadora de carvão var 33 00:01:45,300 --> 00:01:47,310 como eu acho que eu fiz na mosca na semana passada. 34 00:01:47,310 --> 00:01:49,820 Eu em vez definiu como o que é chamado um enum. 35 00:01:49,820 --> 00:01:53,310 >> E alguns de vocês podem ter visto esta como nós exploramos C. Enum é realmente 36 00:01:53,310 --> 00:01:56,820 uma característica do C, onde você pode enumerar um monte de constantes 37 00:01:56,820 --> 00:01:59,640 e atribuir-lhes valores automáticos, como um, dois, três, quatro 38 00:01:59,640 --> 00:02:01,330 sem ter os números de código rígido. 39 00:02:01,330 --> 00:02:04,780 Então SQL suporta o mesmo, em que se você tem um campo de banco de dados que você só 40 00:02:04,780 --> 00:02:09,389 quer assumir uma das finita valores, você pode, literalmente, especificá-lo 41 00:02:09,389 --> 00:02:13,120 como eu fiz lá por quatro operadoras de celulares populares dos EUA. 42 00:02:13,120 --> 00:02:13,819 >> Então eu fiz isso. 43 00:02:13,819 --> 00:02:16,610 E eu fiz uma série de mudanças como assim, o mais importante dos quais 44 00:02:16,610 --> 00:02:20,090 foi para se trabalhar e-mail porque recall, que este programa se baseou em que 45 00:02:20,090 --> 00:02:23,470 geralmente chamado de um e-mail para Gateway SMS, que é apenas 46 00:02:23,470 --> 00:02:27,670 uma maneira elegante de dizer que a Verizon, e AT & T e outras pessoas suportar um servidor, 47 00:02:27,670 --> 00:02:30,740 pelo qual se recebe e-mail, ele converte para SMS 48 00:02:30,740 --> 00:02:33,290 e envia um texto mensagem para o telefone de alguém. 49 00:02:33,290 --> 00:02:37,010 Então, se eu fiz isso corretamente, aqui é uma forma nova e melhorada 50 00:02:37,010 --> 00:02:39,259 que vai falar com nova e melhorada de código, que 51 00:02:39,259 --> 00:02:40,300 você pode jogar on-line. 52 00:02:40,300 --> 00:02:44,140 E espero fazer o meu beep telefone em apenas um momento. 53 00:02:44,140 --> 00:02:47,240 >> Então, primeiro, eu vou digitar meu nome. 54 00:02:47,240 --> 00:02:51,400 Em segundo lugar, eu não vou ao fazer isso neste momento. 55 00:02:51,400 --> 00:02:53,920 Eu vou fazer Inspect Element. 56 00:02:53,920 --> 00:02:56,710 E este é apenas um pouca coisa para que eu não faça 57 00:02:56,710 --> 00:02:59,250 criar horas de pós-produção trabalhar como eu fiz da última vez. 58 00:02:59,250 --> 00:03:02,300 Existe agora o meu número de telefone. 59 00:03:02,300 --> 00:03:03,560 >> Vou selecionar Verizon. 60 00:03:03,560 --> 00:03:10,260 E aqui, vamos ligar o microfone aqui, e procurar isso no meu celular aqui. 61 00:03:10,260 --> 00:03:13,130 Vou clique em Register, esperemos que deverá 62 00:03:13,130 --> 00:03:14,530 colocá-lo no banco de dados. 63 00:03:14,530 --> 00:03:16,780 Agora eu estou indo para ir para o programa de linha de comando, que 64 00:03:16,780 --> 00:03:20,825 recall foi chamado barra dot texto, e cruzar os dedos. 65 00:03:20,825 --> 00:03:24,092 66 00:03:24,092 --> 00:03:26,527 Aqui vamos nós. 67 00:03:26,527 --> 00:03:27,501 >> [DINGS TELEFONE] 68 00:03:27,501 --> 00:03:28,962 >> [Aplausos] 69 00:03:28,962 --> 00:03:31,815 70 00:03:31,815 --> 00:03:34,940 DAVID MALAN: Então, mais divertido do que isso- é divertido, é claro, se eu chegar a ele. 71 00:03:34,940 --> 00:03:38,004 Mas é mais divertido, eu pensei que, se nós criado um daqueles momentos de cinema 72 00:03:38,004 --> 00:03:40,420 onde como algo realmente ruim aconteceu no mundo, 73 00:03:40,420 --> 00:03:42,860 e como todas as pessoas da NSA celulares começar a apitar 74 00:03:42,860 --> 00:03:44,860 com mensagens de texto alertando-os para esse facto. 75 00:03:44,860 --> 00:03:47,026 Então eu pensei que iria tentar para recriar o mesmo aqui, 76 00:03:47,026 --> 00:03:49,610 em que não estiver usando um banco de dados, I em vez de antecedência 77 00:03:49,610 --> 00:03:51,490 escreveu um programa que se parece com isso. 78 00:03:51,490 --> 00:03:53,660 >> Esta é uma index.php-- e eu coloquei este código on-line 79 00:03:53,660 --> 00:03:56,710 como bom-- que aparentemente apenas torna form.php, 80 00:03:56,710 --> 00:04:00,990 usando um paradigma de estilo MVC que nós falar com mais detalhes no conjunto de problemas 81 00:04:00,990 --> 00:04:01,650 Sete. 82 00:04:01,650 --> 00:04:02,910 Esse formulário é bastante simples. 83 00:04:02,910 --> 00:04:06,634 Ele vai se submeter a uma arquivo chamado here.php via post. 84 00:04:06,634 --> 00:04:09,300 E isso, aparentemente, vai pedir por um nome e um número de telefone, 85 00:04:09,300 --> 00:04:11,400 e, em seguida, através da assim-chamada Selecione o menu, é 86 00:04:11,400 --> 00:04:14,250 vai dar-lhe pelo menos quatro operadoras de celulares populares dos Estados Unidos, 87 00:04:14,250 --> 00:04:17,470 e, em seguida, permitir que você efetivamente levar atendimento clicando aqui. 88 00:04:17,470 --> 00:04:20,471 >> E aqui, enquanto isso, vai emprestar alguns dos códigos da última vez. 89 00:04:20,471 --> 00:04:22,553 E se você apenas roçar isso, você vai ver que não há 90 00:04:22,553 --> 00:04:23,900 um monte de verificação de erros. 91 00:04:23,900 --> 00:04:26,640 Mas a beleza no fim é que nós não estamos escrevendo para um banco de dados hoje. 92 00:04:26,640 --> 00:04:29,130 Nós estamos mantendo-o simples e apenas o envio de espera 93 00:04:29,130 --> 00:04:32,190 uma mensagem de texto via função I escreveu sobre o passado poucos dias chamada 94 00:04:32,190 --> 00:04:36,270 Texto, que está em funções. php, que é novamente disponível online. 95 00:04:36,270 --> 00:04:38,210 >> Então, se você gostaria de participar desta. 96 00:04:38,210 --> 00:04:40,190 Nós não vamos ser armazenar nada. 97 00:04:40,190 --> 00:04:43,809 Ir para este URL aqui em tempo real. 98 00:04:43,809 --> 00:04:46,850 Não apresentá-lo ainda, mas vamos ver se podemos ter um destes filme 99 00:04:46,850 --> 00:04:49,830 momentos em que o celular de todo mundo começa a apitar, espero apenas 100 00:04:49,830 --> 00:04:53,580 uma vez este ano, ao contrário, em 2011 onde esta deu terrivelmente errado. 101 00:04:53,580 --> 00:04:58,910 E uma vez que você vá para esse endereço, você deve ver uma forma super simples 102 00:04:58,910 --> 00:05:03,884 que se você tem um nome, um telefone celular número, e um veículo que telemóvel 103 00:05:03,884 --> 00:05:06,175 corresponda à lista de lá, vá em frente e preencha o formulário. 104 00:05:06,175 --> 00:05:07,880 Mas não bateu apresentar ainda. 105 00:05:07,880 --> 00:05:10,850 >> O formulário está indo olhar como este. 106 00:05:10,850 --> 00:05:13,660 Vá em frente e digitar seu nome, número de telefone. 107 00:05:13,660 --> 00:05:17,670 Oop, alguém vai à frente da curva. 108 00:05:17,670 --> 00:05:18,170 Está certo. 109 00:05:18,170 --> 00:05:19,340 OK, todo mundo está preenchido o formulário. 110 00:05:19,340 --> 00:05:21,400 Isso deve funcionar em um telefone, também, se você quiser. 111 00:05:21,400 --> 00:05:23,695 Tudo bem, em suas marcas, preparar, vai. 112 00:05:23,695 --> 00:05:24,195 Bata Aqui. 113 00:05:24,195 --> 00:05:27,275 114 00:05:27,275 --> 00:05:27,775 O quê? 115 00:05:27,775 --> 00:05:31,140 116 00:05:31,140 --> 00:05:31,640 Não. 117 00:05:31,640 --> 00:05:34,410 118 00:05:34,410 --> 00:05:40,250 Eu juro por Deus, eu testei isso várias vezes hoje. 119 00:05:40,250 --> 00:05:41,720 Você entendeu? 120 00:05:41,720 --> 00:05:43,145 >> [Interpondo VOZES] 121 00:05:43,145 --> 00:05:46,470 122 00:05:46,470 --> 00:05:49,560 >> DAVID MALAN: OK, talvez o erro do usuário. 123 00:05:49,560 --> 00:05:50,550 Isso é dois. 124 00:05:50,550 --> 00:05:53,300 Ele trabalhou por dois em cada uma algumas centenas, três, quatro. 125 00:05:53,300 --> 00:05:55,940 OK, isso é bom. 126 00:05:55,940 --> 00:05:58,520 Quatro de cinco para exatidão como sobre. 127 00:05:58,520 --> 00:05:59,810 >> Então o que aconteceu? 128 00:05:59,810 --> 00:06:02,727 Assim, presume-se, sem ver o seu telas, por que ele pode ter com erro? 129 00:06:02,727 --> 00:06:05,518 É, provavelmente, que estávamos apenas tentando fazer muitas conexões 130 00:06:05,518 --> 00:06:08,110 ao servidor de correio de Harvard, tudo ao uma vez que a partir do mesmo endereço IP. 131 00:06:08,110 --> 00:06:10,740 Eu estou apenas adivinhando já que eu não fiz tem o luxo de testes 132 00:06:10,740 --> 00:06:13,220 este código com alguns 300 pessoas de antecedência 133 00:06:13,220 --> 00:06:16,040 mas por agora perceber que que, pelo menos, deve 134 00:06:16,040 --> 00:06:18,250 ter começado o trabalho feito neste momento. 135 00:06:18,250 --> 00:06:22,880 >> Tudo bem, então por que tudo isso é o mais pertinente para o que está acontecendo? 136 00:06:22,880 --> 00:06:24,900 Bem, primeiro, uma rápida par de anúncios. 137 00:06:24,900 --> 00:06:29,350 Então um, se você gostaria de se juntar Chang, e Nick, e outros no almoço desta sexta-feira, 138 00:06:29,350 --> 00:06:32,400 fazer de RSVP na URL de costume lá. 139 00:06:32,400 --> 00:06:35,650 Se você está pensando em se concentrar ou fazendo um secundário no CS, 140 00:06:35,650 --> 00:06:38,941 se você é um estudante de segundo ano, ou calouro, ou mesmo júnior ou sênior neste momento 141 00:06:38,941 --> 00:06:42,490 e ainda pode espremer nos cursos, perceber que a escola de engenharia 142 00:06:42,490 --> 00:06:45,620 está recolhendo gratuitamente Ben e Sorvete de Jerry eo conselho 143 00:06:45,620 --> 00:06:48,910 esta quarta-feira logo após a aula em 4:00 no edifício CS 144 00:06:48,910 --> 00:06:49,771 Maxwell em Dworkin. 145 00:06:49,771 --> 00:06:51,520 Se esta for muito rápido na tela, basta ir 146 00:06:51,520 --> 00:06:55,260 para cs50.harvard.edu para uma link para o evento no Facebook 147 00:06:55,260 --> 00:06:57,140 onde você pode ver mais detalhes. 148 00:06:57,140 --> 00:07:01,390 >> Enquanto isso, eu pensei que eu iria corrigir uma outra coisa que eu gozado na quarta-feira. 149 00:07:01,390 --> 00:07:04,400 Acontece que ID de Marcos no Facebook não tinha três anos. 150 00:07:04,400 --> 00:07:05,230 Ele tinha quatro anos. 151 00:07:05,230 --> 00:07:08,330 Acontece que ele tinha mais teste contas do que me lembro. 152 00:07:08,330 --> 00:07:12,400 Mas o que esta me senti como uma oportunidade a fazer é puxar uma URL como esta. 153 00:07:12,400 --> 00:07:16,680 >> Assim, verifica-se que o Facebook tem uma API, Application Programming Interface, 154 00:07:16,680 --> 00:07:20,070 que é um mecanismo através do qual você pode solicitar dados programaticamente 155 00:07:20,070 --> 00:07:24,480 no Facebook e voltar máquina informações legíveis, e não páginas web 156 00:07:24,480 --> 00:07:28,690 mas apenas o texto cru, algo chamado de JavaScript Object Notation. 157 00:07:28,690 --> 00:07:32,150 E, de fato, se eu visitar esta URL, e ampliar, por padrão, 158 00:07:32,150 --> 00:07:34,960 este é Marcos publicamente informação acessível. 159 00:07:34,960 --> 00:07:37,430 >> E o detalhe interessante aqui é apenas que o seu ID 160 00:07:37,430 --> 00:07:40,670 é, de facto, o número de quatro, que I percebi logo que eu fiz isso. 161 00:07:40,670 --> 00:07:44,260 Você pode fazer isso sozinho, se você sabe seu nome de usuário do Facebook, se você tiver um. 162 00:07:44,260 --> 00:07:45,440 Basta digitá-lo em cima lá. 163 00:07:45,440 --> 00:07:46,640 E nada disso é privada. 164 00:07:46,640 --> 00:07:48,670 Eu só estou fazendo isso mesmo no modo de navegação anônima. 165 00:07:48,670 --> 00:07:49,900 Então eu não estou mesmo logado. 166 00:07:49,900 --> 00:07:54,440 E você está vendo que eu aparentemente era o número de usuário 6454 167 00:07:54,440 --> 00:07:56,480 no Facebook, o que não é muito ruim esses dias. 168 00:07:56,480 --> 00:07:59,900 Então, de qualquer forma, você também vai ver informações adicionais lá. 169 00:07:59,900 --> 00:08:02,150 >> E o aspecto útil de que é que você 170 00:08:02,150 --> 00:08:06,890 pode escrever seu próprio software que de alguma forma, integra dados como este 171 00:08:06,890 --> 00:08:08,170 em sua própria aplicação. 172 00:08:08,170 --> 00:08:10,650 Você pode capacitar os usuários para registrar em seu site, 173 00:08:10,650 --> 00:08:14,190 não usar seu próprio nome de usuário personalizada e senha, mas talvez o seu login do Facebook 174 00:08:14,190 --> 00:08:16,170 e obter informações mesmo sobre os seus amigos, 175 00:08:16,170 --> 00:08:18,740 se eles aprovam tal, ou similar. 176 00:08:18,740 --> 00:08:21,430 Assim, note que CS50, também, tem algumas de suas próprias APIs, 177 00:08:21,430 --> 00:08:24,620 um para os dados do catálogo curso, alguns dos menus abraços no jantar 178 00:08:24,620 --> 00:08:26,730 salões, todos do edifícios e locais 179 00:08:26,730 --> 00:08:30,930 no campus, temos uma API para bem que você pode consultar de forma semelhante e obter 180 00:08:30,930 --> 00:08:35,520 dados textual de volta que você pode integrar em um PHP ou JavaScript, ou até mesmo, 181 00:08:35,520 --> 00:08:38,320 embora menos comum, uma C baseada projeto final. 182 00:08:38,320 --> 00:08:41,190 >> Na verdade à frente para a final projeto são alguns marcos. 183 00:08:41,190 --> 00:08:42,980 Você tem um e-mail no outro dia. 184 00:08:42,980 --> 00:08:45,761 Perceba que a proposta é devido esta próxima segunda-feira. 185 00:08:45,761 --> 00:08:49,010 Não é necessariamente obrigatório, mas você precisam receber seus companheiros de ensino 186 00:08:49,010 --> 00:08:51,260 aprovação antes de fazer Quaisquer alterações posteriores. 187 00:08:51,260 --> 00:08:54,280 E, em seguida, à frente são um número de outros marcos. 188 00:08:54,280 --> 00:08:56,542 >> Então, para provocá-lo, também, com algumas possibilidades, 189 00:08:56,542 --> 00:08:58,250 nós temos um monte de estas lâmpadas matiz. 190 00:08:58,250 --> 00:09:01,190 E alguns de vocês já têm algum destes em seu quarto do dormitório também. 191 00:09:01,190 --> 00:09:02,920 E eles também têm uma API. 192 00:09:02,920 --> 00:09:07,300 Assim recordar aquelas semanas lâmpadas binários atrás que Dan Bradley e Ansel 193 00:09:07,300 --> 00:09:08,780 Duff criou para nós. 194 00:09:08,780 --> 00:09:12,560 Eles usaram uma interface de software para esta lâmpada, que no momento 195 00:09:12,560 --> 00:09:15,232 está conectado à energia elétrica e, em seguida, via wireless 196 00:09:15,232 --> 00:09:17,690 está ligado a uma pequena coisa chamado a Ponte aqui em baixo, 197 00:09:17,690 --> 00:09:21,280 como um pequeno proprietário router para este dispositivo em particular. 198 00:09:21,280 --> 00:09:26,540 >> Mas acontece que se eu sei como enviar mensagens de HTTP, como todos nós fazemos agora, 199 00:09:26,540 --> 00:09:31,670 Posso enviar uma mensagem como esta para esta lâmpada para ligá-lo ou desligado 200 00:09:31,670 --> 00:09:34,000 ou fazer qualquer número de outras operações sobre ele. 201 00:09:34,000 --> 00:09:36,110 Observe que não é chegar, não é postar. 202 00:09:36,110 --> 00:09:37,760 Há um outro chamado put. 203 00:09:37,760 --> 00:09:39,630 Na verdade, há algumas outras tais verbos. 204 00:09:39,630 --> 00:09:42,920 Mas repare que há um caminho de lá, reduzir API, slash novo colaborador, 205 00:09:42,920 --> 00:09:44,990 cortar a luz, cortar uma, barra de estado. 206 00:09:44,990 --> 00:09:49,060 >> Isso é, aparentemente, apenas o caminho que a empresa, Philips, 207 00:09:49,060 --> 00:09:51,640 decidiu que você tem que bater com uma solicitação HTTP 208 00:09:51,640 --> 00:09:55,010 se você quiser alterar o estado da lâmpada com a utilização de HTTP 1.1. 209 00:09:55,010 --> 00:09:56,380 Em seguida, observe a linha em branco. 210 00:09:56,380 --> 00:10:00,170 E então, finalmente o que parece ser tipo de uma matriz de alguma sorte, 211 00:10:00,170 --> 00:10:04,730 isso de novo vai ser chamado JavaScript Object Notation, ou Jason. 212 00:10:04,730 --> 00:10:08,000 E o que você vê aqui é que há três pares de valores-chave. 213 00:10:08,000 --> 00:10:09,115 >> Uma chave é chamado. 214 00:10:09,115 --> 00:10:10,990 E seu valor aparentemente vai ser verdade. 215 00:10:10,990 --> 00:10:13,612 O brilho é de 128, o que é algum tipo de int. 216 00:10:13,612 --> 00:10:15,820 E então o tempo de transição é zero, o que é aparentemente 217 00:10:15,820 --> 00:10:17,970 quanto tempo ele vai necessário para transformar essa coisa. 218 00:10:17,970 --> 00:10:19,890 >> Então, agora esta lâmpada está apagada. 219 00:10:19,890 --> 00:10:22,880 Mas, se eu faço exatamente isto-- deixar me ir para uma folha de fraude pouco 220 00:10:22,880 --> 00:10:25,200 que Dan criada em advance-- e eu vou 221 00:10:25,200 --> 00:10:27,920 para ir em frente e copiar o comando a seguir. 222 00:10:27,920 --> 00:10:30,200 Curl, como alguns de vocês poderia ter recolhido em CS50 223 00:10:30,200 --> 00:10:35,080 Discutir é um utilitário como o Telnet, tais que você pode simular as solicitações HTTP, 224 00:10:35,080 --> 00:10:36,360 especificamente coloca. 225 00:10:36,360 --> 00:10:39,710 Eu posso enviar esses dados, especificamente o que acabamos de 226 00:10:39,710 --> 00:10:43,430 viu um momento atrás especificamente para este URL aqui. 227 00:10:43,430 --> 00:10:46,310 E depois da onda está indo para lidar com todos os cabeçalhos necessários 228 00:10:46,310 --> 00:10:47,600 e análise de lá. 229 00:10:47,600 --> 00:10:54,700 >> Então, tudo o que tenho a fazer é copiar este em uma janela de terminal e, em seguida, pressione Enter. 230 00:10:54,700 --> 00:10:56,000 E a lâmpada acende. 231 00:10:56,000 --> 00:10:59,060 E tudo isso é passando por meu computador sem fio 232 00:10:59,060 --> 00:11:01,960 de alguma forma para a ponte, que é, então, a falar com esta lâmpada. 233 00:11:01,960 --> 00:11:02,960 Eu posso fazer outra coisa. 234 00:11:02,960 --> 00:11:07,050 Eu posso fazer essa coisa vai o vermelho, por exemplo. 235 00:11:07,050 --> 00:11:11,040 Eu posso, por exemplo, fazer essa coisa de ir verde. 236 00:11:11,040 --> 00:11:12,220 Eu posso fazê-lo ir azul. 237 00:11:12,220 --> 00:11:14,760 >> E observe em cada uma delas casos, tudo o que eu estou mudando 238 00:11:14,760 --> 00:11:18,540 é o chamado valor de tonalidade de realmente dar-lhe um pouco de cor. 239 00:11:18,540 --> 00:11:20,320 Então deixe-me colar este em bem. 240 00:11:20,320 --> 00:11:21,000 Agora é azul. 241 00:11:21,000 --> 00:11:24,672 >> E você pode fazer ainda mais chique coisas where-- vamos para verde. 242 00:11:24,672 --> 00:11:26,630 E eu poderia fazer isso de Claro que com o meu próprio código. 243 00:11:26,630 --> 00:11:30,670 Mas até mesmo a própria API suporta operações de funky 244 00:11:30,670 --> 00:11:35,510 como este, que agora vai se preocupar nos para os próximos 30 segundos. 245 00:11:35,510 --> 00:11:39,170 >> Então essa é uma amostra do que você pode fazer com uma API, desta vez envolvendo 246 00:11:39,170 --> 00:11:40,010 lâmpadas. 247 00:11:40,010 --> 00:11:42,510 Note que CS50 tem um casal pares de Google de vidro se você 248 00:11:42,510 --> 00:11:45,380 gostaria de abordar algo ao longo essas linhas, Arduino Unos, que 249 00:11:45,380 --> 00:11:48,670 são computadores minúsculos pequenos, essencialmente, em uma placa de circuito pequena 250 00:11:48,670 --> 00:11:50,470 que você pode se conectar fios e outras coisas 251 00:11:50,470 --> 00:11:52,732 e, na verdade, para o controle seu ambiente de mundo real. 252 00:11:52,732 --> 00:11:54,940 E então há um par de novos brinquedos que temos. 253 00:11:54,940 --> 00:11:59,294 Esta literalmente apenas chegou a Outro dia, por correio, um Myo Armband. 254 00:11:59,294 --> 00:12:01,710 E eu pensei que é uma forma de você animado sobre projetos 255 00:12:01,710 --> 00:12:03,720 que você pode usar com este hardware faria 256 00:12:03,720 --> 00:12:08,900 ser para jogar este pequeno clipe que eles usam para burlar pessoas 257 00:12:08,900 --> 00:12:10,500 que estamos agora a viver no futuro. 258 00:12:10,500 --> 00:12:13,494 259 00:12:13,494 --> 00:12:15,490 >> [Música tocando] 260 00:12:15,490 --> 00:13:33,410 261 00:13:33,410 --> 00:13:37,109 >> DAVID MALAN: Então, em apenas algumas semanas, você também pode ser que legal na feira CS50. 262 00:13:37,109 --> 00:13:39,150 Outro dispositivo que nós tem um monte de que estamos 263 00:13:39,150 --> 00:13:42,090 feliz para emprestar para projetos é chamado um controlador de movimento. 264 00:13:42,090 --> 00:13:45,030 Este é um dispositivo USB pouco você se conecta a um computador que 265 00:13:45,030 --> 00:13:47,520 permite que você interaja com seu laptop, Mac ou PC, 266 00:13:47,520 --> 00:13:51,570 como se você tivesse como um Xbox Kinect e realmente fazer movimentos físicos muito 267 00:13:51,570 --> 00:13:54,509 como podemos ver neste visão de futuro. 268 00:13:54,509 --> 00:13:56,505 >> [Música tocando] 269 00:13:56,505 --> 00:15:03,380 270 00:15:03,380 --> 00:15:06,260 >> DAVID MALAN: Então, mesmo se você tiver nenhuma idéia de como algo assim 271 00:15:06,260 --> 00:15:10,050 poderia ser possivelmente inventado ou trabalho em um nível de hardware, não importa. 272 00:15:10,050 --> 00:15:13,520 Mesmo depois de apenas alguns meses de CS50, e uma compreensão de programação 273 00:15:13,520 --> 00:15:19,460 mais geral, e programação web mais recentemente, e depois também APIs, e HTTP, 274 00:15:19,460 --> 00:15:21,830 você terá acesso via APIs de software se você 275 00:15:21,830 --> 00:15:24,680 quero pedir uma delas dispositivos para realmente falar com ele 276 00:15:24,680 --> 00:15:27,180 e não precisa se preocupar com a implementação subjacente 277 00:15:27,180 --> 00:15:30,220 detalhes, o qual é completamente consistente com a noção de estratificação 278 00:15:30,220 --> 00:15:33,610 uma abstração que temos visto ao longo do semestre. 279 00:15:33,610 --> 00:15:37,990 >> Assim também no fim de semana, vi algumas peças de notícias. 280 00:15:37,990 --> 00:15:40,640 Vá primeiro, ir a seminários se gostaria de aprender algo 281 00:15:40,640 --> 00:15:42,160 mais em qualquer número de tópicos. 282 00:15:42,160 --> 00:15:43,340 Consulte o URL lá. 283 00:15:43,340 --> 00:15:45,890 E este foi enviado para me por Chang, que você sabe, 284 00:15:45,890 --> 00:15:47,850 quem está a imprimir o nosso exército de elefantes. 285 00:15:47,850 --> 00:15:49,910 E foi uma manchete como se segue. 286 00:15:49,910 --> 00:15:51,280 Eu tenho pavor da minha nova TV. 287 00:15:51,280 --> 00:15:54,301 Por que eu estou com medo de transformar este coisa e você estaria muito. 288 00:15:54,301 --> 00:15:56,050 Então, nós estamos agora no apontam no semestre, 289 00:15:56,050 --> 00:15:58,860 também, onde mesmo se você tiver a menor de entendimento 290 00:15:58,860 --> 00:16:02,620 de como a web funciona e HTTP, e de segurança, coisas como esta 291 00:16:02,620 --> 00:16:03,980 deve começar a chamar sua atenção. 292 00:16:03,980 --> 00:16:07,450 Mas também, você vai entender se estas coisas são ou não 293 00:16:07,450 --> 00:16:08,430 ameaças reais. 294 00:16:08,430 --> 00:16:10,940 >> Então eu peguei alguns trechos a partir deste artigo aqui. 295 00:16:10,940 --> 00:16:12,540 E a história é a seguinte. 296 00:16:12,540 --> 00:16:14,300 Agora sou o dono da uma nova TV inteligente, que 297 00:16:14,300 --> 00:16:18,470 promete entregar streaming de conteúdo multimídia, jogos, app, 298 00:16:18,470 --> 00:16:21,450 mídias sociais e internet navegação, oh e TV também. 299 00:16:21,450 --> 00:16:24,410 O único problema é que eu sou agora medo de usá-lo, diz o autor. 300 00:16:24,410 --> 00:16:29,592 Você seria, também, se você ler a política de privacidade página 46 para a TV. 301 00:16:29,592 --> 00:16:31,800 A quantidade de dados esta coisa que coleciona é impressionante. 302 00:16:31,800 --> 00:16:35,710 Ele registra onde, quando, como e por quanto tempo você usa a TV. 303 00:16:35,710 --> 00:16:38,190 Estabelece cookies de rastreamento, como já discutimos, 304 00:16:38,190 --> 00:16:40,560 e beacons projetado para detectar quando você tem 305 00:16:40,560 --> 00:16:43,185 determinado conteúdo visto ou uma mensagem de e-mail especial 306 00:16:43,185 --> 00:16:45,230 se você quiser verificar e-mail no seu televisor. 307 00:16:45,230 --> 00:16:48,430 Ele registra os aplicativos que você usar, os sites que você visita, 308 00:16:48,430 --> 00:16:52,280 e como você interage com o conteúdo, fazendo tudo que via a sua TV inteligente. 309 00:16:52,280 --> 00:16:55,470 Também, yet-- creepier essa é a minha addition-- 310 00:16:55,470 --> 00:16:58,140 tem um construído em câmera com reconhecimento facial. 311 00:16:58,140 --> 00:17:01,010 >> O objectivo consiste em fornecer controle por gestos para a TV 312 00:17:01,010 --> 00:17:05,490 e permitem que você faça o login para personalizado conta com o seu rosto. 313 00:17:05,490 --> 00:17:08,940 No lado positivo, as imagens são salvos na TV ao invés de carregado 314 00:17:08,940 --> 00:17:09,940 a um servidor corporativo. 315 00:17:09,940 --> 00:17:12,520 No lado negativo, a internet conexão faz com que toda a TV 316 00:17:12,520 --> 00:17:14,811 vulneráveis ​​a hackers que têm demonstrado a capacidade 317 00:17:14,811 --> 00:17:16,700 para assumir o controle total da máquina. 318 00:17:16,700 --> 00:17:20,880 >> Mais preocupante, como se isso não fosse inteligente o suficiente, é o microfone. 319 00:17:20,880 --> 00:17:23,599 A TV possui uma voz recurso de reconhecimento 320 00:17:23,599 --> 00:17:26,859 que permite aos espectadores controlar a tela com comandos de voz. 321 00:17:26,859 --> 00:17:30,290 Mas o serviço vem com um aviso bastante sinistro. 322 00:17:30,290 --> 00:17:33,030 Por favor, esteja ciente de que se suas palavras faladas incluem 323 00:17:33,030 --> 00:17:36,210 pessoal ou outro sensível informações, que a informação 324 00:17:36,210 --> 00:17:40,310 estarão entre os dados capturados e transmitida a um terceiro. 325 00:17:40,310 --> 00:17:40,870 Entendeu? 326 00:17:40,870 --> 00:17:45,860 Não diga pessoais ou confidenciais coisas na frente da TV. 327 00:17:45,860 --> 00:17:47,280 >> Portanto, este é, na verdade, de verdade. 328 00:17:47,280 --> 00:17:50,530 E é difícil não ver se você ir para a Best Buy ou similares para TVs 329 00:17:50,530 --> 00:17:51,030 nos dias de hoje. 330 00:17:51,030 --> 00:17:52,540 Eles são todos inteligentes de alguma forma. 331 00:17:52,540 --> 00:17:54,740 E eles estão recebendo mais inteligente e mais assustador. 332 00:17:54,740 --> 00:17:57,490 E eles estão simplesmente a coleta de dados de maneiras que nós falamos sobre 333 00:17:57,490 --> 00:18:01,840 e, em seguida, enviá-lo via HTTP ou algum outro protocolo para algum servidor. 334 00:18:01,840 --> 00:18:05,720 >> Portanto, este foi de um artigo de diversão neste site on-line 335 00:18:05,720 --> 00:18:08,940 aqui, que falou sobre a especial bug ou código equivocado 336 00:18:08,940 --> 00:18:11,340 que podemos realmente amarrar para discussão da semana passada. 337 00:18:11,340 --> 00:18:15,730 Portanto, este título era como segue, a história se passa aqui, 338 00:18:15,730 --> 00:18:18,720 Josh Breckman trabalhava para uma empresa que conseguiu um contrato 339 00:18:18,720 --> 00:18:22,390 desenvolver uma gestão de conteúdos sistema, ou CMS como são chamados, 340 00:18:22,390 --> 00:18:24,380 para uma bastante grande site do governo. 341 00:18:24,380 --> 00:18:27,300 Grande parte do projeto envolveu desenvolvimento de um sistema de gerenciamento de conteúdo 342 00:18:27,300 --> 00:18:29,840 para que os funcionários seriam capaz de construir e manter 343 00:18:29,840 --> 00:18:31,877 a constante mudança conteúdo para o seu site. 344 00:18:31,877 --> 00:18:34,210 As coisas correram muito bem para poucos dias depois de ir ao vivo. 345 00:18:34,210 --> 00:18:37,020 Mas no sexto dia, as coisas não foram tão bem. 346 00:18:37,020 --> 00:18:39,500 Todo o conteúdo no site tinha desaparecido completamente. 347 00:18:39,500 --> 00:18:42,950 E todas as páginas levou ao padrão, por favor entrar na página web de conteúdo. 348 00:18:42,950 --> 00:18:43,810 Whoops. 349 00:18:43,810 --> 00:18:46,080 Josh foi chamado para investigar e notei 350 00:18:46,080 --> 00:18:49,390 que uma particularmente problemático endereço IP externo teve 351 00:18:49,390 --> 00:18:53,380 ido e excluídos todos o conteúdo no sistema. 352 00:18:53,380 --> 00:18:56,290 >> O endereço IP não pertencia para alguns no exterior hackers dobrado 353 00:18:56,290 --> 00:18:58,340 em destruir útil informações do governo. 354 00:18:58,340 --> 00:19:05,190 Ele resolveu googlebot.com, Muito própria aranha do Google web rastreamento. 355 00:19:05,190 --> 00:19:06,010 Whoops. 356 00:19:06,010 --> 00:19:09,150 Depois de um pouco de pesquisa e lutando em torno de encontrar um backup noncorrupt, 357 00:19:09,150 --> 00:19:10,180 Josh encontrou o problema. 358 00:19:10,180 --> 00:19:12,700 >> Um usuário tinha copiado e colado algum conteúdo de um 359 00:19:12,700 --> 00:19:15,670 página para outra, incluindo um Edit Hyperlink 360 00:19:15,670 --> 00:19:17,577 para editar o conteúdo da página. 361 00:19:17,577 --> 00:19:20,160 Normalmente isto não seria um questão, uma vez que um usuário faria fora 362 00:19:20,160 --> 00:19:24,320 necessário digitar um nome e uma senha, mas o sistema de autenticação CMS, 363 00:19:24,320 --> 00:19:27,520 o sistema de login, não levou em conta 364 00:19:27,520 --> 00:19:30,980 pirataria sofisticado técnicas de Google Aranha. 365 00:19:30,980 --> 00:19:31,700 Whoops. 366 00:19:31,700 --> 00:19:33,610 >> Como se vê, o Google A aranha não usar 367 00:19:33,610 --> 00:19:36,950 cookies, que significa que ele pode facilmente contornar um cheque para a 368 00:19:36,950 --> 00:19:39,840 é registrado no set cookie para ser falsa. 369 00:19:39,840 --> 00:19:42,620 Também não prestar atenção a JavaScript, que normalmente 370 00:19:42,620 --> 00:19:45,170 solicitar e redirecionar os usuários que não está logado. 371 00:19:45,170 --> 00:19:48,610 Isto, contudo, seguir cada hyperlink em cada página que encontra, 372 00:19:48,610 --> 00:19:51,700 incluindo aqueles com Excluir página no título. 373 00:19:51,700 --> 00:19:52,650 Whoops. 374 00:19:52,650 --> 00:19:56,070 >> Então o que é que isto significa em mais termos técnicos, mas bastante acessíveis? 375 00:19:56,070 --> 00:19:58,340 Significa apenas que em todo o seu site, 376 00:19:58,340 --> 00:20:02,287 eles tinham URLs não muito diferente deste que você pode ver no conjunto de problemas sete. 377 00:20:02,287 --> 00:20:04,620 Lembre-se no conjunto de problemas de sete ou conhecem em conjunto de problemas de sete 378 00:20:04,620 --> 00:20:06,411 que você está desafiado, entre outras coisas, 379 00:20:06,411 --> 00:20:08,570 para vender ações em nome dos usuários. 380 00:20:08,570 --> 00:20:14,010 Mas a implementação desse recurso por meio de obter através de hiperlinks em seu usuário 381 00:20:14,010 --> 00:20:16,880 interface, provavelmente não a idéia mais inteligente 382 00:20:16,880 --> 00:20:20,300 porque se o site é de alguma forma acessíveis, quer por um ser humano 383 00:20:20,300 --> 00:20:23,577 quem está clicando em torno ou comprar um bot como o Google ou a Spider 384 00:20:23,577 --> 00:20:26,160 como são chamados isso é apenas rastreamento da web tentando índice 385 00:20:26,160 --> 00:20:29,060 a web como um motor de busca, que podiam muito facilmente 386 00:20:29,060 --> 00:20:31,340 atingido através de obter este tipo de URL. 387 00:20:31,340 --> 00:20:33,770 E isso é funcionalmente equivalente a, neste caso, 388 00:20:33,770 --> 00:20:37,000 venda de todas as ações da Google. 389 00:20:37,000 --> 00:20:40,030 >> Agora, francamente, é completamente asinino que o CMS 390 00:20:40,030 --> 00:20:43,240 Usado JavaScript e os cookies para implementar o seu sistema de login 391 00:20:43,240 --> 00:20:47,100 e não fazendo isso do lado do servidor, como vocês fazem e vontade em PSet 7-- 392 00:20:47,100 --> 00:20:49,940 há uma login.php file-- sempre, sempre, 393 00:20:49,940 --> 00:20:52,789 sempre a segurança deve ser feito no lado do servidor, 394 00:20:52,789 --> 00:20:56,080 não no lado do cliente, porque, como esta artigo sugere que você pode e você mesmo 395 00:20:56,080 --> 00:20:59,600 ver, em algum momento, é trivial para um usuário, bom ou mau, 396 00:20:59,600 --> 00:21:02,860 para simplesmente desligar JavaScript para não falar de cookies. 397 00:21:02,860 --> 00:21:06,020 Então essa é a sua WTF diária. 398 00:21:06,020 --> 00:21:07,970 >> Há mais um, que é apenas um pouco assustador, 399 00:21:07,970 --> 00:21:11,360 então eu vou falar que se apenas como uma lição de vida. 400 00:21:11,360 --> 00:21:14,850 Sempre que você usar um aplicativo chamado como Snapchat ou similares 401 00:21:14,850 --> 00:21:19,380 que diz que essas fotos só duram cinco segundo, dez segundos, ou outros enfeites. 402 00:21:19,380 --> 00:21:21,680 Eles são efêmeras que é absolutamente não é o caso. 403 00:21:21,680 --> 00:21:25,670 Como não há nenhuma maneira, digitalmente, para implementar alguma forma de vídeo, 404 00:21:25,670 --> 00:21:30,150 ou imagem, ou textual compartilhar tais que um receptor na outra extremidade 405 00:21:30,150 --> 00:21:31,660 não pode de alguma forma salvar os dados. 406 00:21:31,660 --> 00:21:34,300 >> Na forma mais ingênua, alguém poderia tomar o seu telefone. 407 00:21:34,300 --> 00:21:36,850 E eles têm uma segunda janela 10 enquanto olha para alguma pressão 408 00:21:36,850 --> 00:21:39,410 apenas tomar algum outro telefone e fotografá-lo, obviamente. 409 00:21:39,410 --> 00:21:41,660 Assim, você pode preservar algo digitalmente dessa forma. 410 00:21:41,660 --> 00:21:44,620 Alguns de vocês sabem como tomar screenshots do seu telefone. 411 00:21:44,620 --> 00:21:49,290 Na verdade, se você não sabe isso, perceber que, pelo menos, Snapchat, 412 00:21:49,290 --> 00:21:51,040 e eu acho que outro aplicações nos dias de hoje, 413 00:21:51,040 --> 00:21:53,720 pelo menos dizer se a destinatário tem, na verdade, 414 00:21:53,720 --> 00:21:55,310 tomado um screenshot de sua imagem. 415 00:21:55,310 --> 00:22:00,870 >> Mas pior ainda, esta foi a snappening, como alguém cunhou recentemente, 416 00:22:00,870 --> 00:22:04,680 onde alguns 100.000 snaps tinha sido liberado 417 00:22:04,680 --> 00:22:09,310 no que é chamado um arquivo torrent em vários sites, em última instância. 418 00:22:09,310 --> 00:22:12,000 E estes continham um grupo inteiro de mensagens privadas e posts. 419 00:22:12,000 --> 00:22:15,210 Acontece que a maioria delas benigna, por isso não é o que você poderia esperar. 420 00:22:15,210 --> 00:22:17,580 Mas porque as pessoas tinham utilizado um site de terceiros, 421 00:22:17,580 --> 00:22:20,270 fazer login com sua Snapchat nome de usuário e senha e, em seguida, 422 00:22:20,270 --> 00:22:23,470 salvar todos os seus snaps neste site de terceiros. 423 00:22:23,470 --> 00:22:26,130 E foi esse terceiro site que foi hackeado, 424 00:22:26,130 --> 00:22:30,710 que só quis dizer que alguém descobriu como para obter todos os 100.000 mais dessas imagens 425 00:22:30,710 --> 00:22:33,822 em seu próprio disco rígido para compartilhamento posterior. 426 00:22:33,822 --> 00:22:36,030 Francamente, aqui também, é uma espécie de asinino que Snapchat 427 00:22:36,030 --> 00:22:39,360 é implementado de tal forma que um terceiro pode classificar de interceptação 428 00:22:39,360 --> 00:22:43,310 os dados e que não está ligada à sua próprio aplicativo em execução no telefone. 429 00:22:43,310 --> 00:22:46,947 Mas aqui, também, perceber que estes as coisas não devem pegar você de surpresa, 430 00:22:46,947 --> 00:22:49,030 ou pelo menos não deveria ser uma lição de vida aqui. 431 00:22:49,030 --> 00:22:52,220 Se você gostaria que o técnico detalhes, vá para a URL lá 432 00:22:52,220 --> 00:22:53,570 que está em lâminas de hoje. 433 00:22:53,570 --> 00:23:00,960 Tudo bem, qualquer dúvida sobre lições de vida de hoje no CS? 434 00:23:00,960 --> 00:23:02,710 Desligar isso. 435 00:23:02,710 --> 00:23:04,970 Qualquer coisa em tudo? 436 00:23:04,970 --> 00:23:06,301 Qualquer coisa em tudo? 437 00:23:06,301 --> 00:23:09,050 Eu tenho um monte de gente verificação sua Snapchat ou algo agora. 438 00:23:09,050 --> 00:23:11,690 >> Tudo bem, então SQL, Structured Query Language. 439 00:23:11,690 --> 00:23:12,509 Vamos acabar com isto. 440 00:23:12,509 --> 00:23:14,300 E também, mesmo que estamos apenas arranhando 441 00:23:14,300 --> 00:23:16,310 a superfície desta linguagem, nós vamos dar-lhe 442 00:23:16,310 --> 00:23:18,930 suficiente da língua sob a forma de PSet 7 443 00:23:18,930 --> 00:23:22,140 de modo que você pode enfrentar alguns funcionalidade bastante comum. 444 00:23:22,140 --> 00:23:24,912 Mas percebo que há um casal coisas que não exigem de você, 445 00:23:24,912 --> 00:23:27,120 mas eles estão indo para ser importante vir projetos finais 446 00:23:27,120 --> 00:23:30,760 e, certamente, vêm tornando real sites com usuários reais 447 00:23:30,760 --> 00:23:32,040 É esta decisão design. 448 00:23:32,040 --> 00:23:34,460 >> Acontece que em um banco de dados MySQL, você 449 00:23:34,460 --> 00:23:37,460 ter cachos de opções como os tipos de dados para as colunas 450 00:23:37,460 --> 00:23:41,670 e outras coisas, mas você também tem a escolha de um assim chamado armazenamento 451 00:23:41,670 --> 00:23:44,570 motor para todos os seus dados, o tipo de sistema de arquivos, 452 00:23:44,570 --> 00:23:46,700 se você está familiarizado, para todos os seus dados. 453 00:23:46,700 --> 00:23:48,830 O formato é em última análise, armazenados em? 454 00:23:48,830 --> 00:23:53,300 E o mais comum, talvez, tem sido MyISAM e InnoDB, termos técnicos 455 00:23:53,300 --> 00:23:56,060 que se preocupam com apenas na medida em que tem um 456 00:23:56,060 --> 00:23:58,500 e não se tem o seguinte recurso. 457 00:23:58,500 --> 00:24:00,390 >> Suponha que você tem um pequeno frigorífico dormitório. 458 00:24:00,390 --> 00:24:03,030 E suponha que você e sua companheiro de quarto, que compartilham este frigorífico, 459 00:24:03,030 --> 00:24:04,682 são realmente gostava de leite por exemplo. 460 00:24:04,682 --> 00:24:07,140 E este é, de facto, como o história foi contada para mim caminho de volta 461 00:24:07,140 --> 00:24:10,890 no dia em que eu fiz um curso chamado CS 161 Sistemas Operacionais, que 462 00:24:10,890 --> 00:24:12,580 similarmente explora este tema. 463 00:24:12,580 --> 00:24:13,760 Então você tem este frigorífico. 464 00:24:13,760 --> 00:24:14,630 Você está fora de leite. 465 00:24:14,630 --> 00:24:17,000 E você chegar em casa, seu colega de quarto de ainda na classe ou qualquer outra coisa, 466 00:24:17,000 --> 00:24:19,208 e você decidir eu vou sair e conseguir um pouco de leite. 467 00:24:19,208 --> 00:24:22,630 Então você fecha a geladeira, bloqueio quarto do dormitório, atravessar a rua 468 00:24:22,630 --> 00:24:25,330 a CVS ou onde quer, e obtenha na fila para comprar um pouco de leite. 469 00:24:25,330 --> 00:24:28,960 >> Enquanto isso, seu companheiro de quarto chega em casa de classe, fica em quarto do dormitório, 470 00:24:28,960 --> 00:24:31,802 abre a geladeira, também percebe ooph, estamos fora de leite. 471 00:24:31,802 --> 00:24:33,760 Então ele ou ela fecha a geladeira e, em seguida, acontece 472 00:24:33,760 --> 00:24:35,610 para ir para o outro CVS, que passa a ser 473 00:24:35,610 --> 00:24:38,470 um quarteirão de distância das outras CVS na praça, e entra na fila 474 00:24:38,470 --> 00:24:40,230 lá para obter um pouco de leite. 475 00:24:40,230 --> 00:24:42,524 Agora, é claro, em alguns minutos mais tarde, você tanto voltar, 476 00:24:42,524 --> 00:24:44,690 eo pior de tudo é possível resultados que aconteceu. 477 00:24:44,690 --> 00:24:45,792 Você tem tanto de leite. 478 00:24:45,792 --> 00:24:47,500 E você realmente não como o leite que muito. 479 00:24:47,500 --> 00:24:49,625 Então, um deles é apenas vai azedar em algum ponto. 480 00:24:49,625 --> 00:24:55,941 Então agora você tem uma quantidade excessiva de leite na geladeira, pois tudo por quê? 481 00:24:55,941 --> 00:24:57,072 >> [Inaudível] 482 00:24:57,072 --> 00:24:59,780 DAVID MALAN: Sim, você não fez alguma forma comunicar uns com os outros 483 00:24:59,780 --> 00:25:00,904 que estavam recebendo leite. 484 00:25:00,904 --> 00:25:04,320 Assim, no mais simples dos maneiras no mundo humano, 485 00:25:04,320 --> 00:25:08,390 como você pode evitar essa bobagem cenário aconteça tal 486 00:25:08,390 --> 00:25:09,750 que você só acabar com um. 487 00:25:09,750 --> 00:25:10,840 Texto-los, sim bom. 488 00:25:10,840 --> 00:25:12,877 Mas de que outra? 489 00:25:12,877 --> 00:25:13,460 Post-it. 490 00:25:13,460 --> 00:25:14,626 DAVID MALAN: Um Post-it. 491 00:25:14,626 --> 00:25:17,150 Qualquer forma de comunicação que diz ao seu companheiro de quarto 492 00:25:17,150 --> 00:25:18,670 não ir para a geladeira para o leite. 493 00:25:18,670 --> 00:25:20,440 Eu estou indo para ir reabastecer em meu próprio. 494 00:25:20,440 --> 00:25:22,770 Então você precisa de alguma forma para bloquear este recurso. 495 00:25:22,770 --> 00:25:27,180 Assim, podemos fazer isso- pudermos tipo de arruinar a história e se transformar em uma história de CS 496 00:25:27,180 --> 00:25:30,360 em que pensar nisso como apenas como um variável, que é o armazenamento de algum valor. 497 00:25:30,360 --> 00:25:32,570 E agora, o valor do leite é zero, 498 00:25:32,570 --> 00:25:35,410 que você não quer que seu companheiro de quarto para inspecionar essa variável 499 00:25:35,410 --> 00:25:38,730 e depois tomar uma decisão si mesmo com base no estado da variável 500 00:25:38,730 --> 00:25:42,430 se você estiver no processo de alterar o estado dessa variável. 501 00:25:42,430 --> 00:25:46,140 >> Portanto, uma das linhas de SQL que dar-lhe em PSet especificação 7 502 00:25:46,140 --> 00:25:47,310 é este aqui. 503 00:25:47,310 --> 00:25:49,740 E nós não gastar uma enorme quantidade de tempo falando sobre isso. 504 00:25:49,740 --> 00:25:55,100 Mas acontece que, se você está tentando para comprar algumas ações em CS50 finanças 505 00:25:55,100 --> 00:25:58,000 que você já tem algumas partes de você 506 00:25:58,000 --> 00:26:01,750 quer ser capaz de fazer uma série de coisas juntos instantaneamente. 507 00:26:01,750 --> 00:26:04,360 Você quer ser capaz de efetivamente, em um nível elevado, 508 00:26:04,360 --> 00:26:06,700 verificar tudo bem, se eu quiser para comprar mais ações da grátis, 509 00:26:06,700 --> 00:26:08,780 o que penny stock falar na especificação, 510 00:26:08,780 --> 00:26:10,660 Quero primeiro cheque quantas ações eu tenho. 511 00:26:10,660 --> 00:26:11,810 E suponho que é de cinco anos. 512 00:26:11,810 --> 00:26:14,600 E suponha que eu quero comprar mais 10, eu, em última instância 513 00:26:14,600 --> 00:26:17,069 quer ter 15 partes de estoque. 514 00:26:17,069 --> 00:26:18,360 Então eu tenho que fazer duas perguntas. 515 00:26:18,360 --> 00:26:20,230 Qual é o estado da variável? 516 00:26:20,230 --> 00:26:21,470 Qual é o estado da linha? 517 00:26:21,470 --> 00:26:22,970 Quantas ações eu tenho atualmente? 518 00:26:22,970 --> 00:26:24,636 Então você quer ir em frente e atualizá-lo. 519 00:26:24,636 --> 00:26:27,720 Então esse é o analógico para o leite em que você verifique a linha, 520 00:26:27,720 --> 00:26:30,730 e então você quer atualizá-lo porque se você quiser comprar 10 ações, 521 00:26:30,730 --> 00:26:32,521 você não quer mudar a linha a 10, você 522 00:26:32,521 --> 00:26:35,300 quer mudá-lo para 5 mais de 10 ou, é claro, 15. 523 00:26:35,300 --> 00:26:40,030 >> Esta linha de código garante que estas duas ideias conceptuais 524 00:26:40,030 --> 00:26:42,810 acontecer junto ou não em todos. 525 00:26:42,810 --> 00:26:46,920 Ninguém, incluindo algum outro usuário quem está conectado no mesmo site, 526 00:26:46,920 --> 00:26:49,900 de alguma forma pode interromper a verificação da linha 527 00:26:49,900 --> 00:26:52,960 ea atualização da linha, a selecionar ea atualização se você quiser. 528 00:26:52,960 --> 00:26:57,360 E a sintaxe não é super óbvio, mas esta linha, tempo é o que é, 529 00:26:57,360 --> 00:27:01,150 Assegura que as duas operações verificar a variável ou verificar a linha 530 00:27:01,150 --> 00:27:04,660 e atualizar a linha acontecer atomicamente. 531 00:27:04,660 --> 00:27:06,849 >> Oh, aqui vamos nós de novo. 532 00:27:06,849 --> 00:27:07,890 Mensagem de texto no meu celular. 533 00:27:07,890 --> 00:27:09,954 Então, vamos fazer deste um pouco mais concreto. 534 00:27:09,954 --> 00:27:12,120 Suponha que você não está implementação de uma geladeira, 535 00:27:12,120 --> 00:27:16,400 e você não está implementando PSet 7, mas um banco real, 536 00:27:16,400 --> 00:27:20,000 ou um caixa eletrônico, um caixa automático Machine, em que você de alguma forma 537 00:27:20,000 --> 00:27:22,960 quero ser capaz de capacitar que os usuários transfiram dinheiro 538 00:27:22,960 --> 00:27:24,500 a partir de uma conta para outra. 539 00:27:24,500 --> 00:27:25,100 OK, espere. 540 00:27:25,100 --> 00:27:26,683 Eu vou silenciar isso agora, obrigado. 541 00:27:26,683 --> 00:27:30,450 Por isso, queremos movimentar dinheiro a partir de um número de conta 542 00:27:30,450 --> 00:27:33,600 em uma conta diferente número, especificamente de $ 100. 543 00:27:33,600 --> 00:27:37,690 Portanto, esta é uma espécie de arbitrário exemplo, em que você, a ATM, 544 00:27:37,690 --> 00:27:41,060 pode querer executar dois SQL consultas, subtrair de uma conta, 545 00:27:41,060 --> 00:27:42,430 e adicionar a outra conta. 546 00:27:42,430 --> 00:27:46,766 Mas você quer garantir que estes duas linhas, tanto acontecer ou não em todos. 547 00:27:46,766 --> 00:27:48,640 Você não quer algo ficar interrompido. 548 00:27:48,640 --> 00:27:51,440 Você não fazer alguma má cara inteligente de alguma forma, de pé no Bank of America 549 00:27:51,440 --> 00:27:53,270 com dois caixas eletrônicos em frente dele e de alguma forma 550 00:27:53,270 --> 00:27:55,270 tipo de digitação no comandos ao mesmo tempo, 551 00:27:55,270 --> 00:28:01,230 espero tentando deduzir 200 dólares, em vez de US $ 100 e ter apenas 100 dólares creditados. 552 00:28:01,230 --> 00:28:04,450 Em suma, você quer que isso comportam-se exatamente como você espera. 553 00:28:04,450 --> 00:28:06,540 >> E a maneira de fazer isso em SQL banco de dados é 554 00:28:06,540 --> 00:28:09,350 você envolvê-la no que é chamado de uma transação. 555 00:28:09,350 --> 00:28:14,290 Literalmente em SQL, você pode chamar de CS50 função de consulta com Citação início unquote 556 00:28:14,290 --> 00:28:15,370 transação. 557 00:28:15,370 --> 00:28:18,640 Em seguida, você pode executar qualquer número de consultas SQL subseqüentes, 558 00:28:18,640 --> 00:28:20,870 mas nenhum deles ter efeito sobre o banco de dados 559 00:28:20,870 --> 00:28:25,880 até que você chame consulta entre aspas comprometer-se novamente usando PHP. 560 00:28:25,880 --> 00:28:29,810 E, desta forma, você pode garantir que mesmo se você tiver 1.000 usuários todos 561 00:28:29,810 --> 00:28:32,080 bater seu banco de dados ao mesmo tempo, o SQL 562 00:28:32,080 --> 00:28:34,540 prometo que estes duas consultas serão 563 00:28:34,540 --> 00:28:36,740 implementado um logo após o outro. 564 00:28:36,740 --> 00:28:40,330 Então você não acabar com o excesso de leite ou a quantidade errada, em última instância, 565 00:28:40,330 --> 00:28:40,830 de dinheiro. 566 00:28:40,830 --> 00:28:43,110 >> Portanto, manter isso em mente, não tanto para PSet 7 567 00:28:43,110 --> 00:28:45,250 mas para projetos finais se você é realmente 568 00:28:45,250 --> 00:28:49,690 tentando mover os dados através de tabelas como você pode aqui. 569 00:28:49,690 --> 00:28:53,980 Mas talvez ainda mais simples e mais óbvia para entender com um exemplo 570 00:28:53,980 --> 00:28:54,860 é este aqui. 571 00:28:54,860 --> 00:28:57,760 E alguém tiver falado sobre isso só no outro dia 572 00:28:57,760 --> 00:28:59,600 quando ele viu algo semelhante online. 573 00:28:59,600 --> 00:29:03,480 >> Então, para meu conhecimento, o sistema de pino não é vulnerável a este ataque. 574 00:29:03,480 --> 00:29:06,637 E eu não tenho idéia se ele mesmo os usos o banco de dados SQL debaixo do capô. 575 00:29:06,637 --> 00:29:08,470 Mas vamos usá-lo para a causa da discussão. 576 00:29:08,470 --> 00:29:10,178 Aqui é a tela que Pessoas tendem Harvard 577 00:29:10,178 --> 00:29:13,620 para ver quando efetuar o login com o seu Número Harvard ID e seu pino. 578 00:29:13,620 --> 00:29:19,020 E suponha que o sistema de pinos foram implementado em PHP e com um MySQL 579 00:29:19,020 --> 00:29:22,000 banco de dados, o código que alguém anos poderia ter escrito atrás 580 00:29:22,000 --> 00:29:23,270 pode ter esta aparência. 581 00:29:23,270 --> 00:29:25,230 Primeiro, declare um chamada variável username. 582 00:29:25,230 --> 00:29:27,560 E só começar a partir de o superglobal POST. 583 00:29:27,560 --> 00:29:30,140 Em seguida, obter uma outra variável chamado senha e fazer o mesmo. 584 00:29:30,140 --> 00:29:33,080 E depois é só executar esta longa consulta aqui, 585 00:29:33,080 --> 00:29:36,690 selecione estrela dos usuários ONDE nome de usuário é igual a tal e tal 586 00:29:36,690 --> 00:29:38,510 ea senha é igual a tal e tal. 587 00:29:38,510 --> 00:29:40,660 >> Observe que o encaracolado chaves eu usei aqui 588 00:29:40,660 --> 00:29:42,880 significa apenas para PHP, ir frente e substituto 589 00:29:42,880 --> 00:29:45,400 o valor dos dois variáveis ​​ali mesmo. 590 00:29:45,400 --> 00:29:50,090 Eles não são estritamente necessários, mas eles tendem a evitar erros de sintaxe sutis. 591 00:29:50,090 --> 00:29:53,650 Então, isso parece completamente correta à primeira vista. 592 00:29:53,650 --> 00:29:54,240 E é. 593 00:29:54,240 --> 00:29:56,680 Você poderia implementar o sistema de pinos desta forma. 594 00:29:56,680 --> 00:30:00,460 >> Mas suponhamos que um super aluno inteligente e malicioso 595 00:30:00,460 --> 00:30:03,020 input este como seu pino. 596 00:30:03,020 --> 00:30:05,550 Então eu removi a bala sinais aqui no mock-up, 597 00:30:05,550 --> 00:30:08,760 e eu realmente revelado o que ele ou ela pode ser de digitação. 598 00:30:08,760 --> 00:30:10,350 E é um pouco estranho. 599 00:30:10,350 --> 00:30:13,850 Mas o que salta à vista na potencialmente preocupante sobre a entrada do usuário, 600 00:30:13,850 --> 00:30:16,450 mesmo se você não tem idéia do que um ataque de injeção SQL significa. 601 00:30:16,450 --> 00:30:20,300 Por que isso parece um pouco suspeito? 602 00:30:20,300 --> 00:30:21,050 O que é isso? 603 00:30:21,050 --> 00:30:21,550 [Inaudível] 604 00:30:21,550 --> 00:30:24,260 DAVID MALAN: A ou é um pouco suspeito. 605 00:30:24,260 --> 00:30:26,310 Na verdade, isso é uma palavra-chave de SQL. 606 00:30:26,310 --> 00:30:28,105 Então, isso não augura nada de bom. 607 00:30:28,105 --> 00:30:29,980 O fato de que há todas essas aspas simples 608 00:30:29,980 --> 00:30:32,646 há-- de fato, um dos mais fáceis maneiras de quebrar alguns bancos de dados 609 00:30:32,646 --> 00:30:35,880 é digitando um nome como O'Reilly que tem um apóstrofo nele 610 00:30:35,880 --> 00:30:38,600 porque se o ser humano que escreveu o código por trás das cenas 611 00:30:38,600 --> 00:30:41,570 não leva em conta que há pode ser aspas simples em um usuário de 612 00:30:41,570 --> 00:30:45,060 entrada, e ele ou ela está usando aspas simples no seu código, 613 00:30:45,060 --> 00:30:46,040 coisas ruins podem acontecer. 614 00:30:46,040 --> 00:30:47,870 >> Na verdade, pior ainda, considerar isso. 615 00:30:47,870 --> 00:30:50,600 Se esta foi mais uma vez o código que alguém no ano de Harvard 616 00:30:50,600 --> 00:30:53,100 atrás escrevi para o pin sistema, observe o que é 617 00:30:53,100 --> 00:30:56,220 prestes a ser substituído nome de usuário e senha 618 00:30:56,220 --> 00:30:59,780 se o usuário digitar novamente skroob como seu nome de usuário 619 00:30:59,780 --> 00:31:03,960 e, em seguida, um, dois, três, quatro, cinco, Citação ou entre aspas um igual 620 00:31:03,960 --> 00:31:04,660 citar um. 621 00:31:04,660 --> 00:31:07,220 E observe o que é fundamental aqui é o usuário não 622 00:31:07,220 --> 00:31:09,900 começou a sua senha ou o pino com uma citação. 623 00:31:09,900 --> 00:31:12,610 E não terminou com uma citação porque ele ou ela 624 00:31:12,610 --> 00:31:16,315 é assumindo que se o programador não era tão acentuada, 625 00:31:16,315 --> 00:31:18,690 eles vão ter aqueles aspas simples no seu código. 626 00:31:18,690 --> 00:31:19,860 >> Então, aqui está o código. 627 00:31:19,860 --> 00:31:23,820 E que a substituição agora pode acontecer é isso. 628 00:31:23,820 --> 00:31:26,350 E eu tenho sublinhado que o usuário digitou no. 629 00:31:26,350 --> 00:31:28,480 Então, antes, depois. 630 00:31:28,480 --> 00:31:33,330 E observe o que é ligeiramente preocupante agora sobre a metade direita deste código SQL? 631 00:31:33,330 --> 00:31:36,300 É um pouco mais complexo, é certo, que as consultas que já vimos. 632 00:31:36,300 --> 00:31:38,550 Mas isso não pode, possivelmente, ser uma coisa boa se você estiver 633 00:31:38,550 --> 00:31:42,240 dizendo selecione estrela, que é selecionar tudo da mesa do usuário 634 00:31:42,240 --> 00:31:46,630 onde username é igual skroob e senha é igual a um, dois, três, quatro, 635 00:31:46,630 --> 00:31:49,610 cinco ou um é igual a um. 636 00:31:49,610 --> 00:31:53,860 Qual é a implicação lógica de que a última cláusula presumivelmente? 637 00:31:53,860 --> 00:31:55,650 É só sempre é verdade. 638 00:31:55,650 --> 00:31:59,930 >> E porque nós temos uma espécie de adivinhou ou descobri por tentativa e erro 639 00:31:59,930 --> 00:32:02,760 que o programador que escreveu este código não 640 00:32:02,760 --> 00:32:07,250 antecipar uma pessoa humana ou ruim escrevendo entre aspas simples, bem como, 641 00:32:07,250 --> 00:32:10,350 podemos sintaticamente concluir a consulta SQL 642 00:32:10,350 --> 00:32:12,260 com algo sem sentido mas algo que 643 00:32:12,260 --> 00:32:15,930 é sintaticamente incorreto que sempre avalia a verdade. 644 00:32:15,930 --> 00:32:19,130 Portanto, se esse código está sendo usado para responder a questão verdadeira ou falsa deve 645 00:32:19,130 --> 00:32:22,930 esse usuário permissão para passar, o resposta é sempre, aparentemente, vai 646 00:32:22,930 --> 00:32:26,930 para ser verdade, porque isso sempre vai para selecionar algo do banco de dados 647 00:32:26,930 --> 00:32:29,280 porque um é claro, sempre é igual a um. 648 00:32:29,280 --> 00:32:30,360 >> Então, qual é a solução? 649 00:32:30,360 --> 00:32:33,290 Bem em PSet 7, nós realmente evitar tudo isso junto. 650 00:32:33,290 --> 00:32:37,360 Damos-lhe uma função de consulta, e nós incentivá-lo a usar pontos de interrogação 651 00:32:37,360 --> 00:32:40,430 como marcadores de posição, semelhante em espírito à de printf% s, 652 00:32:40,430 --> 00:32:43,710 mas o que é importante sobre os pontos de interrogação aqui é se você realmente ler 653 00:32:43,710 --> 00:32:46,950 functions.php, onde a nossa função de consulta for implementada, 654 00:32:46,950 --> 00:32:52,780 esses pontos de interrogação são escapou, em que nada potencialmente perigoso 655 00:32:52,780 --> 00:32:58,210 como uma única citação está ligado em uma única citação escapou. 656 00:32:58,210 --> 00:33:00,590 >> Então, isso é o que é realmente está acontecendo, se você 657 00:33:00,590 --> 00:33:04,850 utilizar a função de consulta do CS50 ou qualquer número de terceiros bibliotecas livres que 658 00:33:04,850 --> 00:33:06,000 fazer o mesmo. 659 00:33:06,000 --> 00:33:09,850 Não importa, neste caso, em verde, se o usuário tiver digitado em uma única citação 660 00:33:09,850 --> 00:33:12,070 porque a consulta função que escrevemos é 661 00:33:12,070 --> 00:33:15,120 indo para adicionar barras invertidas antes qualquer citação tão perigosa. 662 00:33:15,120 --> 00:33:17,360 Portanto, este não é, de verdade, vai ser legal. 663 00:33:17,360 --> 00:33:20,910 Isto é como digitar um louco procurando senha que é, é claro, não vai 664 00:33:20,910 --> 00:33:23,490 ser real senha da skroob. 665 00:33:23,490 --> 00:33:28,260 >> Assim, o takeaway para CS50 é um, absolutamente sempre usar algo 666 00:33:28,260 --> 00:33:30,860 como função de consulta do CS50 ou a biblioteca subjacente, 667 00:33:30,860 --> 00:33:32,560 que passa a ser chamado de PDO. 668 00:33:32,560 --> 00:33:35,880 Mas nunca, nunca, nunca fazer um código como este 669 00:33:35,880 --> 00:33:39,472 sem escapar ou esfregar como dizem seus insumos. 670 00:33:39,472 --> 00:33:42,430 E você, em algum momento, provavelmente, se deparar com algum site como este. 671 00:33:42,430 --> 00:33:46,060 De facto, parece ser o caso como em aeroportos e hotéis em lugares 672 00:33:46,060 --> 00:33:48,880 onde eles têm acesso Wi-Fi acesso que você precisa se logar para, 673 00:33:48,880 --> 00:33:51,010 esses sites são sempre horrivelmente implementadas. 674 00:33:51,010 --> 00:33:55,680 E assim, uma espécie de divertimento em casa exercício, não para fins maliciosos ou mais 675 00:33:55,680 --> 00:33:59,170 de um divertimento na estrada exercício, é só digitar 676 00:33:59,170 --> 00:34:02,850 um apóstrofo, aspas simples, em um formulário em algum site 677 00:34:02,850 --> 00:34:03,810 e ver o que acontece. 678 00:34:03,810 --> 00:34:06,660 E se o servidor trava ou dá você algum tipo de mensagem de erro, 679 00:34:06,660 --> 00:34:09,690 ele pode muito bem ser que alguém não tenha previsto isso. 680 00:34:09,690 --> 00:34:15,239 E então você deve alertar o bom autoridades e ir adiante. 681 00:34:15,239 --> 00:34:20,843 >> Então agora vocês devem espero entender um pouco mais humor do geek aqui. 682 00:34:20,843 --> 00:34:24,120 >> [Risos] 683 00:34:24,120 --> 00:34:27,571 684 00:34:27,571 --> 00:34:29,070 DAVID MALAN: Você sabe que você é um geek. 685 00:34:29,070 --> 00:34:30,944 Para a próxima vários anos, você vai se lembrar 686 00:34:30,944 --> 00:34:33,520 mesinhas que Bobby é por causa deste desenho animado aqui. 687 00:34:33,520 --> 00:34:36,760 Portanto, manter isso em mente ao mudança de contexto uma última vez 688 00:34:36,760 --> 00:34:38,770 hoje para JavaScript. 689 00:34:38,770 --> 00:34:41,600 Passamos relativamente pouco tempo sobre a sintaxe do PHP 690 00:34:41,600 --> 00:34:43,440 porque é realmente Super semelhante a C. 691 00:34:43,440 --> 00:34:47,300 E bem o suficiente, JavaScript também é super semelhante à sintaxe do C 692 00:34:47,300 --> 00:34:49,639 bem como veremos na apenas um momento e como nós vamos 693 00:34:49,639 --> 00:34:51,205 veja no final desta semana, em particular. 694 00:34:51,205 --> 00:34:54,080 O que você pode fazer com esta linguagem, no entanto, é ainda mais poderosa, 695 00:34:54,080 --> 00:34:55,790 especialmente com APIs. 696 00:34:55,790 --> 00:34:56,960 >> Mas, primeiro, um rápido passeio. 697 00:34:56,960 --> 00:35:00,450 Então, um, em JavaScript, não há nenhuma função principal, que é bom. 698 00:35:00,450 --> 00:35:02,650 Tal como acontece com PHP, você pode apenas escrever código. 699 00:35:02,650 --> 00:35:04,310 Condições parecido com este. 700 00:35:04,310 --> 00:35:07,100 E expressões booleanas pode parecido com este ou como este. 701 00:35:07,100 --> 00:35:09,530 Existem interruptores, e eles pode ter esta aparência. 702 00:35:09,530 --> 00:35:10,970 Quatro voltas parecido com este. 703 00:35:10,970 --> 00:35:12,390 Enquanto laços parecido com este. 704 00:35:12,390 --> 00:35:14,160 Faça whiles parecido com este. 705 00:35:14,160 --> 00:35:16,850 E então matrizes parecido isso, muito semelhante ao PHP. 706 00:35:16,850 --> 00:35:20,740 Mas note, que em JavaScript você declarar uma variável não com um dólar 707 00:35:20,740 --> 00:35:25,190 assinar, não com um tipo de dados, mas, literalmente, dizendo var para a variável antes. 708 00:35:25,190 --> 00:35:27,900 Ele também é vagamente digitado na medida em que tem tipos, 709 00:35:27,900 --> 00:35:29,729 mas você não declará-los explicitamente. 710 00:35:29,729 --> 00:35:31,520 E então uma corda, para exemplo, pode parecer 711 00:35:31,520 --> 00:35:34,350 assim, essa string sendo chamado s neste caso. 712 00:35:34,350 --> 00:35:35,410 E em seguida, um objecto. 713 00:35:35,410 --> 00:35:37,010 E estes, vamos ver mais em pouco tempo. 714 00:35:37,010 --> 00:35:41,470 E um objeto é talvez um dos mais comumente visto estruturas de dados 715 00:35:41,470 --> 00:35:44,050 baseada em um JavaScript programa porque permite 716 00:35:44,050 --> 00:35:46,680 associar arbitrária pares de chaves de valor apenas 717 00:35:46,680 --> 00:35:51,240 como matrizes associativas do PHP e, assim como sua própria tabela hash 718 00:35:51,240 --> 00:35:54,042 ou tentar, implementamos algumas semanas atrás. 719 00:35:54,042 --> 00:35:56,250 Então, vamos ver o que realmente podemos fazer com JavaScript. 720 00:35:56,250 --> 00:35:59,410 E, em particular, esta é um rol de características 721 00:35:59,410 --> 00:36:02,300 que os navegadores têm que nos permitem ligar JavaScript 722 00:36:02,300 --> 00:36:05,470 em um site da seguinte maneira. 723 00:36:05,470 --> 00:36:09,340 JavaScript é frequentemente utilizado como um lado do cliente linguagem de script. 724 00:36:09,340 --> 00:36:10,130 Não é compilado. 725 00:36:10,130 --> 00:36:11,370 Ele também é interpretada. 726 00:36:11,370 --> 00:36:15,740 Mas ao contrário de PHP, que foi executado no servidor, no servidor web, 727 00:36:15,740 --> 00:36:18,220 ou no fundo do clientes, JavaScript 728 00:36:18,220 --> 00:36:22,190 é diferente na medida em que ele geralmente é executado no navegador. 729 00:36:22,190 --> 00:36:26,060 >> Assim, qualquer código JavaScript que você começar a escrever para PSet 8, ou o seu projeto final, 730 00:36:26,060 --> 00:36:29,890 ou no mundo real vai geralmente para ser salvo no servidor, absolutamente 731 00:36:29,890 --> 00:36:33,110 em um ponto ou um ponto de HTML JS para o arquivo JavaScript. 732 00:36:33,110 --> 00:36:35,770 Mas o navegador vai baixar que o JavaScript 733 00:36:35,770 --> 00:36:39,530 código a sua própria instância do Chrome, ou IE, ou Firefox, ou o que quer. 734 00:36:39,530 --> 00:36:43,870 E o código é realmente vai começar executado dentro de seu próprio browser. 735 00:36:43,870 --> 00:36:46,560 Apenas para tornar isso mais real, vamos ver isso de forma concreta. 736 00:36:46,560 --> 00:36:50,120 >> Nós não temos idéia do que este código faz sem realmente ler através dela. 737 00:36:50,120 --> 00:36:52,670 Mas deixe-me ir para Facebook.com sem efetuar login. 738 00:36:52,670 --> 00:37:00,440 Deixe-me ir para Inspect Element e ir, digamos, Rede e recarregue a página. 739 00:37:00,440 --> 00:37:04,150 E nós vamos see-- deixe-me mudar Recarregar o Página para obter todos os pedidos para o novo. 740 00:37:04,150 --> 00:37:08,850 E o primeiro arquivo que eu vejo é CSS, CSS. 741 00:37:08,850 --> 00:37:10,880 Aqui está a primeira JavaScript arquivo, e eu tenho 742 00:37:10,880 --> 00:37:14,600 nenhuma idéia do que isto significa, mas aqui é parte do código JavaScript 743 00:37:14,600 --> 00:37:16,180 que impulsiona Facebook. 744 00:37:16,180 --> 00:37:18,400 Não é mesmo verdade que revelando para ampliar. 745 00:37:18,400 --> 00:37:20,260 Ele ainda é tão sem sentido. 746 00:37:20,260 --> 00:37:24,341 >> Mas você vai ver, mesmo em baixo, há ainda mais desses arquivos JavaScript. 747 00:37:24,341 --> 00:37:24,840 Whoops. 748 00:37:24,840 --> 00:37:25,440 Isso é um ping. 749 00:37:25,440 --> 00:37:28,550 Vamos descer um pouco ainda mais, ainda mais, ainda mais. 750 00:37:28,550 --> 00:37:29,894 Há um. 751 00:37:29,894 --> 00:37:31,238 Há um. 752 00:37:31,238 --> 00:37:31,880 Há um. 753 00:37:31,880 --> 00:37:35,820 >> Assim, mesmo que o Facebook, por trás da cenas, está escrito em parte em PHP 754 00:37:35,820 --> 00:37:39,100 e versão própria do mesmo do Facebook, há uma enorme quantidade de JavaScript. 755 00:37:39,100 --> 00:37:41,330 Na verdade, qualquer um dos conversando que você faz no Facebook, 756 00:37:41,330 --> 00:37:45,520 qualquer uma das atualizações em linha cronograma que acontecer em tempo real, de que todos 757 00:37:45,520 --> 00:37:47,944 é conduzido por JavaScript. 758 00:37:47,944 --> 00:37:48,444 Sim? 759 00:37:48,444 --> 00:37:50,235 >> AUDIÊNCIA: Eu não tenho certeza se este é o Facebook, 760 00:37:50,235 --> 00:37:53,624 mas eu pensei que o Facebook desenvolveu sua própria língua código in-house? 761 00:37:53,624 --> 00:37:54,540 DAVID MALAN: Eles fizeram. 762 00:37:54,540 --> 00:37:58,110 Então é por isso que eu digo uma variação de PHP chamado Hip Hop que eles realmente 763 00:37:58,110 --> 00:38:03,440 recursos adicionais para tal que quando Mark implementado pela primeira vez o Facebook, 764 00:38:03,440 --> 00:38:04,710 estava escrito em PHP. 765 00:38:04,710 --> 00:38:07,370 E esse tipo de tem-se mantido o tipo de linguagem front-end 766 00:38:07,370 --> 00:38:09,030 que eles usam para muito da sua codificação, mas ele 767 00:38:09,030 --> 00:38:11,870 não tem sido uma linguagem que é escalas particularmente bem a bilhões 768 00:38:11,870 --> 00:38:12,630 de pessoas. 769 00:38:12,630 --> 00:38:15,300 E assim eles foram adicionados a sua própria melhorias nos bastidores. 770 00:38:15,300 --> 00:38:17,049 E eles usam qualquer número de outras línguas 771 00:38:17,049 --> 00:38:19,170 para várias peças de sua infra-estrutura. 772 00:38:19,170 --> 00:38:24,080 Então, sim, é uma variação de o que hoje conhecemos como PHP. 773 00:38:24,080 --> 00:38:26,610 >> Então, vamos dar uma olhada em um par de exemplos 774 00:38:26,610 --> 00:38:28,890 de como podemos usar JavaScript aqui. 775 00:38:28,890 --> 00:38:32,530 No código-fonte de hoje, temos um grupo de ficheiros, o primeiro dos quais, 776 00:38:32,530 --> 00:38:34,090 vamos chamado DOM zero. 777 00:38:34,090 --> 00:38:36,770 Então DOM de zero tem a seguinte aparência. 778 00:38:36,770 --> 00:38:40,730 Deixe-me ir para este diretório e abrir domzero.html, 779 00:38:40,730 --> 00:38:44,970 o topo do qual tem um tipo de documento declaração, dizendo que aqui vem HTML 5. 780 00:38:44,970 --> 00:38:46,440 E agora aqui está uma tag HTML. 781 00:38:46,440 --> 00:38:47,540 Aqui está a tag cabeça. 782 00:38:47,540 --> 00:38:49,210 E aqui está o que há de novo hoje. 783 00:38:49,210 --> 00:38:52,620 >> Agora temos uma tag script dentro da cabeça da página. 784 00:38:52,620 --> 00:38:55,290 E isso, aparentemente, faz muito pouco, mas aviso 785 00:38:55,290 --> 00:38:58,410 que eu tenha definido um roteiro, um JavaScript. 786 00:38:58,410 --> 00:39:01,050 E como um aparte, uma vez que este É um equívoco comum, 787 00:39:01,050 --> 00:39:05,220 JavaScript não tem absolutamente nada a ver com Java, a linguagem 788 00:39:05,220 --> 00:39:08,010 que alguns de vocês podem aprenderam na APCS. 789 00:39:08,010 --> 00:39:10,480 Era mais um marketing coisa do que qualquer coisa, 790 00:39:10,480 --> 00:39:12,980 montando os coattails de anos atrás Java. 791 00:39:12,980 --> 00:39:17,300 Mas JavaScript, nada a ver com Java, apenas de forma semelhante, e irritante, 792 00:39:17,300 --> 00:39:18,480 confusamente chamado. 793 00:39:18,480 --> 00:39:21,890 >> Então aqui está como você declarar uma função em JavaScript, literalmente função dizer, 794 00:39:21,890 --> 00:39:24,556 em seguida, o nome da função, então qualquer argumentos que poderia tomar, 795 00:39:24,556 --> 00:39:25,530 assim como em PHP. 796 00:39:25,530 --> 00:39:28,990 Acontece que em JavaScript, um dos mais funções irritantes que existem é de alerta. 797 00:39:28,990 --> 00:39:31,392 Esta é uma pequena janela que irá aparecer e alertá-lo 798 00:39:31,392 --> 00:39:32,600 a algum pedaço de informação. 799 00:39:32,600 --> 00:39:33,766 É geralmente desaprovado. 800 00:39:33,766 --> 00:39:35,980 Mas nós vamos usá-lo como nosso primeiro exercício aqui. 801 00:39:35,980 --> 00:39:37,900 >> Observe algumas características do JavaScript. 802 00:39:37,900 --> 00:39:41,524 As aspas simples e aspas duplas realmente não importa mais. 803 00:39:41,524 --> 00:39:43,690 Aspas simples e duplas citações podem ser trocados, 804 00:39:43,690 --> 00:39:46,220 enquanto que em C, você tem que usar aspas para cordas, 805 00:39:46,220 --> 00:39:48,150 e você tem duas de solteiro cita para chars. 806 00:39:48,150 --> 00:39:51,150 No mundo JavaScript, muitas pessoas, a maioria das pessoas 807 00:39:51,150 --> 00:39:54,970 usar aspas simples em torno de cordas só porque é uma coisa estilística. 808 00:39:54,970 --> 00:39:58,330 Mas o que é o operador mais aqui, que nós não vimos antes? 809 00:39:58,330 --> 00:39:59,836 >> AUDIÊNCIA: concatenação. 810 00:39:59,836 --> 00:40:00,960 DAVID MALAN: concatenação. 811 00:40:00,960 --> 00:40:02,450 Então C não tem sequer isso. 812 00:40:02,450 --> 00:40:04,820 PHP tem o operador ponto, que faz isso. 813 00:40:04,820 --> 00:40:09,710 JavaScript tem o operador de soma, que confusão é como Java. 814 00:40:09,710 --> 00:40:11,440 Agora, o que está acontecendo aqui? 815 00:40:11,440 --> 00:40:14,260 >> Então, aqui é onde a base compreensão de que a imagem 816 00:40:14,260 --> 00:40:17,010 nós jogamos um par dias entra em jogo. 817 00:40:17,010 --> 00:40:19,620 Lembre-se, quando tivemos uma simples versão de um HTML página-- 818 00:40:19,620 --> 00:40:20,830 ele apenas disse: Olá mundo. 819 00:40:20,830 --> 00:40:22,770 E, então, desenhou uma árvore para a direita, o que 820 00:40:22,770 --> 00:40:27,320 tinha um monte de retângulos e linhas conectando-os como uma árvore genealógica. 821 00:40:27,320 --> 00:40:30,820 Então essa é a chamada DOM ou Document Object Model. 822 00:40:30,820 --> 00:40:36,759 E verifica-se que você pode acessar retângulos em que árvore com sintaxe 823 00:40:36,759 --> 00:40:37,550 como a seguinte. 824 00:40:37,550 --> 00:40:41,370 Você literalmente dizer documento, que é uma variável global especial em um JavaScript 825 00:40:41,370 --> 00:40:45,890 programa que tem uma função associado a ele que você pode acessar 826 00:40:45,890 --> 00:40:50,280 semelhante a um struct, mas você simplesmente dizer ponto e, em seguida, o nome da função, 827 00:40:50,280 --> 00:40:52,390 obter elemento por ID. 828 00:40:52,390 --> 00:40:55,460 >> O elemento que eu quero chegar é aparentemente citar nome unquote. 829 00:40:55,460 --> 00:40:57,150 E então eu quero começar o seu valor. 830 00:40:57,150 --> 00:40:58,330 Agora estamos ficando à frente de nós mesmos. 831 00:40:58,330 --> 00:41:00,038 Eu nem tenho certeza do que tudo isso é sobre. 832 00:41:00,038 --> 00:41:03,000 Vamos avançar rapidamente para o HTML em da página, que é super simples. 833 00:41:03,000 --> 00:41:05,370 >> Observe que eu defini Uma forma aqui embaixo. 834 00:41:05,370 --> 00:41:07,940 Repare que eu dei-lhe um único ID, mesmo que não usei 835 00:41:07,940 --> 00:41:08,870 este atributo antes. 836 00:41:08,870 --> 00:41:11,300 Mas isso existe em HTML. 837 00:41:11,300 --> 00:41:15,570 Você pode identificar exclusivamente algum pedaço de HTML com um identificador como este. 838 00:41:15,570 --> 00:41:19,880 >> Observe agora isto-- Acontece HTML apoia, por que rol 839 00:41:19,880 --> 00:41:22,490 há pouco, um todo bando de manipuladores de eventos. 840 00:41:22,490 --> 00:41:25,060 E esse manipulador de eventos diz em enviar. 841 00:41:25,060 --> 00:41:28,730 Sobre a apresentação usuário deste formulário, ligue para o seguinte código. 842 00:41:28,730 --> 00:41:31,360 E o código que está acontecendo a ser chamado ou executado 843 00:41:31,360 --> 00:41:35,260 é exatamente isso, o grego função seguido de retorno falso. 844 00:41:35,260 --> 00:41:37,360 Tudo o resto deve ser bastante familiar. 845 00:41:37,360 --> 00:41:42,050 >> Aqui é uma entrada do tipo texto, cuja ID, neste caso, vai ser nome. 846 00:41:42,050 --> 00:41:45,430 Nós não temos um verdadeiro atributo de nome este tempo-- e um botão de envio. 847 00:41:45,430 --> 00:41:48,330 Assim, a página resultante se parece com isso. 848 00:41:48,330 --> 00:41:52,890 E o comportamento resultante, você vai ver, se parece com isso. 849 00:41:52,890 --> 00:41:56,940 A página hospeda locais diz, Olá David, dificilmente um esteticamente agradável 850 00:41:56,940 --> 00:41:58,340 maneira de cumprimentar um usuário. 851 00:41:58,340 --> 00:41:59,950 Mas o que está realmente acontecendo? 852 00:41:59,950 --> 00:42:01,360 >> Bem, considere o que é isso. 853 00:42:01,360 --> 00:42:02,310 Este é um campo de texto. 854 00:42:02,310 --> 00:42:04,635 E de acordo com o HTML aqui, eu dei-lhe 855 00:42:04,635 --> 00:42:07,350 um identificador exclusivo chamado Citação nome unquote. 856 00:42:07,350 --> 00:42:09,770 Enquanto isso, eu disse quando o usuário envia o formulário 857 00:42:09,770 --> 00:42:13,820 por pressionar Enter ou clicar no Enviar botão, chamar a função chamada Greet 858 00:42:13,820 --> 00:42:15,410 e depois retornar False. 859 00:42:15,410 --> 00:42:16,870 Vamos considerar aqueles em sentido inverso. 860 00:42:16,870 --> 00:42:20,590 Observe que quando eu clicar em Enviar, o URL desta página não muda. 861 00:42:20,590 --> 00:42:22,420 O ícone do navegador não começar a girar. 862 00:42:22,420 --> 00:42:27,050 Eu não ir a qualquer lugar, e isso é literalmente, porque eu disse que retornar False. 863 00:42:27,050 --> 00:42:31,534 Retorno curto-circuitos falsa ou paradas o comportamento padrão de um formulário. 864 00:42:31,534 --> 00:42:33,700 De modo que, em seguida, deixa-nos com esta uma pergunta final. 865 00:42:33,700 --> 00:42:34,764 O que Greet fazer? 866 00:42:34,764 --> 00:42:36,680 Bem, aparentemente Cumprimente chama uma função chamada 867 00:42:36,680 --> 00:42:39,250 Alerta, passa numa longo argumento de que é 868 00:42:39,250 --> 00:42:43,950 o resultado da concatenação juntos um bando de substrings, Olá espaço vírgula, 869 00:42:43,950 --> 00:42:45,810 então o que quer que isso retorna. 870 00:42:45,810 --> 00:42:51,490 Então documento é como um mundial variável para essa raiz dessa árvore, 871 00:42:51,490 --> 00:42:55,560 chamar uma função especial, caso contrário, agora conhecido como um método. 872 00:42:55,560 --> 00:42:57,650 Uma função que é dentro de uma variável é 873 00:42:57,650 --> 00:42:59,640 chamado um método em vez de uma função. 874 00:42:59,640 --> 00:43:01,570 >> Portanto, obter elemento por ID. 875 00:43:01,570 --> 00:43:03,940 Que elemento você quero começar pelo seu ID? 876 00:43:03,940 --> 00:43:06,970 Citar nome unquote e em seguida, especificamente valorizar. 877 00:43:06,970 --> 00:43:12,000 Assim, em outras palavras, que o código simplesmente encontra o campo de texto cujo ID é o nome 878 00:43:12,000 --> 00:43:13,380 e depois recebe o seu valor. 879 00:43:13,380 --> 00:43:16,460 Então, se eu fosse para alterar esta e dizer Davin em lugar de Davi, 880 00:43:16,460 --> 00:43:20,670 e clique em Enviar, agora nós tem uma saudação para Davin. 881 00:43:20,670 --> 00:43:22,890 >> Tudo bem, então tudo bem e bom. 882 00:43:22,890 --> 00:43:25,480 Mas vamos ver se podemos fazer esta um pouco mais limpo desde apenas 883 00:43:25,480 --> 00:43:28,190 código escrito, como este é geralmente vai ser desaprovada. 884 00:43:28,190 --> 00:43:30,060 Isso vai olhar mais assustador. 885 00:43:30,060 --> 00:43:32,330 Mas o que é o primeiro diferença que você nota aqui 886 00:43:32,330 --> 00:43:35,970 nesta versão, além do nomear mudando para um DOM? 887 00:43:35,970 --> 00:43:41,110 O que parece diferente estruturalmente sobre isso contra o outro? 888 00:43:41,110 --> 00:43:41,932 Sim? 889 00:43:41,932 --> 00:43:43,890 AUDIÊNCIA: É a forma de topo do script agora? 890 00:43:43,890 --> 00:43:46,570 DAVID MALAN: Sim, o formulário está no topo do script, por algum motivo curioso. 891 00:43:46,570 --> 00:43:48,736 Então essa é a primeira coisa que salta para fora de mim, também. 892 00:43:48,736 --> 00:43:50,990 E, felizmente, pelo menos, esta parte é idêntica. 893 00:43:50,990 --> 00:43:53,470 Então, a única coisa que parece para ser diferente é esta. 894 00:43:53,470 --> 00:43:55,296 >> Então aqui está o que é puro sobre JavaScript 2. 895 00:43:55,296 --> 00:43:57,420 E isso faz com que seja difícil entender à primeira vista, 896 00:43:57,420 --> 00:44:00,670 especialmente para projetos finais, se você está olhando para o código de exemplo on-line, 897 00:44:00,670 --> 00:44:04,200 mas tudo se resume a alguns características sintáticas básicas. 898 00:44:04,200 --> 00:44:06,230 Aqui, novamente, é que documento variável global. 899 00:44:06,230 --> 00:44:09,540 Aqui, novamente, é que o método ou a função que diz obter o elemento por ID. 900 00:44:09,540 --> 00:44:11,570 Desta vez eu quero obter o ID da chamada de demonstração. 901 00:44:11,570 --> 00:44:12,490 Onde fica isso? 902 00:44:12,490 --> 00:44:15,400 Isso é aparentemente certo aqui, o próprio formulário. 903 00:44:15,400 --> 00:44:20,010 >> E agora notar que, aparentemente, se eu receber de volta esse nó da árvore que 904 00:44:20,010 --> 00:44:22,940 representa a forma em si, não é um campo de texto, 905 00:44:22,940 --> 00:44:26,970 verifica-se que forma, que nó ou retângulo da árvore, 906 00:44:26,970 --> 00:44:30,450 tem o que chamaremos de uma propriedade, muito, muito, muito semelhante 907 00:44:30,450 --> 00:44:35,390 em espírito a um struct em C. É apenas um membro de dados dentro deste retângulo. 908 00:44:35,390 --> 00:44:38,300 >> Então eu tenho a forma aqui, e eu estou anexando, 909 00:44:38,300 --> 00:44:44,650 ou eu estou atribuindo, a sua em Enviar manipulador ou melhor, em Enviar propriedade 910 00:44:44,650 --> 00:44:45,740 a seguinte função. 911 00:44:45,740 --> 00:44:49,000 E este é, de longe, o mais louco coisa, até agora, sintaticamente. 912 00:44:49,000 --> 00:44:53,610 Acontece em JavaScript e em PHP e, sinceramente, para que o assunto em C, 913 00:44:53,610 --> 00:44:58,990 mesmo que não faça isso, você pode adicionar sem nome, anônimo, ou AKA lambda 914 00:44:58,990 --> 00:45:03,000 funções que não têm um nome mas pode ser chamado assim. 915 00:45:03,000 --> 00:45:07,050 >> Então o que eu estou fazendo aqui é que eu estou atribuindo Por esta Enviar propriedade, que 916 00:45:07,050 --> 00:45:14,330 É dentro deste nó de minha árvore DOM, um função, a função de ponteiro se você quiser. 917 00:45:14,330 --> 00:45:16,310 Essa função não tem nome, mas que não faz 918 00:45:16,310 --> 00:45:19,110 importa, porque vamos ver em um momento como chamá-lo. 919 00:45:19,110 --> 00:45:21,780 Quando esta função é chamada, este código é executado, então 920 00:45:21,780 --> 00:45:24,210 false é retornado como antes. 921 00:45:24,210 --> 00:45:25,800 >> Mas observe o que eu fiz. 922 00:45:25,800 --> 00:45:27,830 Neste ponto no história, eu tenho um formulário. 923 00:45:27,830 --> 00:45:30,190 Ele tem uma identificação única chamada de demonstração. 924 00:45:30,190 --> 00:45:33,740 Aqui em baixo, eu tenho uma tag script que executa o código a seguir. 925 00:45:33,740 --> 00:45:37,720 Ele atribui a esse nó a árvore é em Enviar 926 00:45:37,720 --> 00:45:40,260 propriedade esta função aqui. 927 00:45:40,260 --> 00:45:44,310 E, assim, por natureza, de como os navegadores funcionam, quando eu clico agora Enviar ou pressione Enter, 928 00:45:44,310 --> 00:45:45,889 que a função vai ser pago. 929 00:45:45,889 --> 00:45:48,680 Ela não precisa de um nome, porque quem diabos se importa com o que é chamado. 930 00:45:48,680 --> 00:45:52,540 A única vez que nunca vai chegar chamado é quando eu enviar o formulário. 931 00:45:52,540 --> 00:45:55,130 Não há nenhuma necessidade para mim, o desenvolvedor humana, 932 00:45:55,130 --> 00:45:57,330 realmente chamá-lo em qualquer outro lugar. 933 00:45:57,330 --> 00:46:00,720 >> Agora apenas como uma provocação, como se isso não foram ocupar dobrar o suficiente, 934 00:46:00,720 --> 00:46:03,330 podemos até mesmo fazer isso olhar com mais enigmática 935 00:46:03,330 --> 00:46:05,850 uma biblioteca super popular chamado jQuery. 936 00:46:05,850 --> 00:46:08,760 Na verdade jQuery e JavaScript são muitas vezes confundidos. 937 00:46:08,760 --> 00:46:12,790 E o que vamos fazer na quarta-feira é início usando esta linguagem e essas bibliotecas 938 00:46:12,790 --> 00:46:16,030 para construir cada vez mais assíncrona e aplicações dinâmicas 939 00:46:16,030 --> 00:46:18,950 como mapa recebendo aplicações, aplicações 940 00:46:18,950 --> 00:46:22,360 que atualizar a página da Web em tempo real tempo, muito parecido com o Facebook ou Gchat 941 00:46:22,360 --> 00:46:27,130 fazer, e não nos limitar a que bate Enviar por um get ou apenas pós 942 00:46:27,130 --> 00:46:27,630 sozinho. 943 00:46:27,630 --> 00:46:29,055 Então eu vou te ver na quarta-feira. 944 00:46:29,055 --> 00:46:31,805 945 00:46:31,805 --> 00:46:35,550 >> [Música tocando] 946 00:46:35,550 --> 00:48:09,728