>> DAVID MALAN: Tudo bem.
Este é CS50, e este é o final de semana nove.
Tem sido um turbilhão sobre nos últimos dias.
E sete conjunto de problemas, se você for joelho profundamente dentro dele, percebe que há um grande
pouco novo que está lá dentro.
Mas vamos ver se não podemos remendar tudo junto aqui brevemente
antes, em seguida, desviando em mais outra direção e visão
onde mais podemos ir.
>> Então, até agora, nós já conversamos sobre HTML.
Nós conversamos sobre CSS.
Nós conversamos sobre PHP.
Você começou a experimentar SQL.
Hoje, vamos falar um pouco sobre JavaScript.
Mas como fazer tudo isso díspares línguas se encaixam?
>> Então nós conversamos na semana passada sobre o noção de ter um servidor.
Então vamos chamar este retângulo como um servidor web aqui.
E um servidor web serve certamente arquivos.
E alguns desses arquivos podem ser arquivos HTML.
Então, uma das coisas que um servidor web pode cuspir pode ser um arquivo que
nós vamos chamar assim contendo um pouco de HTML.
Assim, em termos leigos, o que O HTML permitem que você faça?
>> AUDIÊNCIA: Olhar Página agradável.
>> DAVID MALAN: OK, fazer uma página de boa aparência, embora eu acho que eu tenho provado
que de outra forma.
Assim HTML deixa você colocar para fora páginas estruturalmente, e ele permite que você
tipo de esteticamente marcar uma página, marcar o conteúdo estático, de modo que você
pode, então, vê-lo com um web browser.
>> Mas essa é a chave.
É conteúdo estático.
Você escreve-lo, salvá-lo, e, em seguida, enviá-lo para você.
E o servidor web serve então -lo para os seus visitantes.
>> Mas nós estilizar coisas usando um diferente linguagem completamente.
Começamos a usar um atributo de estilo em certos tags.
E o atributo de estilo, vamos definir coisas como o tamanho da fonte e cor.
E você provavelmente já começaram a descobrir, ou você vai logo para a final
projetos potencialmente, ainda outro propriedades que você pode usar no CSS.
E assim, em termos leigos, o que realmente, será que o CSS faz?
Esses são apenas alguns exemplos dos mesmos.
O que é que você faz isso HTML Não parece que a partir de
que já vimos até agora?
>> AUDIÊNCIA: Definir estilos por si mesmo.
>> DAVID MALAN: Definir estilos por si mesmo.
Assim, definir as coisas como aulas de como você pode ter encontrado, ou exclusivamente
identificar nós em um documento para que você pode estilizar-los.
Mas, mais especificamente, eu diria que a CSS realmente permite que você levar as coisas a
última milha e permite que você especifique muito mais precisamente a estética,
enquanto HTML para a maior parte deixa você estruturar suas páginas.
>> E mesmo que existam alguns padrões, como vimos a tag para
uma tag título, que a grosso modo fez coisas grandes e em negrito.
Isso é uma definição muito genérica da marca - grande e corajoso.
O tamanho da fonte é essa?
Que cor é essa?
Como negrito é isso?
E CSS permite mais finamente sintonizar coisas assim.
Bem como disposição, como alguns de vocês já viram.
>> E, francamente, CSS é um pouco de uma linguagem confusa.
É muito poderosa em que você pode fazer literalmente qualquer site que você tem
visto na web hoje com ele, mas é um tipo de dor no pescoço.
E alguns de vocês já bateu sua cabeça contra as paredes já só para fazer
algo estúpido como centro de um menu no conjunto de problemas de sete se você chegou a
Nesse ponto já.
>> Mas perceber, essas coisas ficar mais fácil com o tempo.
Você começa a notar padrões.
E mais uma vez, o Google vai ser seu amigo para as várias maneiras em que você pode
resolver estes tipos de problemas.
>> E atrevo-me a dizer, com CSS, HTML e mais Geralmente, você pode resolver problemas em
muitas outras maneiras, que pode muito bem ser correto, do que você poderia
em algo como C, mesmo agora PHP ou JavaScript.
Há apenas muitos diferentes maneiras para colocar as coisas para fora.
>> Mas isso começou a ficar bagunçado, dissemos.
Apenas tipo de commingling seu HTML e seu CSS com o atributo de estilo foi
um pouco desleixado.
E, assim, em vez disse, mais ou menos abstratamente falando, que você deve
pelo menos começar a fator o seu CSS provavelmente.
Atributos não seu estilo, mas pelo menos usar a tag de estilo dentro do que
parte da página web?
>> AUDIÊNCIA: Head.
>> DAVID MALAN: Na cabeça.
Até agora, só tínhamos o título se lá, mas você também pode adicionar um estilo
marcar, e você pode colocar o seu CSS aproximadamente falando em direção ao topo da página.
Mas, então, levou as coisas um passo adiante e nós consignado que mais
em um arquivo separado.
>> E assim, esses dois arquivos foram de alguma forma, agora ligados.
E, de fato, foi o tag que fez isso.
E o que foi um dos abrangente motivações para a nossa factoring CSS
tudo o mais?
>> AUDIÊNCIA: Reutilização.
>> DAVID MALAN: Reutilização.
Certo?
Você pode ter visto em p definir sete já que muitas das páginas, a
página de compra, a página de venda, o portfolio página, são, provavelmente,
estruturado forma um tanto semelhante.
Há um logotipo CS50 finanças no topo a não ser que você decidiu mudá-lo.
Há um rodapé na inferior das páginas.
E CSS permite que você depois de levar para fora lo em um arquivo separado para que se
você quer mudar alguma coisa no mundo ao longo de todo o seu site, você pode realmente
basta alterá-lo em um lugar.
>> Mas há um preço a pagar potencialmente por ter consignado o
CSS do meu arquivo HTML em um separado arquivo de referência com o
tag, que vimos na segunda-feira.
O que poderia ser o lado negativo disso?
Pensando de uma semana atrás, para quando estamos falando sobre HTTP e TCP / IP e como
a internet funciona.
Algo aqui?
>> AUDIÊNCIA: É preciso mais tempo.
>> DAVID MALAN: É preciso mais tempo.
Por quê?
>> AUDIÊNCIA: [inaudível].
>> DAVID MALAN: Yeah.
Por isso, sem dúvida, leva um pouco mais de tempo.
Porque um, o CSS está obviamente não no mesmo arquivo.
Então, agora você não tem que fazer um, mas dois pedidos.
E cada um desses pedidos, como vimos em Chrome no chamado Inspector,
e nós olhamos a guia de rede, cada desses arquivos requer um HTTP
pedido, o que vimos leva uma certa quantidade de tempo.
Agora, talvez não seja muito.
Talvez seja apenas 20 milésimos de segundo.
Talvez seja a 200 milissegundos.
>> Mas pensar em uma página, como Facebook, ou CNN, ou o Google, que são muito
maior do que os exemplos que temos olhei até agora.
Essas páginas podem ter dezenas de arquivos, cada um dos quais pode exigir um
Download de um arquivo.
Então, as coisas podem potencialmente começar a desacelerar.
>> E, especialmente nestes dias em que todos nós têm telefones móveis em nossos bolsos e
conexões de internet mais lentas, ter que esperar mais alguns milissegundos, alguns
mais milissegundos para adicional ficheiros podem realmente ser lento.
Latência é a palavra que descreve o tipo de esperar que você tem que
experimentar ao esperar algum pedaço de informação.
>> Mas há um lado positivo.
Portanto, não é todo o tipo de um -
ele realmente é um pouco de uma gangorra aqui.
Desvantagem agora, mas o que os navegadores podem fazer se eles são inteligentes, a fim de evitar
ter que solicitar o mesmo styles.css arquivo novamente pode ser para fazer o quê?
>> Cache-lo.
Então cache -
C-A-C-H-E -
geralmente significa aqui apenas para salvar a arquivo que você solicitou pela primeira vez, e
em seguida, verificar o seu cache para ele.
Verifique você está tipo de recipiente de armazenamento, e se você já tem um
cópia do styles.css, mesmo que algum outro página na p-set, ou em qualquer site,
solicita-lo novamente, só para dar o usuário que mesmo cópia em cache.
Não se preocupe que o solicite.
>> Desvantagem lá, porém, como alguns de vocês ter tropeçado no p-set.
Se você fizer uma alteração no servidor e você voltar para o navegador e você
recarregar, por vezes, o navegador faz um favor e não se incomoda
re-download de seu arquivo styles.css porque, vamos lá, quais são as chances
que estes estilos que o Facebook usa vão mudar hora a hora ou
dia-a-dia?
É muito baixo.
Eles podem mudar ao longo do tempo, mas não por minuto ou por hora.
>> Assim, um truque, apenas FYI ao fazer web desenvolvimento, é frequentemente mantenha pressionada a
chave mudar, por exemplo, e depois clique em recarregar no seu navegador, e que a vontade
tipicamente dizer a recarga navegador tudo, até mesmo se você já tem
no cache.
Então, novamente, vantagens e desvantagens, mas todos eles
em última instância, decisões de design.
>> Então, agora, nós não apenas terminar a história aqui.
Se eu agora ir para trás e para trás e para trás e volta, começamos a introduzir não apenas
HTML, mas PHP.
Assim, em termos leigos, o que O PHP vamos fazer?
>> AUDIÊNCIA: [inaudível].
>> DAVID MALAN: O que é isso?
>> AUDIÊNCIA: Apresente lógica no código.
>> DAVID MALAN: Sim, introduzir lógica em seu código.
Portanto, é uma linguagem de programação de verdade com loops e variáveis, e
funções e condições, e todos as coisas que tenho usado caminho de volta
quando, desde o início.
E PHP, que já vimos, pode ser usado ou na linha de comando - é
não tem que ter nada a ver com a web, mesmo que isso é
realmente suas origens e que tende para ser bom e propício para -
mas você pode usar o PHP apenas pela natureza o facto de que ele tem uma impressão ()
função, e uma função () printf, ou uma função () echo.
Há grupos de maneiras que você pode imprimir um texto com PHP.
>> Portanto, você pode usar esta programação língua para saída exactamente
o que estávamos falando antes.
Você pode gerar dinamicamente seu HTML.
Talvez não toda ela.
Talvez as coisas códigos rígidos, como o cabeçalho e rodapé, e logotipo,
e suas folhas de estilo, e tudo isso.
Mas para algo como-p definir sete, onde você está manipulando ações e
mostrando a carteira do usuário, que é vai mudar dinamicamente, você pode
certamente usar o PHP ea lógica que dá você como uma linguagem de programação para
saída subconjuntos dinamicamente da página.
>> Então, quando você fala sobre sites dinâmicos, ou programação web, que é
o que você está realmente falando.
Usando uma linguagem como PHP, ou coisas chamado Python, ou Ruby ou Java, ou
Ainda outras línguas, para consultar um banco de dados muitas vezes, ou outro servidor, e
depois cuspir dinamicamente HTML.
>> Agora, o resultado final, como um aparte, é que o HTML da maioria dos sites,
incluindo o seu set-p sete, é, provavelmente, vai ser uma grande confusão se
você olhar para a fonte código em um navegador.
Isso não é um grande negócio.
Neste momento, quando nos preocupamos estilo, nos preocupamos com o
coisas que você escreve.
Não se preocupam com as coisas que o que suas saídas de código.
Então não se preocupe com recuo aqui, se é que é PHP
na verdade, a saída de material.
Afinal de contas, o navegador não vai se importar, e um ser humano não estará olhando
na fonte de qualquer maneira.
Nós os funcionários, por exemplo, seria estar a olhar para o seu PHP.
>> Então deixe-me dar um exemplo rápido agora de por que mais isso pode ser útil.
Então, francamente, eu não me lembro da última vez que eu usei C para resolver um problema em
no mundo real.
Foi, provavelmente, na pós-graduação quando Eu precisava usar uma linguagem que
foi bastante baixo nível e me deu a oportunidade de fazer algo muito alta
realização de realmente salvar o maior número CPU ciclos como eu poderia, em grande parte,
porque eu estava usando enormes conjuntos de dados, e todos os ciclos de CPU contadas.
E, francamente, mesmo em coisas como telefones estes dias e outros dispositivos
onde você não consegue ter tanto memória e você não consegue ter como
muito CPU, usando linguagens mais rápidas ainda é atraente.
>> Mas no mundo real, quando você acabou de quero jogar algum programa juntos para
analisar alguns dados, ou se você tiver recolhido um monte de inscrições para
algum grupo de estudantes e você quer muito rapidamente automatizar o envio de e-mails
um por um para cada um daqueles inscritos, você está indo para alcançar
uma linguagem de alto nível a C, por assim dizer.
Algo como PHP ou Python, ou Ruby, ou uma meia dúzia de outros que existem
nos dias de hoje.
Mas os três são provavelmente o direito mais moderno agora.
>> E o que isto significa é que você pode abrir um editor de texto como o gedit ou
mais que qualquer outra coisa e depois é só começar escrever código sem ter que se preocupar
sobre a compilação, sem ter que realmente se preocupar com o gerenciamento de memória,
manter em mente que um pouco sloppiness acabará por voltar
para mordê-lo, se o conjunto de dados fica maior ou o problema fica grande.
Mas o que isso significa para nós é o seguinte.
>> Deixe-me ir em frente e correr speller problema de definir seis.
Então, esta é a minha implementação baseada em trie que I utilizado na grande
placa onde eu não realizada tão bem.
Nós vamos voltar em uma semana e revisitar aqueles que se acabar no topo da
placa grande em nossa última aula.
Mas, por agora, deixe-me ir em frente e apenas executar a minha solução no texto, e vamos fazer
Bíblia do Rei James, e aqui vamos nós.
>> Portanto, estas são todas as supostamente palavras com erros ortográficos fora de
a Bíblia do Rei James.
E minha implementação levou uma segunda metade do total.
Então não é tão ruim neste determinado computador.
Mas pense o quanto código que eu tinha que escrever.
Pense em quanto código você tinha que escrever.
Pense quantas horas você gastou no D-hall ou seu dormitório ou onde quer
realmente codificação se essa solução.
>> Bem, se eu realmente tenho um nível mais elevado linguagem como PHP, tome nota do
o que posso fazer aqui.
Em primeiro lugar, suponhamos que este é, ao invés seu código de distribuição.
Este é um arquivo chamado speller.
Ele está disponível como parte de hoje código de distribuição.
E eu vou acenar minha mão, no máximo, dos detalhes, mas isso é realmente
um exemplo interessante de como você pode portar uma linguagem
como C até PHP.
Eu literalmente abriu duas janelas de texto, uma com a minha versão C de speller.c,
e eu só comecei a traduzi-lo em meu cabeça para PHP e digitando-lo usando
os mais próximos funções equivalentes.
>> Então, algumas dessas coisas são diferentes.
Vimos da última vez que o PHP não usa incluir no exatamente da mesma maneira.
Ele usa requerem tipicamente, embora incluem existe.
Definir é um pouco diferente do # Define em C, mas isso é
como nós fazemos uma constante.
$ Argc despeja existe em PHP, por isso temos visto isso antes.
Estes são apenas variáveis, todos que começam com cifrões.
Lembre-se estes são apenas um bando de pontos flutuantes.
>> Assim, longa história curta, você é bem-vindo para folhear este se curiosos, esta é
quase uma conversão de linha para linha do Versão C de speller.c em PHP.
E você pode fazer isso de novo para meia dúzia de outras línguas.
>> Mas o que é interessante é isso.
Ou o que é francamente desanimador é o seguinte.
Deixe-me ir em frente e escrever sobre dictionary.php, e afirmam que eu sou
indo para ir em frente e re-implementar problema de definir seis aqui.
>> Então, vamos propor que, neste primeiro arquivo, que será implementado em
PHP, então deixe-me abrir minhas marcas assim.
Deixe-me dar-me um mundial variável, $ tamanho fica zero.
E eu vou dar me uma tabela hash.
Vou usar uma tabela hash para esta coisa.
Como faço para declarar uma tabela hash em PHP?
Concluído.
OK.
>> Então abra o suporte próximo suporte representa que em PHP, como vimos?
Uma matriz, mas uma matriz que podia ser uma matriz associativa.
Uma matriz associativa é uma estrutura de dados
chaves associados com valores.
>> Agora, o mais simples indexada numericamente matriz, as chaves são o quê?
Zero, um, dois, três, certo?
Old school coisas de volta a partir de C. Mas pode também ser strings como foo e bar,
ou Maxwell, ou qualquer string.
Então eu posso aproveitar essa em apenas um momento.
>> Deixe-me ir em frente e declarar uma função como -
vamos fazer load () em primeiro lugar.
Assim, a função load ().
E PHP é um pouco diferente, já que você literalmente tipo de função, mas você
não digitar um tipo de retorno.
Eu estou indo para ir em frente e dizer que o função load () deve levar em
argumento $ dicionário, apenas como a versão C fez.
Eu estou fazendo isso da memória.
>> E proponho que eu sou vai fazer isso.
Estou simplesmente vai fazer foreach.
Eu vou chamar uma função chamada file (), passando o nome da
ficheiro, que é a variável $ $ Dicionário como palavra.
E, em seguida, dentro do meu laço for aqui, eu sou indo para ir em frente e guardar na minha
$ $ Word tabela que fica verdadeiro.
Concluído.
Oh, espere.
Concluído.
OK.
>> Isto é uma função da carga () dizer em PHP.
Agora, por que isso funciona?
E eu sou o tipo de trapaça aqui.
>> Então, um, foreach vimos brevemente última vez.
Significa apenas que você pode iterar uma matriz, sem se preocupar com i
e n e, mais além, e tudo isso.
Dicionário é, naturalmente, o nome do arquivo, algo como grande ou pequeno, os dois
dicionários foram utilizados pela última vez.
O arquivo é uma função que abre o texto arquivo, lê-lo em linha por linha, e
mãos para trás um enorme variedade, cada um de cujos elementos é um
linha desse arquivo.
Então essa é a combinação de fopen, e fread, e enquanto loop, e fclose,
e tudo isso.
Finalmente, como a palavra significa apenas que o variável que eu vou ter acesso a
em cada iteração neste loop.
>> Assim, em breve, este forro aqui significa abrir o arquivo cujo nome é em
dicionário, a variável, iterar linha por linha, e cada vez que você começa
uma linha, loja em um chamado palavra variável, e, em seguida, fazer algo com a palavra.
O que eu quero fazer?
Eu quero colocar palavras na minha tabela de hash.
>> Bem, eu posso colocar alguma coisa na minha tabela hash, assim como em C
usando colchetes.
Este é o nome de minha tabela de hash.
Vou índice para esse hash mesa neste local.
Portanto, não suporte a zero, não um suporte.
Bracket citação unquote alguma coisa, o que essa palavra é.
E, assim como você pode ter em seu tabela hash trabalho trie, basta armazenar
efetivamente um valor booleano, implicitamente ou explicitamente.
Concluído.
Eu estou armazenando o valor verdadeiro.
>> Agora há um par de coisas Estou cortando cantos aqui.
Tecnicamente, não vai ser um nova linha irritante, / n, no final de
cada uma dessas palavras.
Então, eu provavelmente deveria chamar uma função PHP chamado costeleta (), que será
literalmente cortar aquilo.
E eu realmente preciso fazer outra coisa.
Eu provavelmente deveria incrementar o tamanho de cada iteração, por isso estou mantendo o controle
global do que é.
E, francamente, e este é um dos aspectos estúpidos de PHP, se você estiver
usando uma variável global, você precisa dizer explicitamente que você é.
Então, eu estou indo realmente digitar mundial $ Tamanho, $ tabela global, e agora
minha função é completa.
>> Portanto, não é tão simples como antes, mas provavelmente levou menos tempo do que o C
versão, talvez?
OK.
>> Então, agora vamos fazer a função de verificação ().
Vamos ver se isso pelo menos levou o horas a fio que nos levaram em C. Então
deixe-me ir em frente e declarar verificar como uma função.
Toma na argumentação palavra, que é vai vir de speller.
E eu estou indo só para verificar se o seguindo isset variável, mesa
suporte strtolower de palavra -
vamos equilibrar todos os meus parênteses -
em seguida, retornar verdadeiro.
Else -
que era realmente o disco parte deste programa.
Caso contrário, retornará false.
Concluído.
Isso é cheque ().
>> Agora, por que isso funciona?
Bem, um passei em uma palavra, que é uma string.
Dois, eu estou verificando dentro do hash mesa, que é chamado de $ table.
Estou forçando-o a minúsculas chamando uma função tolower bastante semelhante () em
C, mas isso não a palavra inteira, não um único personagem.
E se isso for definido, em outras palavras, não é um valor definido, por outras palavras,
se for verdade, então sim, esta é uma palavra.
Porque eu colocá-lo lá com load ().
E se não, eu vou retornar false.
>> Agora, os outros são fácil.
Tamanho function (), como eu faço isso?
Eu basicamente não retornar $ size.
Mas tecnicamente precisa fazer essa coisa irritante.
E na verdade se ouvir, eu estava cortando um canto muitos.
Eu realmente preciso fazer $ table global.
>> Mas o que foi dito, descarregar).
Descarregar () é incrível.
Função descarregar ().
Como é que eu quero implementar descarregar (?)
Concluído.
OK.
>> Então descarregar (), gerenciamento de memória é completamente tomado cuidado para você
algo como PHP e muito de linguagens de alto nível.
Então, isso é incrível.
Como por que diabos nós passamos o passado oito semanas, além de redação C
aparentemente muito lento, muito tempo problemas de consumo com dezenas de horas
de trabalho sob os cintos?
>> Bem, por um lado, isso pode funcionar muito bem para pequenos programas.
Ele certamente acelerou o meu tempo de desenvolvimento.
Mas vamos ver o que acontece no mundo real.
>> Deixe-me ir para este diretório em uma janela de terminal.
Há speller.
E observe como um aparte, e você pode encontrei este conjunto de problemas em
seis ou sete conjunto de problemas.
Você não tem estritamente acabar com arquivos PHP com. php.
Se você colocar uma linha como a primeira em o topo, que é uma linha especial
de sintaxe que significa, essencialmente, encontrar o programa chamado PHP e usá-lo para
interpretar este arquivo.
Então, agora ninguém sabe realmente o que Estou executando um programa PHP.
Eu posso executá-lo apenas como se foram algo compilados em C.
>> Mas aqui está a coisa.
Na verdade, vamos fazer isso de novo.
Dropbox/pset6 /.
Há speller.
OK, 0,44 segundos.
Ele ficou mais rápido dessa vez.
>> Agora vamos para a versão PHP.
Toque agradável.
Mas basta pensar quanto tempo Salvei em horário de expediente.
OK.
>> Então 3,59 segundo, o que realmente não soa precisa também.
Mas isso é porque longa história curta, quando você estiver imprimindo uma grande quantidade
de material para a tela, que si atrasa as coisas.
O que realmente levou o CPU no aparelho foi de 3,59 segundos, em
contraste com C, que tomaram 0,44 segundos mais recentemente.
Isso é realmente uma ordem de magnitude diferente.
>> Então, onde é que o preço vem?
Por que é muito mais lento?
Por que o PHP executar tão mal?
Danielle?
>> AUDIÊNCIA: Você realmente não utilizar uma tabela hash.
>> DAVID MALAN: Eu realmente não utilizar uma tabela hash.
Então eu meio que fiz.
Portanto, é um array associativo.
O mais provável é que as pessoas em PHP são muito inteligente, eles usavam por baixo da
capa uma tabela hash que foi realmente executado em algo como C ou C + +.
Mas.
Sim.
>> AUDIÊNCIA: [inaudível].
>> DAVID MALAN: Yeah.
Assim, cada uma das funções que eu escrevi agora - Na verdade, você pode dizer que mais uma vez por
pouco mais alto?
>> AUDIÊNCIAS: Cada uma das funções que você incluiu tem muito mais completo
capacidade do que -
>> DAVID MALAN: Então, isso é muito verdadeiro.
Há muito mais sobrecarga que estamos não realmente vendo, concentrando-se apenas em
dictionary.php, que eu acabei de escrever.
Por outro lado, há um intérprete inteiro ir ao fundo.
Na verdade, quando eu corri este programa, ele não estava funcionando zeros e uns compilados
projetado para o meu CPU Intel.
Em vez disso, ele estava correndo linha por linha Código PHP que parece exatamente
como se digitou.
E assim, sempre que você usar uma linguagem interpretada, você
realmente fazer pagar esse preço.
Vai levar algum tempo para ler seu topo arquivo para baixo, da esquerda para
direita, e então executar cada linha de novo e de novo.
>> Agora, na realidade, especialmente na web, você pode realmente acelerar esse processo
armazenando em cache os resultados da Código PHP que está sendo interpretado.
E isso faz sentido na web, porque se você não tiver um usuário, como
me aqui, mas 1.000 ou 10.000 usuários, em seguida, talvez a primeira vez que o arquivo é
acessada é lento, mas, posteriormente, é muito mais rápido.
>> Mas isso também, mais uma vez, é um trade off.
E para algo como um dados de pesquisa conjunto, ou mesmo algo grande como
isso, seus usuários, eventualmente, começar a sentir que a desaceleração.
>> Assim, em breve, interpretado línguas são muito em voga, muito popular, e
francamente são, provavelmente, os idiomas que deve chegar para a resolução de problemas
subsequente para CS50.
Mas perceba o quanto você está realmente tendo por certo debaixo do capô
realmente essas últimas semanas em Hash tabelas e árvores, e tentativas,
os quais são utilizados, em última instância para realmente implementar coisas como suporte aberto,
colchete, que podemos agora gratidão tomar para concedido.
>> Então, vamos dar uma olhada agora neste contexto web.
E eu mencionei da última vez que não há um bando de superglobais em PHP que
não são realmente relevantes na linha de comando.
Eles são mais relevantes no contexto de usar o PHP em um contexto web.
Então, rodando o PHP em um servidor web, a fim para gerar coisas como HTML.
>> E olhou para $ _GET e $ _POST, e que é onde os usuários automaticamente '
entrada acaba simplesmente se você enviar uma formulário para um arquivo que termina em. php em um web
servidor como o aparelho.
Mas vamos examinar brevemente $ _COOKIE E $ _SESSION.
>> Em termos leigos, o que é um cookie como entendê-lo no contexto de
usando a web?
>> AUDIÊNCIA: ficheiro para o computador.
>> DAVID MALAN: Yeah.
É um arquivo no computador do usuário plantada por qualquer website
acontecer de você visitar.
Então, quando você vai para o Facebook, quando você vai para bankofamerica.com, quando você vai
para google.com, quando você vai a quase qualquer website no mundo nos dias de hoje,
incluindo cs50.net, um cookie é plantada no seu computador, o que é
ou um valor armazenado na memória RAM em seu computador na memória do seu navegador, ou
às vezes, na verdade um arquivo armazenado em seu disco rígido.
>> E o que normalmente armazenados no arquivo não é o seu nome de usuário, e não o seu
senha, normalmente não é algo sensível a menos que o site não é tão
bom com a sua segurança, mas sim é um grande identificador exclusivo entre
outras coisas.
É um número aleatório grande plantado em seu computador, mas você pode pensar como
uma espécie de selo de mão virtual como de um clube ou algum parque de diversões que
permite que a equipe, os proprietários desse serviço, para lembrar quem você é.
Então, se o número aleatório grande é como 12345678, apesar de que, obviamente,
não muito aleatório, pense que, como o selo de mão que quando você visita
facebook.com pela primeira vez, eles carimbar esse número em sua mão.
E então, porque você fala HTTP, você sendo um navegador, e por causa do Facebook
obviamente fala o mesmo que um web servidor do protocolo HTTP que diz
sempre que, posteriormente, visitar facebook.com, quer se trate de um segundo
mais tarde, uma hora mais tarde, mesmo no dia seguinte, contanto que você não tem explicitamente
desconectado, o que efetivamente é como lavar as mãos.
HTTP diz que você deve apresentar seu selo mão toda vez que você
voltar para o site.
>> O Facebook, então não é que eles olha aquele selo de mão e
eles dizem, oh, 123456789.
Eu não sei, à primeira vista que este é David Malan, em Cambridge,
Massachusetts, mas eles podem verificar o seu banco de dados e dizer, oh, a pessoa
em cujo computador plantamos 123456789 é David Malan de Cambridge,
Massachusetts.
Vamos mostrar que o usuário, em seguida, o perfil dele página ou do seu Feed de notícias.
>> Mas há um problema aqui, se este É assim que a web de fato funciona.
Vamos dar uma olhada em um exemplo rápido.
Vamos realmente ir dizer facebook.com.
Mas antes que pudéssemos ir para lá, vamos me ir em frente e abrir Chrome
Inspector aqui.
Deixe-me olhar para a aba de rede.
E agora vamos em frente e digite em https://facebook.com.
E eu estou fazendo isso para que nós não vemos todos esses redirecionamentos e resíduos
tempo olhando através delas.
Deixe-me aperte enter.
>> Tudo bem.
Nós vemos um monte de pedidos.
Chega Facebook.
Há um monte de arquivos.
E aqui, por minha menção de latência da última vez, isso é
um monte de solicitações HTTP.
Mas o primeiro é provavelmente o mais interessante.
>> Então, vamos rolar para baixo aqui, e Vou aumentar o zoom em um segundo.
Esta vai ser uma espécie de uma bagunça, mas vamos ver.
Facebook está nos enviando um todo monte de coisas.
>> Mas ei, interessante.
Eles estão plantando não um, mas quatro selos de mão para o meu lado aqui.
Set-Cookie, Set-Cookie, set-cookie set-cookie.
E existem algumas características aqui.
Todos eles mencionar alguns tipo de validade.
E parece que o Facebook está esperando para me lembrar até 2015.
Então, isso é, presumivelmente, o tempo em que Devo sair ou eles simplesmente
assumem automaticamente que eu sou não voltar.
Então, isso é realmente um decente quantidade de tempo.
>> E há alguma outra coisas acontecendo aqui.
Este cookie parece ser forçosamente excluída, dizendo que expirou em 1970
antes existia cookies.
Assim, o navegador é só ir assumir OK, isso é como
lavando o selo mãos.
>> Mas agora, quando meu navegador faz um pedido posterior -
deixe-me ir em frente e fazer isso novamente e reload.
Agora deixe-me rolar de volta para a pedido topo e descer
aqui, solicitar cabeçalhos.
Observe isso.
Então agora eu estou sob cabeçalhos não resposta, mas aviso que diz cabeçalhos de solicitação.
E note que o meu computador, como parte de o seu pedido depois de bater de recarga tem
enviado pelo menos os seguintes informações.
Não Set-Cookie, mas cookie.
Portanto, esta é a linha, o cabeçalho HTTP para dizer, onde o meu navegador é uma espécie
de sem que eu soubesse apresentando minha mão para inspeção do Facebook.
>> Então, esses cookies podem ser usado então para quê?
Para se lembrar de quem você é, ou se lembrar de como muitas vezes você já esteve lá, ou
realmente nada.
>> Então aqui está counter.php.
E deixe-me ampliar a fonte.
E cada vez que eu recarregue esta página, aviso é lembrar quantas vezes
Eu estive lá.
Bem, isso não é tão impressionante.
Vamos fechar essa guia, e agora vamos voltar para
http://localhost/counter.php.
>> Oh, isso é interessante.
Ele ainda se lembrava, mesmo embora eu fechei a guia.
E, francamente, se eu fechar o browser, se implementada da maneira certa, eu
poderia ainda lembrar que este usuário é que ele ou ela era a primeira vez, e
apenas uma vez eu vou para o menu do Chrome, que aqui está aqui, e ir para
Histórico e clique em Limpar dados de navegação, como alguns de vocês podem ter no
passado, só então os cookies realmente ser apagado durante web
desenvolvimento.
>> Então, se nós vamos -
vamos fechar-se gedit aqui.
E se nós vamos agora para este arquivo.
Deixe-me ir para o nosso vhosts / localhost / public, e deixe-me fazer
counter.php.
Observe que esta é uma bonita programa simples.
É um site bem simples.
>> Assim, a parte superior do arquivo está apenas a comentários.
Mas aqui está uma nova linha que você pode Já vimos em-p definir sete,
session_start ().
Esta é uma linha de código PHP que essencialmente, diz o servidor web, fazer
Certifique-se de carimbar as mãos e fazer Certifique-se de verificar carimbos manuais.
Isso é tudo o que a linha faz, e faz todo esse processo para nós.
Então observe Eu só tenho duas filiais aqui.
Se o contador chave dentro desta variável global especial chamada
$ _ Session está definido - por outras palavras, se há algum valor lá -
vamos obtê-lo e armazená-lo em um local de variável chamada $ contador.
Senão, vamos atribuir $ counter o valor padrão de 0.
>> Ora aqui está um aspecto do PHP que é tanto uma bênção e uma maldição.
PHP é um pouco desleixado.
Assim, enquanto no C, o que seria o âmbito do contador foram
seja aqui ou aqui?
>> Teria sido confinado a essas chaves.
Adivinha o quê?
No PHP, ele existe mesmo fora dos chaves, aqui, e aqui,
e aqui, e aqui, e mesmo abaixo.
Então eu digo isso é uma bênção, no sentido que você não tem que pensar como
duro como fizemos semanas.
Mas também é um pouco de uma maldição em que não importa onde você usa uma variável em
PHP, pelo menos em um programa como este, é globalmente acessível para
melhor ou para pior.
Então você tem que ter em mente agora que suas variáveis ​​não pode ser indefinido.
Você pode ter definido outro lugar.
>> Mas o que é que eu vou fazer, em última instância?
Eu estou indo para armazenar dentro desse mundial variável como um valor do
contador chave o resultado de fazendo contra mais 1.
Portanto, esta é apenas a aritmética que faz o
incrementação do contador que.
E o fato de que eu estou armazenando que valor de volta aqui é meio para
essencialmente atualizar o banco de dados para lembrar que 123456789 utilizador esteve
aqui duas vezes.
E quando eu fazê-lo novamente na próxima vez que recarregar a página, ele vai verificar
meu selo mão e dizer, oh, 123456789 usuário tem agora
Estive aqui três vezes.
>> E então o que linguagens PHP e similares estão fazendo para nós é que eles estão tentando
como e onde e por quanto tempo para armazenar valores neste especial
superglobal.
E esse superglobal na próxima vez que visite a página é uma espécie de passe de mágica
pré-povoada, cheia de valores que estavam lá a última vez que você visitou,
se isso era um segundo atrás, uma semana atrás, ou em 2013, e agora estamos falando
sobre 2015.
PHP eo servidor web cuidar de tudo isso para você.
>> AUDIÊNCIA: [inaudível].
>> DAVID MALAN: Variáveis ​​em PHP são essencialmente global, a menos que você sempre
declará-los dentro de uma função, e, em seguida, eles são locais para
apenas a função.
Mas porque eu não tenho escrito qualquer funções, eles estão agora efetivamente
mundial ao longo de todo o meu arquivo aqui.
>> AUDIÊNCIA: Existe uma maneira para torná-los local?
>> DAVID MALAN: Existe alguma forma a torná-los local?
Só por envolvê-los em funções.
Que na última versão do PHP, você pode fazer isso com
uma função anônima.
Mas mais sobre isso no contexto de JavaScript.
Mas a resposta é não.
A resposta mais longa é sim.
Nice.
Boa pergunta quiz.
Tudo bem.
>> Então, por fim, a página em si é realmente muito simples.
Observe que uma vez que eu sair do modo PHP, lembre-se que todo este material para baixo
abaixo é só ir para obter espeto a matéria para o navegador.
O que é bom, porque eu quero enviar o usuário um pouco de HTML, mas eu quero
para atualizar dinamicamente que HTML.
E uma maneira que eu posso fazer é classificar de cair muito rapidamente de volta para PHP
modo, use aberto suporte de interrogação sinal de igual, e, em seguida, o valor de saída
do contador.
>> Ou, se isso parece um pouco enigmática, este sinal de igual é na verdade apenas alguns
açúcar sintático para este printf ($ contador).
Mas, francamente, isso é só um pouco feio e um pouco chato de digitar.
Então PHP muito bem oferece esse recurso onde você pode apenas dizer que mais
sucinta da mesma maneira.
>> Então, o que está acontecendo por baixo o capô?
Vamos olhar rapidamente na rede guia aqui para counter.php.
E deixe-me ir em frente e primeiro Vamos limpar os cookies.
Limpar dados de navegação Vamos desde o início do tempo.
Agora vamos voltar para cá.
Agora vamos recarregar a página.
E eu estou de volta a zero.
Porque o meu selo de mão foi lavado, Agora começa um novo cookie.
>> De fato, se eu olhar para o guia da rede e olhar para cabeçalhos de resposta, observe
que o aparelho está me enviando um cookie cujo nome é um pouco
arbitrariamente, mas o tipo de razoavelmente, PHPSESSID.
E isso está me mandando isso realmente número aleatório grande.
Não é um bom número.
Não é bem hexadecimal.
É uma espécie de seqüência alfanumérica, mas provavelmente é aleatória.
E esse é o selo de mão, de modo a falar que eu estou me referindo.
>> Enquanto isso, se eu clicar em recarregar e, em seguida, olhar para esta segunda linha para a minha segunda
pedido, observe agora que o meu pedido cabeçalhos incluem PHPSESSID iguala esta,
não set-cookie, mas apenas cookie.
E isso é a apresentação do meu navegador do meu selo de mão.
>> Então, agora como um teaser, e nós vamos falar mais sobre isso em uma semana ou assim, mas
de que forma isso faz você vulnerável, sua conta de Facebook
vulneráveis, e outros, tais contas vulneráveis?
>> AUDIÊNCIA: Se alguém tem o seu cookie.
>> DAVID MALAN: Sim, se alguém tem seu cookie.
Quero dizer, realmente, muito parecido com alguns de vocês poderia ter tentado a como um clube ou um
parque de diversões, se você tentar alguma coisa como este para copiar o selo, embora
para trás a mão de outra pessoa, e então ele ou ela apresenta como
conta própria, se ele realmente se parece idênticos, 123456789, então a teia
servidor aparentemente está indo só para confiar em que o usuário é você.
>> E isso é realmente um direito fundamental ameaça a qualquer momento você usar cookies
porque se alguém apenas satiriza assim falar o seu cookie, descobre o que
é, seja por realmente copiá-lo , olhando para o seu computador
e sendo assim, OK.
Bolinho de David é JJ3JIK e assim por diante, e, em seguida, eles são inteligentes o suficiente para saber
como classificar de enviar manualmente que biscoito a partir de uma ou de um navegador
programa eles escrevem, eles poderiam totalmente entrar em um site que você.
Não é tão difícil de fingir ser outra pessoa, a menos que revisitar p-set
dois, que introduziu o quê?
>> AUDIÊNCIA: Criptografia.
>> DAVID MALAN: Um pouco bit de criptografia.
Criptografia simples, pelo menos na Standard Edition, mas crypto
no entanto.
menos.
Assim, verifica-se se você criptografar todos estes cabeçalhos usando algo que você
pode agora saber mais familiarmente como SSL, secure socket layer, ou URLs https://
em seguida, todas essas coisas que estivemos olhando são realmente criptografado,
o que significa que é como se você não consegue ler o selo mão.
Apenas facebook.com pode, ou google.com, ou, neste caso, o aparelho pode
leia esse selo mão.
>> Tragicamente, porém, e mais uma vez, este é muito apropriado com o material NSA
de tarde, mesmo SSL é quebrável.
E na verdade não é tão difícil até mesmo quebrar a criptografia.
Não tanto por quebrar a criptografia, mas enganando o
navegador para descriptografar os dados prematuramente.
Mas, novamente, vamos provocá-lo com que em pouco tempo.
Por agora, basta ter medo.
É tragicamente tipo de verdade.
>> Tudo bem.
Então, onde é que isto agora nos deixa?
Bem, vamos fazer isso.
Vamos em frente e dê uma rápida provocação antes de fazer uma pausa.
E eu acho que nós vamos demorar um pouco mais hoje, mas vamos mergulhar
algo novo e sexy, que será aguçar o apetite para mais.
Então, isso é o teaser.
>> Então, SQL, começamos a falar sobre sempre tão brevemente última vez.
Você realmente vai sujar as mãos com alguns deles em-p definir sete.
E, em termos leigos, o que faz SQL -
S-Q-L -
para você?
O que é isso?
Sim.
>> AUDIÊNCIA: Vamos-lhe dados de acesso.
>> DAVID MALAN: Yeah.
É você deixar os dados de acesso numa base de dados.
Structured Query Language.
E isto é, essencialmente, um linguagem de programação.
Existem recursos de que não vamos mesmo usar em sala de aula.
Mas você pode efetivamente definir funções.
Eles são chamados armazenados procedimentos em SQL.
Mas nós vamos mantê-lo bastante simples e apenas usá-lo para algumas operações básicas
como a seleção de dados, inserção de dados, atualização de dados e exclusão de dados.
>> E você pode realmente pensar em um banco de dados, como um banco de dados SQL, como apenas
sendo Microsoft Excel.
Como o SQL se refere a um relacional base de dados, onde
relação significa apenas tabelas.
Linhas e colunas.
Então, qualquer coisa que você pode colocar em uma planilha assim ou o Google Docs,
você poderia colocar em um banco de dados SQL declarando uma tabela.
>> Agora, como você realmente acessar essa informação?
Bem, com comandos ou consultas como esta.
SELECT, INSERT, UPDATE e DELETE.
E para a maioria dos casos, estes são o quatro apenas ingredientes que você precisa para
fazer algo bastante poderosamente no conjunto de problemas sete.
>> Agora, de volta ao dia, você realmente interagir com um banco de dados em um
janela do terminal preto e branco em um prompt piscando assim.
E o banco de dados que estamos executando no aparelho é chamado MySQL, que é
motor de banco de dados livre e open source.
Se você Google e ler a Wikipedia artigo, você vai saber que o nome é
um pouco de transição para alguns versões do Linux.
Banco de dados de Maria é na verdade um garfo para falar de MySQL.
>> Longa história curta, a Oracle comprou a MySQL.
A Oracle é uma grande empresa.
As pessoas têm medo de que seria já não permanecem bastante como open source,
então este é apenas uma cópia do MySQL que é ainda livre, ainda open source, e
instalado no Fedora Linux por padrão.
>> Mas este é um tipo de dor no pescoço para se familiarizar com a
banco de dados desta forma.
Assim, incluir no aparelho CS50 uma ferramenta open source gratuito chamado
phpMyAdmin.
Apenas uma coincidência que é escrito em PHP.
Não há nenhuma base necessidade de PHP aqui.
Mas esta é apenas uma ferramenta baseada na Web que que baixado gratuitamente, instalado em
o aparelho, que nos permite ter uma interface gráfica do usuário com o qual
para explorar a base de dados de sete-p definida com que para criar novos bancos de dados,
dizer para o seu próprio projeto final se tivesse como e, finalmente, criar
sites dinâmicos como CS50 Finanças que lhe permitem consultar dados e
atualizar os dados dinamicamente.
>> Você não vai ter que usar apenas um arquivo de texto simples ou CSV.
Você pode realmente usar um banco de dados inteligente programa para que você possa executar mais
consultas sofisticadas do que apenas a leitura através de tudo de forma linear.
>> Assim, por exemplo, é isso que nós damos você fora da caixa para-p definir sete.
Esta é uma tabela com, aparentemente, pelo menos três colunas, uma das quais está
nome de utilizador, um dos quais é de hash, e o outro dos quais é ID.
>> Mas a coisa interessante, e apenas para destrinchar um pensamento aqui, nome de usuário
é, presumivelmente, já único, certo?
Quero dizer, a maioria qualquer site, se você tem um nome de usuário, não
Não pode haver dois Césares.
Não pode haver dois Malans.
Não pode haver dois jharvards.
A sua única.
Caso contrário, eles não sabem o que jharvard que realmente é.
Então, o que pode ser a motivação para também tendo uma terceira coluna da esquerda
lá chamado ID, o que parece um número que é semelhante única?
Parece um pouco redundante para mim à primeira vista.
Por isso pode ser atraente para ter não apenas nomes de usuários únicos,
mas também números exclusivos?
>> AUDIÊNCIA: Eles poderiam ter a mesma senha.
>> DAVID MALAN: As pessoas podem ter a mesma senha, com certeza.
Isso pode absolutamente acontecer.
Mas se eles têm esse nome de usuário único, I diria que isso não faz muito
matéria, porque se eles digitar seu nome de usuário, eu só preciso verificar a sua
senha, seu hash de facto.
Por que mais?
>> AUDIÊNCIA: Mais rápido pesquisando.
>> DAVID MALAN: Faster pesquisa.
Por quê?
>> AUDIÊNCIA: ID é apenas um.
>> DAVID MALAN: ID é apenas um personagem, ou para ser mais preciso, é um número,
por isso é provavelmente 32 bits ou algo assim.
Considerando que o nome de utilizador, aparentemente Jason Up de Hirschhorn não é uma espécie de
ridiculamente muito tempo, e que vai me levar muito mais tempo para string
comparar H-I-R-S-C-H-H-O-R-N, e talvez a / 0 ou algo assim, em ordem
para procurar Jason, ao invés de apenas dizendo-me dar o número do usuário dois.
Isso é 32 bits.
É um único INT que você tem que comparar.
E, de fato, é exatamente por isso que os bancos de dados tendem a atribuir IDs únicos para
linhas neles.
>> Agora, o que outros tipos de dados estão lá além de INT e, aparentemente,
cordas como este?
Bem, para ser mais adequada, Bancos de dados SQL, como
MySQL, têm campos CHAR.
E CHAR um pouco enganadora não é uma única CHAR.
Um campo CHAR em um banco de dados MySQL é um ou mais caracteres, mas é um
número fixo de caracteres.
>> Assim, por exemplo, se eu passar por cima de phpMyAdmin como você já deve ter ou
em breve um conjunto de problemas de sete, e eu vou para o meu banco de dados, e apenas por diversão,
vamos criar uma nova tabela chamada testar com apenas duas colunas.
Eu vou clique em Ir.
E isso vai se tornar muito familiar, especialmente quando você mexer
em torno de seu próprio país.
Aqui posso digitar ID para criar uma nova tabela do tipo INT.
Mas aqui eu pode digitar nome de usuário para recriar a tabela anterior.
E notem que eu tenho um grupo inteiro de tipos para escolher.
>> E isso também é por isso que phpMyAdmin é uma espécie de bom.
É uma espécie de auto-aprendizagem, em que você pode apenas uma espécie de ponto e clique, e
olhar para menus suspensos, e inferir que o que lhe dá poderes SQL.
>> E, de fato, se eu escolher CHAR, então eu tem que especificar o comprimento, ou como
diversos valores, quantos CHARs.
Valores muito comuns são coisas como 255, mas isso é um pouco longo.
Comumente é de oito para um nome de usuário.
Mas isso é um pouco pequeno estes dias.
Portanto, esta é uma decisão de projeto.
É 8 caracteres no máximo, 32, 255, 1000?
É realmente até você.
Mas um campo CHAR é um número fixo.
Portanto, escolha muito poucos e você é do tipo parafusado, se você quer um nome de usuário maior.
Escolha demais e que é a desvantagem?
>> AUDIÊNCIA: [inaudível].
>> DAVID MALAN: É um desperdício.
Assim como em C, se você tem uma maior pedaço de memória que você precisa, você está
apenas perdendo tempo e desperdiçando espaço.
Assim, como uma alternativa, existe VARCHAR, que resolve este problema
Duração do tratamento e não como um comprimento fixo, mas como o comprimento máximo, e usando um
número variável de caracteres, que, em seguida, tende a usar apenas o número de CHARs como você
realmente precisa.
Isso soa perfeito.
>> Por que não se livrar do Tipo de dados char, então?
O que poderia ser a desvantagem de usando VARCHARs, que soa
como se fosse uma bela vitória?
Sim?
>> AUDIÊNCIA: [inaudível].
>> DAVID MALAN: OK, muito bom.
Então, se todos os seus dados é o mesmo comprimento, qual é a preocupação?
>> AUDIÊNCIA: Porque você está desperdiçando dados, dizendo-lhes tudo.
>> DAVID MALAN: Então, se todos os seus dados é o mesmo comprimento, porém, eu diria
especificando que o comprimento máximo em VARCHAR não é diferente de
especificando um comprimento fixo sobre se CHAR você sabe que o número de antecedência.
Mas não é verdade, e eu vou classificar de extrair que a resposta à realidade
que ainda há um máximo, o que poderia ser irritante, especialmente se você
encontrar o nome de uma pessoa que está excepcionalmente longo que você não fez
antecipar.
E também é um pouco menos eficiente para realmente pesquisar sobre VARCHARs como
oposição à busca CHARs, especialmente para mesas compridas que têm lotes e
grandes quantidades de dados.
Portanto, aqui também, temática é novamente nenhuma escolha óbvia.
>> Então, só para lhe dar uma sensação de outro tipos de dados que podem ser de seu interesse
tanto para p-set sete ou o futuro, há INT.
Há BIGINT, que é como long long.
Ele tende a ser de 64 bits.
Há decimal, que você verá no o conjunto de problemas, que é um tanto
limpador resposta aos problemas que encontrado com flutuador e flutuando
imprecisão ponto.
E depois há DATETIME.
Há, literalmente, um tipo de dados que tem a aparência de um ano, um mês, um dia,
e uma hora, minuto e segundo.
>> Mas bancos de dados SQL também têm coisas que vou chamar índices.
E um índice é algo que você especificar ao criar a tabela de
fazer pesquisas e outras operações mais eficiente.
Especificamente, há algo chamado o índice primário que você poderia
declarar como se segue.
>> Fizemos isso para você com a tabela de usuários que te dar.
Mas repare se eu fosse recriar manualmente a tabela de usuários aqui dando
um nome de usuários.
Eu já especificado ID.
Eu especifiquei INT.
Eu especifiquei nome de usuário com máximo de 32 caracteres.
Mas se continuarmos a rolagem neste bastante ampla janela, observe que há uma
monte de outras coisas que eu posso especificar.
>> Um deles, posso especificar atributos como, você sabe o quê, isso
INT deve ser assinado.
Eu não quero que os números negativos, então vamos fazê-lo sem sinal.
Nulo não é relevante aqui porque Eu quero que cada usuário
têm um número ímpar.
Eu não quero que seja nulo.
>> Mas isso é interessante.
Eu posso especificar que ID seja o chave primária desta base de dados, ou é
texto único, ou é indexado, ou completo.
Assim, para fins de hoje, a longa história , principal meio curto que este deve
ser tanto conceitualmente e tecnicamente o campo que usamos para excepcionalmente
identificar os usuários.
>> Assim, quando olhamos para os usuários, esta é uma espécie de uma promessa de procurá-los principalmente por
que identificador exclusivo.
E o banco de dados irá garantir que, se você tem um número de usuário 3, você não pode
inserir fisicamente outro usuário com o mesmo número 3.
O banco de dados vai simplesmente se recusam para salvar suas alterações.
Que é uma coisa boa, porque você pode proteger-se de si mesmo. eu
>> Alternativamente, o nome de usuário.
Assim, a segunda linha, aviso, é o campo de nome de usuário.
Assim, a segunda linha aqui é nome de utilizador, como fizemos no canto esquerdo lá.
>> Então, o que mais eu poderia querer especificar?
Eu não estou autorizado, de acordo com o SQL, para especificar duas chaves primárias.
você pode especificar uma chave de conjunto, onde você olhar para ambos os campos, mas não podem
ser individualmente chaves primárias.
Então, isso é fora de questão.
Então, o que eu poderia querer escolher?
>> Bem, UNIQUE é semelhante em espírito a um chave primária, onde você especificar esta
campo deve ser único, mas é não vai ser o único
Eu uso o tempo todo.
E nós não estamos indo para usar este tudo o tempo para o que razão outra vez?
É mais lento, potencialmente, se é uma longa username.
É apenas um desperdício de tempo.
>> INDEX, por sua vez, especifica que é não vai ser único, mas eu gostaria
você trabalhar sua magia debaixo do capô para torná-lo mais rápido para mim
pesquisa neste campo.
Então, isso provavelmente não é relevante aqui.
Para nome de usuário, eu diria que UNIQUE é uma boa resposta.
Mas suponha que fizemos os usuários mais interessante do que apenas nomes de usuário,
hashes, e números de identificação.
E se deu às pessoas nomes completos?
E se nós lhes deu endereços e outros dados sobre eles?
>> Bem, se você especificar que uma coluna em uma banco de dados é indexado, isso significa que
MySQL ou Oracle, ou qualquer banco de dados você está usando, deve trabalhar a sua magia
e usar algum tipo de dados fantasia estrutura como uma árvore, ou uma trie, ou um
tabela hash, ou algo para garantir que quando você pesquisar dados usando
selecionar nesse campo em particular -
como eu mostrar a todos que vive em Oxford Street.
Uma consulta assim.
Se você tiver especificado de antemão que você quer um índice em que campo, o
pesquisas serão muito, muito mais rápido.
>> Se você não especificar um índice, o melhor você pode fazer é uma busca linear se
ele não está classificada.
Mas se você especificar INDEX, o inteligente pessoas que fizeram o banco de dados -
pessoas como você que agora conhece árvores e tentativas e tabelas de hash -
vai construir automaticamente um tal de dados estrutura na memória RAM para se certificar de que
essas pesquisas são muito mais rápidos.
>> FULLTEXT, entretanto, é semelhante em espírito, mas permite que você faça curinga
pesquisas, como eu mostrar a todos que mora em ruas que começam com a
letra O, por qualquer motivo.
Você pode fazer pesquisas curinga assim.
Ou coisas mais fortes, como mostram me todos os que tem a palavra -
me mostrar a todos cujo nome começa com uma carta particular.
Você pode pesquisar por palavras-chave desta forma.
Tudo bem.
>> Assim, oportunidades de design há potencial.
Há outros que eu vou acenar as mãos no.
Acontece que você pode ter mecanismos de armazenamento diferentes.
E isso é mais misterioso do que precisamos certamente para o problema de definir sete.
Por padrão, o que vocês estão usando algo chamado InnoDB.
Você verá menção a isso em algum lugar A interface do phpMyAdmin mais provável.
Mas sei que há outro projeto decisões que são de potencial
juros vêm projetos finais se você faz algo baseado na web.
>> Mas vamos fazer isso.
Vamos em frente e colocar isso no tela como um teaser para uma história
envolvendo você, um companheiro de quarto, e um copo de leite.
Vamos dar um dois minutos ou então quebrar aqui.
E se você pode ficar por aqui, vamos chegar para trás, olhar um pouco mais em SQL, e
em seguida, um pouco de JavaScript com -p definir oito em mente.
>> Tudo bem.
Então, vamos começar a pensar sobre um caso canto que pode muito facilmente surgir
no contexto da utilização de um banco de dados, ou francamente, mesmo usando as coisas do mundo real
como caixas eletrônicos para conseguir dinheiro.
Então aqui está um frigorífico.
Suponha que você tem um também em seu dormitório ou sua casa.
E você tem um companheiro de quarto, e ambos você realmente gosta de leite, por exemplo.
>> Então você chega em casa da aula um dia.
Ele ou ela ainda não voltou.
Você abre a geladeira.
Você realmente quer um grande copo de leite.
Não há leite.
Então, o que você faz?
Você fecha da geladeira.
Você agarra suas chaves.
Você sai para a praça.
E você começa na fila CVS àqueles coisas Self Checkout, que sempre
demorar mais tempo do que realmente ter caixas.
De qualquer forma.
>> Então, enquanto isso, dot dot dot, seu companheiro de quarto chega em casa e ele ou ela
da mesma forma tem um desejo ardente um pouco de leite.
Assim, ele ou ela abre a geladeira, olha para dentro, e oh, droga.
Não há leite.
Assim, ele ou ela vai para fora, acontece a ir para o outro CVS, que era apenas um
bloquear afastado por algum motivo, e ele ou ela fica na fila para comprar um pouco de leite.
>> Enquanto isso, você chega em casa, ele ou ela chega em casa, eo que fazer
você finalmente tem?
Duas vezes mais leite.
Mas você realmente não gosto leite muito.
Então agora você tem tanto leite que agora um deles só vai azedar
eventualmente.
Portanto, este é um problema muito ruim.
Certo?
>> Então o que aconteceu?
Então, fundamentalmente, este é o tipo de um exemplo ridículo.
Mas debaixo do capô, o que nós tivemos acontecer aqui é tanto de você verificados
o estado de algum pedaço de memória, a geladeira.
Ambos você verificou o estado de alguma variável.
Vocês dois tiraram uma conclusão que, em seguida, executado.
Mas, infelizmente, enquanto seu companheiro de quarto estava na loja, o estado desse
variável mudou, ele ou ela voltou e agora quer mudar o estado, mas
ele já foi mudado sobre ele ou ela.
E, claro, ele ou ela não teria ido à loja se eles sabiam
que já estavam a caminho.
>> Assim, no mundo real, como você pôde evitar esse problema, supondo que você tem
uma geladeira, você tem um companheiro de quarto, e você realmente gosta de leite?
>> AUDIÊNCIA: Comunicação.
>> DAVID MALAN: Comunicação.
OK.
Mas como você pode se comunicar?
>> AUDIÊNCIA: Deixe um recado.
>> DAVID MALAN: Deixe uma nota, certo?
Sempre deixar uma nota, por os fãs da série.
Tudo bem, então sempre deixar um bilhete, ou colocar verdadeiramente como um cadeado ou algo
na geladeira que mantém o seu companheiro de quarto de inspecionar o estado de
essa variável.
>> Agora, por que isso pode ser pertinente para conjunto de problemas de sete, ou para caixas eletrônicos.
Bem, imagine um mundo em um caixa eletrônico, onde você pode ser capaz de ir até um caixa eletrônico
máquina aqui, e outra caixa eletrônico aqui.
E isso acontece com bastante frequência.
E suponha que você tinha dois cartões ATM, que é possível obter.
E você entrar em ambas as máquinas efetivamente ao mesmo tempo, espero que
enquanto ninguém está olhando.
E então você digitar seu PIN aproximadamente ao mesmo tempo.
E então você faz uma consulta equilíbrio ver quanto dinheiro você tem.
E digamos que você tem $ 100 deixou em sua conta.
Então, basicamente ao mesmo tempo, você dizer um, zero, zero, entrar.
E espero voltar algum dinheiro.
>> Mas quanto dinheiro você pode receber de volta?
Agora, os computadores, no final do dia, especialmente se eles estão falando
servidores, não necessariamente fazer coisas na ordem em que é esperado.
>> Então suponho que o que acontece, por causa da qualquer rede problemas de velocidade lá
são, ou questões de CPU existem, ou nada disso, suponha que o
primeiro ATM verifica seu saldo e vê, oh, essa pessoa tem US $ 100.
Mas, então, se distrai porque talvez uma cópia de segurança está acontecendo e por isso é
abrandar.
Ou talvez durante a verificação, a rede conexão ficou um pouco mais lento porque
isso simplesmente acontece.
Eles são dispositivos físicos.
Então, enquanto isso, a segunda caixa eletrônico é fazendo a mesma pergunta.
Quanto dinheiro é que David tem? US $ 100 é a resposta.
Mas porque a primeira ATM ainda não enviou a mensagem subtrair US $ 100, ambos
ATMs ter inspecionado cofre do banco, vendo há 100 dólares lá, e agora
ambas as máquinas são potencialmente vai cuspir uma resposta.
>> Agora, isso é ótimo para você, em algum sentido se o que o banco faz, em última instância
é mudar o valor para menos de 100 por definindo a variável igual ao seu
conta bancária igual a 0, em oposição a fazer menos 100.
Agora, no pior caso para o Bank -
ou, no melhor para o banco, por sua vez, eles dão-lhe US $ 200, e
sua conta bancária agora mostra negativo US $ 100, o que realmente não faz
beneficiá-lo em tudo.
Mas o ponto é que esta corrida condição para a obtenção de dois companheiros de quarto
leite, ou para dois caixas eletrônicos que tentam obter dinheiro e alterar o estado de um cofre
ao mesmo tempo, existe alguma vez que você tem um banco de dados.
>> Agora, no conjunto de problemas de sete, esta questão surge no sentido de que se você comprar um
parcela de ações do Facebook, e em seguida para exemplo, você comprar uma segunda parcela de
Facebook estoque, você precisa fazer uma decisão como programador.
A fim de decidir como atualizar o banco de dados, a probabilidade de que você vai
tem uma linha para que o estoque, e este é uma maneira de implementá-lo.
E você vai ter uma ação do FB, que é seu símbolo de cotações da bolsa
para este nome de usuário, ou este usuário ID, o identificador único.
>> Mas a mesma história pode acontecer aqui.
Se você fizer um SELECT em SQL, como você verá no conjunto de problemas de sete, quando você vê,
oh, David tem uma partes de ações do Facebook.
Deixa-me mudar isso para ser duas ações, porque ele quer comprar um
segunda parte.
Mas suponha que David realmente tinha dois janelas do navegador abertas, ou supor que
é uma conta conjunta com dois cônjuges, e ambos estão tentando realizar
a mesma operação, existe, também, o existe potencial para uma decisão a ser
feita com base na anterior estado do mundo -
a conta tem uma ação -
e as duas pessoas ou dois servidores, agora tente dizer incrementá-lo para duas ações.
Mas, neste caso, você pode ter cobrado me dinheiro para ambas as partes, mas
incrementado apenas aquela vez.
>> Assim, em breve, o problema fundamental aqui, como com a piada sobre deixando um
notar, ou colocar um cadeado nele, é se duas pessoas, ou dois tópicos -
acho que volta a zero -
pode inspecionar o estado de alguma variável e, em seguida, tentar mudar essa variável,
mas essas duas coisas não acontecem no mesmo tempo, mas pode ficar interrompido
por outras coisas que estão acontecendo, os dados podem entrar em um estado muito estranho.
E você pode se beneficiar ou você pode sofrer no sentido do exemplo de dinheiro.
>> Assim, no conjunto de problemas sete, nós damos-lhe esta linha de código, que por muito tempo
Resumindo, resolve este problema no MySQL.
Esta muito longa instrução que não faz mesmo caber em uma linha na
tela aqui garante que a sua operação é o que se chama atômica.
Tudo acontece de uma vez, ou isso não acontece em todos.
Esta mesma frase longa não pode ficar interrompido parcialmente.
>> E o que ele faz é literalmente o que diz.
Insira em alguma mesa da seguinte três campos esses valores específicos
mas em chave duplicada, não faça uma inserção.
Faça uma atualização.
Então, isso é como fazer um SELECT e um INSERIR por assim dizer, ao mesmo tempo.
E o que é a chave que provavelmente é sendo referido aqui?
>> Acontece, e você vai ver isso em conjunto de problemas de sete de especificação, porque
nós já declarou que haja uma chave única nesta tabela particular tal que
você não pode ter várias linhas para o mesmo utilizador, com a
mesmo símbolo tostão estoque -
neste exemplo, aqui, é DVN.V um tostão estoque bobo que nós
referem-se na especificação.
Porque nós já declarou que ele seja único, o que isto significa é que se você
tentar inserir uma linha duplicada, você está em vez de ir para atualizá-lo sem
qualquer outra pessoa ter uma chance de mudar o estado do mundo, quer.
Assim, em breve, o que garante coisas são atômicas.
>> Mais geralmente, no entanto, as bases de dados como MySQL -
e você não precisa desse recurso para p-set sete, mas mantê-lo em mente para
o futuro -
apoiar o que são chamados de transações, onde você pode dizer
START TRANSACTION literalmente.
Você pode então executar duas instruções SQL.
E uma instrução SQL, como você verá in-p definir sete, parece um pouco
algo como isto.
Atualizar uma tabela chamada conta.
Definir a coluna equilíbrio igual a tudo o que a coluna de equilíbrio atualmente
é menos 1,000, onde o número, o número da conta, como o ID do usuário,
igual a 2, e, em seguida, atualizar conta dot dot dot.
>> Assim, em termos leigos, o que esses dois consultas parecem estar fazendo na
sentido real da banca?
>> AUDIÊNCIA: Transferindo-se para a poupança.
>> DAVID MALAN: Exatamente.
Transferência de fundos de uma conta para o outro.
E este é outro exemplo onde você realmente quer essas duas coisas para acontecer
ou não acontecer.
Você não quer algo para entrar no meio deles e potencialmente atrapalhar
a matemática, ou bagunçar o quanto dinheiro que você tem, ou quanto
dinheiro que o banco tem.
Então, o que é muito legal sobre transações no MySQL é que, e
bases de dados de forma mais geral, é que eles e pessoas inteligentes que já implementadas
esses recursos descobrir como fazer Certifique-se que ambas as coisas acontecem
ou não em todos.
>> E se você está realmente aspiram a fazer um site que é usado por pessoas em
campus, as pessoas no mundo real, fazendo algo no sentido de inicialização,
estes são os tipos de decisões de design que
tornar-se sempre tão importante.
Caso contrário, você começa a perder dados, perdem utilizadores, ou, no pior caso,
nós vimos aqui, potencialmente perder dinheiro.
Então, novamente, mais sobre isso em conjunto de problemas sete, bem como, talvez, para alguns dos
você em projetos finais.
>> Então vamos mudar essa imagem que tínhamos há pouco apenas em mais de uma maneira.
Então deixe-me ver se eu realmente pode -
nope, que se foi.
Aqui está.
>> Portanto, este é o lugar onde nós deixamos da última vez.
E acontece que nós estamos indo para atirar mais uma coisa na mistura por aqui -
uma linguagem chamada JavaScript.
Então JavaScript realmente se encaixa nesta parte -
e eu não queria muito deixar espaço suficiente, então isso não é agora em escala.
OK, isso é realmente patético.
OK, então isso é JavaScript.
Tudo bem.
Estou realmente fazendo um desserviço.
Tudo bem.
>> Então JavaScript é outra programação linguagem, e nosso passado, Se isso ajuda
reafirmar que não há muito mais dos hidrantes aqui.
Assim JavaScript é também uma interpretação linguagem, o que significa que você não
compilá-lo em zeros e uns.
Você só executá-lo.
Mas o que é fundamentalmente diferente com JavaScript geralmente é que você
não executá-lo no seu servidor web.
Ele não se correr na aparelho em si.
Em vez disso, ele é baixado por um usuário via HTTP em seu navegador -
Chrome, Safari, Internet Explorer, Firefox, o que for -
e é o navegador que executa este especial linguagem de programação.
>> Então, para ser claro, PHP, até agora, tem sido executado ou na linha de comando em
nossa janela preto e branco, em um servidor como o aparelho, um computador
como o aparelho, ou tem sido executado por um servidor web
rodando em um computador.
Mas o tema aqui é que, até agora, PHP foi executado do lado do servidor, de modo
o usuário eo navegador do usuário nunca vê uma linha de código PHP.
>> Na verdade, se você nunca abrir um navegador para seu site ou outro e você
realmente ver o código PHP em sua janela, alguém tem asneira.
Porque não é para ser enviada para um navegador da directamente.
É suposto ser executado e virou em algo como HTML.
>> Mas JavaScript é essencialmente o oposto.
É concebido para ser executado normalmente dentro da janela do navegador do usuário.
E que tipos de sites usam JavaScript seguida, nos dias de hoje?
>> Como literalmente cada site popular.
Cada site que vocês provavelmente usar uso diário JavaScript para o
mais simples e até mesmo o características mais quentes.
>> Então, algo como o Facebook Converse se você usar isso.
Como é que isso realmente funciona?
Bem, até agora, todas as coisas que tenho feito com HTML e PHP assume que
você puxe uma URL, e você pressionar Enter, e você vê algum conteúdo HTML.
E você clicar no link, que muda a URL, muda a página, e recarrega
algum novo conteúdo.
Clique em outra URL ou enviar um formulário, você se levado para outra página e
você vê algum conteúdo novo.
>> Mas usar algo como o Facebook Chat, ou Gchat, ou o Google Maps, raramente
faz toda a página de atualização de modo que você verá uma tela branca momentaneamente e
em seguida, um novo conteúdo.
Em vez disso, as páginas web hoje são dinamicamente sendo atualizado de novo e
novo e de novo todo o tipo de bastidores.
E verifica-se que quando você vai fazer a algo como o Facebook, ou Gchat,
ou Gmail, e as atualizações da página automaticamente sem recarregar a
tela inteira, o que aconteceu é que o navegador fez uma espécie de segredo
solicitações HTTP adicionais -
não para páginas web inteiras, mas apenas para pequenos blocos de dados, como o
mensagem instantânea que o seu amigo apenas enviou-lhe, ou a atualização de status que
alguém apenas lhe enviou, ou o tweet que alguém acabou de enviar.
É só fazer pequenos pedidos de de dados, e em seguida, usando JavaScript, este
linguagem de programação, para mudar o que a página da web parece sem a
servidor de ajuda, sem o servidor geração que HTML.
>> Assim, em breve, o JavaScript pode ser usado, em seguida, não só para buscar novos dados
o servidor sem recarregar um todo página ou enviar um formulário.
Ele também pode ser usado para a mudança o chamado MOD -
Document Object Model -
que é apenas a maneira extravagante para dizendo que a árvore de HTML
que vimos da última vez.
>> Então, para tranquilizar, JavaScript sintaticamente tão semelhante a C também.
Não há nenhuma função principal.
Você acabou de começar a escrever o código e serão executados, ou
interpretadas de maneira mais adequada.
Condições será parecido com este.
Não é diferente a partir de C ou PHP para essa matéria.
Expressões booleanas ou-ed juntos será parecido com este.
ANDed juntos semelhante a este.
>> Switches será parecido com este.
Por voltas será parecido com este.
While loops será parecido com este.
Do while será parecido com este.
>> Isso é novo.
Então JavaScript não tem um foreach construir, por si só, mas este constructo
para a variável i na matriz, e eu neste caso torna-se um valor de índice.
Portanto, é um pouco diferente do que foreach, embora as novas versões do
JavaScript estão saindo o tempo todo, assim mesmo esses recursos de linguagem
estão evoluindo.
>> E como um aparte, JavaScript nestes dias também pode ser usado em um servidor tal como
PHP usando uma estrutura chamada Node.js.
Um de CS50 TFs, Kevin, levou um seminário sobre Node.js que está disponível em
cs50.net/seminars.
Então, se você está curioso, saiba que você pode usar esta no lado do servidor como
bem, mas isso é uma tendência relativamente recente, mas um poderoso nisso.
>> Este é um pouco diferente.
Esta é uma matriz em JavaScript.
E o que lhe parece diferente contra C ou PHP?
Existem algumas histórias rápidas podemos dizer aqui.
O que está faltando em relação PHP?
>> AUDIÊNCIA: [inaudível].
>> DAVID MALAN: Sim?
Desculpe, dizer de novo?
>> AUDIÊNCIA: Não declarando o tipo de variável.
>> DAVID MALAN: Não estamos declarando o tipo de variável.
Então, na verdade, bastante como PHP, não estamos especificando os tipos de esta variável.
Em vez disso, estamos mais genericamente dizendo var para a variável.
Não temos de incômodo do PHP sinal de dólar, enquanto que tedioso
tipo, faz mais claro que algo é uma variável.
Enquanto aqui, nós somos uma espécie de volta ao A abordagem de C por apenas chamar um
variável com o nome que queremos para dar-lhe, como números.
E também como PHP, temos colchetes para a
valores dentro dessa matriz.
>> Assim, as variáveis ​​em JavaScript também pode ser assim.
Observe aqui esta é uma string chamada s, mas da mesma forma que nós não especificada
que é uma string.
Aqui, porém, é uma característica que não faz existe exatamente da mesma maneira em PHP,
mas um pouco semelhante.
Este é um objeto em JavaScript.
E os objetos são uma espécie de exército suíço Faca de uma estrutura de dados em que
pode usá-los para qualquer número de coisas.
>> Aqui, por exemplo, estamos declarando uma variável chamada cotação.
O tipo de variável que é um objeto.
Você pode pensar nisso como um struct C que tem as chaves e valores.
Symbol é uma chave.
FB é um valor, aparentemente um símbolo de ação.
Vírgula.
O preço é outra chave, e seu valor é aparentemente um ponto flutuante, ou um
número mais geral em JavaScript, de 49,26 dólares.
>> Então PHP não tem -
não temos visto em objetos PHP bastante assim, mas fizemos ver um analógico,
que era o que?
>> AUDIÊNCIA: [inaudível].
>> DAVID MALAN: Matrizes associativas.
Assim, enquanto o PHP tem arrays associativos cuja sintaxe é sempre um pouco para
diferente -
vimos os colchetes.
Vimos os símbolos setas estranhas.
JavaScript tem objetos, mas esta é principalmente uma diferença semântica e uma
sinônimo diferente por enquanto.
No entanto, como um aparte, PHP também tem objectos de uma maneira que Java e outros
línguas têm objetos em programação orientada a objetos.
Mas vamos usar estes apenas para os tipos de dados para agora.
Os objetos e arrays associativos.
>> Este pode torná-lo um pouco mais clara.
Aqui está o porquê de um objeto é útil.
Quando você deseja declarar um estudante, como Zamyla, podemos realmente
encapsular assim dizer no interior do referido objeto usando chaves como
antes de um monte de chaves e os valores aqui.
Temos uma identificação, uma casa, e um nome para Zamyla, seguido por um ponto e vírgula como
habitual no final.
>> Por aqui também, isso é um pouco diferentes, mas também muito potente
nos dias de hoje.
Aqui está uma matriz, e eu sei disso porque há um colchete up
superior e um colchete na parte inferior.
E isto é uma matriz de dados que digite aparentemente em JavaScript?
Esta é uma matriz de parece como três objetos.
E eu sei que é apenas um objeto por causa das chaves.
E note que há chaveta aberta, algumas coisas, perto chaveta, vírgula,
em seguida, um pouco mais, vírgula, e, em seguida, um pouco mais.
Então, isso é três argumentos separadas por duas vírgulas.
>> Portanto, esta é uma matriz de três objetos.
E cada um dos objectos a ser exibida um estudante ou funcionário de algum
tipo, cada um com um ID, casa, e nome.
Mas eu chamei este algo chamado JSON -
JavaScript Object Notation.
E isto é um formato de dados que realmente é tão popular e em
voga nestes dias que se você escrever um aplicação que utiliza o Facebook
API, a API do Twitter, realmente quase qualquer API lá fora nos dias de hoje,
incluindo alguns dos próprio CS50, o dados que você receber de volta não está na
formato CSV da velha escola.
>> Porque lembre-se que CSV é super simples.
Fica apenas a colunas separadas por vírgulas.
Dados JSON dá-lhe mais de metadados.
Ele associa uma chave com todos os valores assim eles não tem que simplesmente assumir que
a coluna de ordem zero é um valor, coluna uma outra, de duas colunas é outro.
Tudo em um objeto JSON aqui é uma espécie de auto-descritivo, porque cada
um dos nomes neste arquivo tem literalmente nome na frente dele como um
string.
>> Então, vamos dar uma olhada em um alguns exemplos aqui.
Deixe-me ir para dentro do aparelho.
E deixe-me ir para o nosso vhost diretório em público.
E deixe-me ir para o JavaScript diretório.
E vamos em frente e abrir dom-0.html, onde DOM significa apenas
Document Object Model.
É o material árvore para que Me referi anteriormente.
>> E deixe-me propor o seguinte.
Aqui está uma página web cujo corpo é bastante simples.
Então, aqui em baixo, na parte inferior, perceber Eu tenho um formulário.
Vimos aqueles antes.
Ele tem duas entradas, uma das quais contém um ID de nome, um dos quais tem um Tipo de
apresentar, e do primeiro um do tipo é texto.
Então, isso realmente soa bastante simples.
>> Vamos aqui.
Vamos voltar para esta página aqui.
Vamos entrar em localhost, e entra nosso diretório JavaScript, e ir para
dom-0, e aqui temos essa forma.
Então, isso é, aparentemente, tudo isso página faz.
Ele tem um campo de nome com um botão Enviar.
Mas eu não vou usar o PHP aqui.
Eu vou fazer tudo o lado cliente por assim dizer, em JavaScript da seguinte forma.
>> Observe que eu realmente dado o nome campo de entrada esta uma única
identificador, que será, na verdade, salva-me algum tempo em um momento.
E note que eu tenho apresentado uma outra tag na cabeça da minha página web, o
tag.
>> Portanto, é neste sentido que é JavaScript uma linguagem de programação do lado do cliente.
Neste caso, como CSS, eu coloquei em linha reta dentro do meu HTML.
Mas note que eu declarada uma função que parece um pouco com PHP
sintaticamente, mas esta é realmente JavaScript, porque mais uma vez, é
do lado do cliente no navegador.
E dar um palpite que isso vai fazer, mesmo que alguns da sintaxe
aqui é novo.
>> AUDIÊNCIA: Diga Olá para quem quer.
>> DAVID MALAN: Vai dizer Olá para quem visita esta página.
Então, como?
>> Então, observe, verifica-se em JavaScript há um alerta () função.
Esta é uma função muito triste que tipo de realmente só tende a incomodar os usuários.
Não é que você realmente deve usar normalmente, mas é um rápido e sujo
forma de uma espécie de impressão de algo a um utilizador gráfica
interface, como um browser.
Observe aqui que eu tenho um cadeia entre aspas simples.
Acontece que ao contrário de C, JavaScript pode realmente você tem uso único
cita, e, francamente, é só tipo da convenção estilística entre
JavaScript programadores usar aspas simples.
PHP, eles realmente têm um pouco significado diferente.
Mas, por enquanto, só sei que essa é a única razão.
A convenção em JavaScript é muitas vezes a usar aspas simples, mas poderíamos usar
aspas duplas em ambos os lugares também.
>> Então, isso é interessante.
Lembre-se da última vez que tivemos que imagem na tela que desenhou uma árvore
onde você tinha o nó HTML, eo cabeça nó eo nó corpo,
e, em seguida, algum texto.
Mas não houve um nó especial no muito superior que liguei para o documento.
Bem, acontece que em JavaScript, qualquer vez que você escrever um programa em JavaScript
em um navegador, você tem acesso a uma variável global especial.
Similares em espírito à superglobais do PHP, este é chamado em
todo documento minúsculas.
>> É como uma estrutura, mas esta estrutura também tem funções dentro dela.
Assim, um struct C só tem dados normalmente.
Mas um objeto JavaScript como este tecnicamente é também tem funções,
também conhecido como métodos, no interior do mesmo.
E você pode chamar uma função dentro de este objeto literalmente fazendo a sua
nome, ponto, e depois o nome a função, ou ainda método.
É apenas um sinônimo, realmente.
>> E o que essa função faz?
Você pode tipo de adivinhar o seu nome.
Obter elemento por ID.
Então, isso vai pesquisar a página da web, pesquisar a árvore, olhando para
tudo o que nó, elemento AKA, tem uma ID única de citação nome unquote.
E então o que é que eu vou fazer?
Eu estou indo para obter o valor dentro de esse nó na árvore, e eu vou
de alguma forma, dizer Olá a esse nome.
>> Então dê um palpite, mesmo que nós não temos vi isso ainda, o que fazer a mais
símbolos significam aqui e aqui, provavelmente?
>> AUDIÊNCIA: Concatenar.
>> DAVID MALAN: Concatenar.
Certo, e estes são apenas tipo de decisões de projeto
pessoas fizeram anos atrás.
No PHP, você concatenar coisas com pontos.
Em C, você saltar através de aros e várias funções como strcopy (call) ou
strcat () ou outras funções.
Mas em JavaScript, você usa trunfos.
Portanto, esta é apenas a concatenação três cordas -
Olá, um nome, e, em seguida, um ponto de exclamação.
>> Então, quando e por que essa função chamado embora?
Bem, dar um palpite do HTML na parte inferior.
Por que cumprimentar () chamado, ou quando?
>> Aparentemente, o melhor que eu posso dizer, em apresentar, quando este formulário é enviado,
Eu vou fazer o que for dentro destas citações.
E, especificamente, eu vou ligar para cumprimentar () e, em seguida, retornar false.
>> Bem, vamos ver o que a rede efeito aqui é o primeiro.
Então deixe-me ir em frente e escrever em, digamos, Loren, em Enviar.
Olá Loren.
Vamos ver se talvez este foi apenas uma implementação de sorte.
Não..
Então está digitando o que quer que nome eu realmente colocar lá.
>> Mas note que não está mudando.
A URL ainda é dom-0.html.
Não há register.php.
Não há segundo arquivo.
Não há nenhum atributo action.
Então, qual é essa falsa retorno presumivelmente fazendo?
Por que eu estou chamando cumprimentar () e, em seguida, retornando falso provavelmente?
O que normalmente acontece quando você clica Enviar em um formulário que ainda temos
visto na semana passada?
>> AUDIÊNCIA: [inaudível].
>> DAVID MALAN: Vai em algum lugar, certo?
Ele vai para um URL de destino.
Mas eu não quero que isso aconteça aqui.
Eu quero a minha página da web para ser completamente dinâmico como Gmail, onde uma vez que você é
lá, você ficar lá.
O URL não muda de um modo que indica a página inteira está recarregando.
Em vez disso, eu só quero mudar alguma coisa como imprimir algo
aqui na tela.
>> Bem, deixe-me limpar isso -se um pouco.
Deixe-me abrir não dom-0, mas deixe-me abrir dom-2.
Só para que você tenha visto alguma sintaxe aqui.
>> Acontece que o que acabamos de se está usando JavaScript cru.
Portanto, esta é verdadeiramente a linguagem JavaScript.
Alguns de vocês podem saber de uma biblioteca chamada jQuery.
>> Assim jQuery não é a mesma coisa como JavaScript.
É apenas uma biblioteca que realmente inteligente cara escreveu e popularizado como
que quase todos no mundo agora usa jQuery ao usar JavaScript.
E à primeira vista, honestamente, parece um pouco mais enigmática.
Mas você vai encontrar, especialmente se você for lá para o seu projeto final com web
desenvolvimento, você verá que este limpa as coisas e você economiza bastante
algumas linhas de código.
>> Então vamos olhar para como este formulário está funcionando.
Observe o que eu remover aparentemente do meu HTML?
Não há em enviar manipulador por assim dizer.
Não há nenhum atributo.
Porque você sabe, o que Eu realmente não gosto?
Eu me senti como se estivesse caindo em velhos hábitos lá.
Assim como ele estava começando a sentir-se desleixado se misturar tanto com CSS
HTML, porque você está meio que jogando línguas diferentes em todo o
lugar, da mesma forma que isso começar a se sentir como um mau caminho para ir até onde
Estou colocando o código JavaScript dentro da minha HTML em vez de factoring-lo.
>> Então essa é a lição aqui.
Em dom-2.html, estou factoring-lo.
E eu estou fazendo as coisas um pouco de forma diferente.
Por enquanto, eu vou acenar as mãos o que isso realmente
debaixo do capô.
Mas por agora assumir que esse primeiro linha de código nesta biblioteca
chamado jQuery significa apenas quando o documento está pronto, faça o seguinte.
>> Como as páginas da web podem ter algum tempo para carregar.
Você pode estar em uma internet lenta conexão, e pode estar girando
e girando, e, finalmente, ele é carregado.
Essa linha de código apenas diz esperar até a página inteira estiver pronto, o documento
está pronto, antes de executar este código.
>> E agora percebe, este é, provavelmente, o mais útil primeiro
tirar de jQuery.
Esta linha aqui é muito semelhante em espírito para essa linha por muito mais tempo aqui.
Considerando que o código JavaScript cru, não existe um objeto global documento que
tem uma função chamada getElementById () as pessoas que escreveram
jQuery simplificado que apenas dizer sinal de dólar, e, em seguida, dentro de
parênteses colocar duas citações, e, em seguida, colocar um símbolo de hash seguido pelo
ID exclusivo que você quer pegar.
Então, isso é equivalente a document.getElementById.
>> Enquanto isso, a submeter-se. Apenas significa em apresentação de qualquer forma você está
referindo-se à esquerda, ir em frente e executar isso.
Mas isso é agora a curiosidade também.
O que é estranho sobre o que Tenho destacado aqui?
Não só é uma espécie de sintaticamente novo, também há algo faltando.
>> AUDIÊNCIA: É só uma chamada de função?
Não é chamado de alerta?
>> DAVID MALAN: Yeah.
Bem, então alert () é baixo aqui, para ser justo.
Mas não há nenhuma menção de um nome, como você sabe, foo ou
algo aqui em cima.
E, de fato, esta é uma das características de JavaScript que é bastante
poderoso, mas também muito novo.
E PHP realmente tem isso também.
>> Deixe-me ir em frente e fazer algo bem rápido.
Deixe-me ir em frente e colocar isso aqui.
Deixe-me fazer isso.
Função.
Vamos chamar esse manipulador ().
A função de manipulador por assim dizer.
Algo que lida com alguma operação.
Deixe-me limpar o meu recuo.
E colocar isso aqui.
Yep.
OK.
>> Então agora eu tenho uma função chamada handler () que eu realmente não sei
o que ele faz ainda.
Ele só ainda tem essas coisas.
Gritos.
Demorou muito.
Vamos fazer isso.
Tudo bem.
Desculpe.
Tudo bem.
Deixe-me fazer isso.
OK.
Isso parece bom e em linha reta encaminhar agora.
Deixe-me fazer isso.
Faça isso.
E OK.
Então, agora, vamos colocar isso aqui.
Não há mais a programação em tempo real.
OK.
>> Então, agora, vamos voltar para onde a história começou.
Anteriormente, eu disse que essa linha aqui significa que quando o documento estiver pronto, vá
em frente e fazer isso.
O que eu quero fazer?
Bem, especificamente, eu quero ir em frente e faça o seguinte.
Executar esta linha de código, e em seguida o que eu quero que você faça é chamar este
funcionar quando o formulário é enviado.
>> Agora isso é o que é interessante.
Isto não é em si mesmo uma função.
Repare que eu não estou colocando parênteses aqui de uma forma normal.
Estou literalmente passando por uma função chamada manipulador () para outra função
chamado submit () como um argumento como mas é como uma variável.
E esta é uma das características de JavaScript, é si funções
são realmente apenas objetos.
Na verdade, eles são realmente apenas variáveis ​​de algum tipo.
E se o nome da função é manipulador (), não há nenhuma razão pela qual eu não posso
passá-la como um argumento daqui.
E isso significa que quando a forma com o ID de demonstração é
submetido, chamar esta função.
>> Mas agora, se eu desfazer de tudo isso, por que então eu talvez fazer
este um momento atrás?
Bem, esta é uma função anônima.
Porque, francamente, eu percebi por que eu sou se preocupar em perder tempo declarando uma
função chamada manipulador () apenas para chamar lo em um e somente um lugar?
Se eu não preciso do nome, e eu não precisa chamá-lo mais de um lugar,
vamos implementar a função bem onde eu precisar dele.
E assim, JavaScript e PHP apoiar o que são chamados de funções anônimas que
me permite fazer exatamente isso aqui.
>> Mas estamos apenas arranhando a superfície.
Vamos brincar com apenas um par exemplos finais aqui.
>> Se eu entrar em quote.php.
Observe que este é realmente um PHP função, um programa PHP, que eu escrevi
espera que um parâmetro HTTP chamado símbolo, e eu posso passar em
um valor como FB.
E se nós realmente olhar para a fonte código, isso está consultando um site gratuito
chamado Yahoo Finance, como p-set sete, e ele está retornando para mim
algo aparentemente o formato conhecido é JSON -
JavaScript Object Notation.
É apenas um objeto.
Observe as chaves, as citações, do cólon, e as vírgulas.
>> Agora, entretanto, isso é muito legal.
Porque eu provavelmente pode usar uma programação linguagem para gerar URLs
que se parecem com esta dinâmica, certo?
Eu posso mudar isso para o Google e voltar do Google
preço das ações de US $ 1,017.55.
Então, vamos ver se não podemos usar isso agora.
>> Deixe-me ir para ajax-0 aqui, que parece com o seguinte.
É apenas um site que tem um formulário com um botão.
Deixe-me aqui, vá em frente e digite YHOO para o símbolo das ações do Yahoo, clique em Obter
Quote, e agora percebe que eu comecei um alerta com 32,86.
>> Deixe-me realmente ir para uma versão mais extravagante desta página, versão dois, e
digitar digamos Microsoft, MSFT.
Obter cotação.
E agora perceber, nenhum alerta.
Observe onde diz preço a ser determinado?
Não é o mais simples dos exemplos que aponta para o que Gchat e Facebook
Bate-papo, e Gmail, e outros tais sites estão fazendo por realmente
mudar a página da web.
>> Observe isso.
Deixe-me recarregar a página.
Deixe-me abrir Inspector do Chrome.
Deixe-me ir para os elementos guia aqui.
Agora note, se eu aumentar o zoom até aqui e abrir isso, perceber que esta é a minha
HTML DOM - o meu modelo de objeto de documento.
Este é o meu HTML.
Mas agora percebe, mesmo que está acontecendo ser um pouco difícil de vê-lo em ambos
lugares ao mesmo tempo, se eu digitar no FB aqui em cima, observe a parte inferior
da tela só.
>> É realmente mudando meu HTML na mosca.
E está fazendo isso muito simplesmente fazendo algo assim.
Se eu abrir ajax-2, aviso implementação algo tão sexy como
que, apesar de ser muito feio, mas tão sofisticado como esse
funcionalmente, tem alguns HTML na parte inferior.
Mas note que eu usei para marcar.
Nós não usei isso antes, mas esta é como uma, mas não força
tudo em uma nova linha.
Ela só faz uma região retangular na mesma linha, essencialmente.
>> Observe que eu dei-lhe um ID de preço.
E acontece que, utilizando o mesmo Biblioteca JavaScript, eu tenho uma função
chamado quote () que é chamado sempre que o formulário é enviado.
E o que eu estou fazendo é isso.
Estou declarando uma variável em JavaScript chamado url, salvando o valor
quote.php? símbolo =.
Em outras palavras, eu mesmo estou começando para preparar uma solicitação HTTP, e depois
Estou concatenando para que com um plus qualquer que seja o elemento com o ID
de símbolo é, que o aviso é que campo de texto bem aqui.
Então, assim como tínhamos formas no passado.
>> E então ele se transforma em jQuery, se você chamar. val (), que chama de um val
função, uma função de valor, que recebe tudo o que o usuário digitou dentro
E, em seguida, todo o tráfego de rede o que acontece é isso.
$. GetJSON.
>> E, como um aparte, sinal de dólar é apenas uma notação abreviada.
É realmente jQuery.getJSON.
Tirem-me para JSON a partir desta URL, e quando o pedido vem de volta, chamar este
função e passar como argumento o que veio de volta a partir do servidor.
>> Portanto, em outras palavras, se eu voltar para a navegador, e eu voltar para quote.php,
o meu navegador está fazendo é ficar este bloco de dados.
E quando eu ir a esta página web aqui, perceber se em vez de ir para a rede
separador e limpá-la, e em seguida, digite algo como GOOG para o Google e ganhe
Citação, observe a página não se alterou.
Mas uma solicitação HTTP foi feito, eo que voltei aqui, se olharmos para o
resposta é um monte de JSON que acedida finalmente com
esta linha simples aqui.
>> Dados é o que foi obtido a partir do servidor.
O preço é o nome do chave que me interessa.
Então data.price me dá isso.
>> Agora, entretanto, e este é o último exemplo.
Você pode fazer ainda mais com a página.
Uma verdade, bem dois.
Nós podemos trazer de volta a tag, se você se lembrar disso.
Isso é JavaScript.
Nós podemos fazer isso.
Muito emocionante.
Vamos deixar isso como um cliffhanger.
>> Mas o mais empolgante, você pode fazer coisas como esta.
Se eu for para geolocalização-1, verifica-se que o Chrome sabe que estamos em
longitude latitude 42,37. -71,10.
Assim, há ainda mais lá à sua disposição.
Mas mais sobre isso na próxima semana.
Vejo você segunda-feira.