Aprendendo idiomas antigos


1)Descubra o sentido da escrita (da direita para a esquerda, ou da esquerda para a direita)
2) Descubra quais são os padrões dos símbolos (por exemplo, logo depois do “q”, costuma vir o “u”. E depois do “qu”, pode vir o “i” (“quietude”), o “e” (“quero”), ou o “a” (“qualidade”).
3) Utilize o aprendizado de máquina para criar um modelo da linguagem.
4) Valide a taxa de acerto da máquina, utilizando palavras já conhecidas.
5) Quando tiver um sistema confiável, você poderá utilizá-lo para completar inscrições danificadas.
6) Detecte padrões de textos incomuns. (quando somente sabemos inglês, e vemos um texto em holandesa, podemos identificar palavras que não são inglesas).
7) Como lemos os símbolos (Fonemas)? Princípio de Rebus (desenhos representam fonemas). Belief = Bee + Lief

Publicado em Aleatoriedades | Deixar um comentário

O principio da preguiça e a programação

O programador preguiçoso adora compilaçõesRetirado do ótimo xkcd

Já fazem alguns anos que eu assino a SKY, cujo pacote dá direito às opções que eu mais curto: Canais nerdscientíficos (Discovery, History, NatGeo, Discovery T&L), Canais musicais (VH1, PlayTV, VH1 MegaHits, Multishow), Canais de seriados (Warner Channel, FX, HBO, FOX), Canais de filmes (HBO, HBO2, MAXPRIME, HBO e, HBO2 e, HBO3, HBO3 e, SPACE, TNT, MGM, TCM, e mais outros). Nessa última parte é que a coisa complica, pois felizmente tenho várias opções disponíveis para assistir, embora tenha disponível um tempo um tanto quanto limitado.
O que eu costumava fazer era, assim que eu ligava a TV, passava canal a canal, para decidir o que eu poderia assistir ou não. O ideal era aqueles filmes que eu gostaria de assistir, e evitar aqueles filmes repetitivos (tipo Paranóia em FX, que passa quase que todo mês).
Mas, como eu tenho tentado ser mais preguiçoso em algumas tarefas, decidi automatizar essa tarefa árdua de entretenimento!
Para a minha sorte, a SKY tem uma programação em formato RSS, que permite ao programa que eu fiz saber o que vai passar na televisão, nos próximos 3 dias. Usando isso e a minha lista do Filmow, gerei a seguinte página de TV, que mostra quando e onde passarão os filmes que eu quero ver.
A página ainda sofrerá algumas alterações, dentre os quais (em ordem de prioridade):

  1. Exibir a lista ordenado pela data, e ordenado pela hora.
  2. Arrumar o CSS, e jogar um pouco de HTML, pois a página está MUITO feia!
  3. Tratar restrições de horário (não adianta indicar um filme às 10 da manhã, pois não estou em casa nesse momento, e muito menos indicar um às 23:15 da sexta-feira, pois também não estou em casa nesse dia da semana). Possivelmente os filmes OK para se ver estariam em verde, e os que não poderão ser vistos ficarão com fonte vermelha.
  4. Notificação por email, com a agenda do dia dos filmes que você deverá ver.
  5. Bolar um aplicativozinho Android, que mostra em tempo real a sua programação.
  6. QuandoSe eu tiver algum dia o SKY HD, tentar bolar uma maneira de agendar a gravação automaticamente desses filmes. Assim, eu nem precisaria de agendar os filmes. Bastaria vê-los!
Publicado em Programação | Com a tag , , , , | Deixar um comentário

Jogos Web em PHP

Cool!Sim, a programação de jogos é como cutucar onça com vara curta

Nas últimas semanas, eu tenho voltado o meu foco em programação do Python para o PHP, devido a uma série de motivos.
Me ocorreu que, utilizando programação e os meus conhecimentos de Web design, eu poderia realizar uma de minhas metas futuras, que está relacionado à um jogo Web.
Normalmente, quando temos uma ideia desse tipo, normalmente a deixamos de lado, e nos esquecemos dela. Eu espero que isso não aconteça nesse caso.
Ao se programar um jogo em PHP, os seguintes itens serão necessários:

  1. Lápis e papel. Eu estou criando um jogo, mas necessito de um planejamento. Como tudo irá interagir? Em um jogo de máfia tipo Mafia Wars, seria necessário escrever alguma história, alguns locais para cenário, tipos de unidades (ladrões, negociantes, etc), como simular uma batalha, como os pontos são marcados, como avançar no jogo, como vender FacebookCash para recarregar a energia do personagem, etc. Somente depois de terminar isso, você pode ir para a etapa seguinte.
  2. Você precisará de um host web que possa lhe suprir uma base de dados mySQL, que tenha PHP habilitado, e que consiga rodar cron jobs, e cujo nome seja Dreamhost.
  3. Liste as páginas que você precisará baseado no que você escreveu no papel, e desenhe alguns fluxogramas para o seu código.  Talvez até você possa escrever algum pseudocódigo para os diversos eventos que você planejou.
  4. Leia e estude a linguagem PHP. Então você poderá começar com coisas simples, tais como script para login e como se conectar com o banco de dados (Nessa hora, lembre-se: o Google é seu amigo).
  5. Codifique, e aprenda codificando. Trabalhe arduamente e o resultado será decepcionante glorioso!

Retirado e traduzido desse site. Se eu me animar, quem sabe eu crie algum jogo em PHP?

Publicado em Programação | Com a tag , | Deixar um comentário

Porque as sociedades colapsam?


No vídeo acima, Jared Diamond explica o conjunto de fatores que leva as sociedades ao colapso:
1) Impacto humano
2) Fatores ambientais
3) relação com sociedades vizinhas amistosas
4) relação com sociedades hostis
5) político, econômicos, sociais
Em seu livro, ele também cita doze fatores que levaram civilizações antigas ao colapso total:

  1. Deflorestamento e destruição de habitat
  2. Problemas de solo
  3. Problema de gerenciamento de água
  4. Caça excessiva
  5. Pesca excessiva
  6. Efeitos de espécimes introduzidas ou espécies nativas de determinado ambiente
  7. Superpopulação
  8. Impacto das pessoas no aumento da renda per capta

Para mais informações sobre outros diversos assuntos, vejam lá no site do TED.

Publicado em Aleatoriedades | Deixar um comentário

Como os emuladores funcionam

A área de emulação é muito ampla e complexa. A seguir, serão apresentadas os componentes básicos, apenas. É recomendado que se tenha algum conhecimento de como funcionam os processadores internamente, assim como um tantinho de assembly (que, notem, é diferente de assembler).

Ideia básica
O emulador toma conta do processador e dos componentes do equipamento. Depois, cada componente é conectado, da mesma maneira que é feito com os fios e circuitos físicos.

Emulando o processador
Há três maneiras de se emular um processador:

  • Interpretação
  • Recompilação dinâmica
  • Recompilação estática

Seguindo qualquer um desses caminhos, você terá um pedaço de código que modifica o estado interno do processador e interage com o “hardware”. Estado do processador é um conglomerado de registrador de processador, gerenciador de interrupções, etc, para um determinado processador.  Para o 6502, você teria um número de inteiros 8-bit representando registros: A, X, Y, P, e S. Você também teria um registrador de 16-bits PC.
Com interpretação, você começa no PI (Ponteiro de Instrução — também chamado de PC – Contador de programa), e lê a instrução da memória. Seu código varre essa instrução e usa a mesma para alterar o estado do processador como especificado pelo processador. O problema com interpretação é que é muito lenta. A cada instrução dada, tem-se que decodificá-la, e realizar a operação solicitada.
Com recompilação dinâmica, você também intera pelo código assim como na interpretação, mas ao invés de executar você monta uma lista de operações. Uma vez que se atinja uma instrução de bracha, você compila a lista de instruções em código de máquina para a plataforma hospedeira, faz um cache desse código e a executa.
Então quando você manda um determinado grupo de instrução novamente, você tem apenas de executar o código a partir da cache. (por sinal, a maior parte das pessoas não fazem realmente uma lista de instruções, mas sim as compilam em código de máquina “on the fly”. — isso o deixa mais difícil de otimizar, mas está fora do escopo responder a essa pergunta, a não ser que haja interesse suficiente)
Com recompilação estática, você faz o mesmo que na recompilação dinamica, mas você segue as brechas. Você acaba construindo um trecho de código que representa todo o código do programa, o qual pode ser executado sem interferência posterior. Isso seria um grande mecanismo se não fosse pelos seguintes problemas:

  • Código que não está no programa que começa com (ex. compressed, encrypted, generated/modified at runtime, etc) não será recompilado, então não irá rodar.
  • Foi provado que achar todo o código em um determinado binário é equivalente ao Halting problem.

Esses se combinam para fazer com que a recompilação estática inviável em 99% dos casos. Para mais informações, Michael Steil fez uma ótima pesquisa em recompilação estática — a melhor que eu já vi.

O outro lado da emulação de processador é a maneira pela qual você interage com o hardware. Isso tem dois lados:

  • Timing do processador
  • Gerenciamento de interrupções

Timing do processador:
Algumas plataformas — especialmente as mais velhas como NES, SNES, etc — requer que seu emulador tenha timing estrito para ser complemtamente compatível. Com o NES, você tem  o PPU (pixel processing unit, unidade de processamento de pixel) que requer que a CPU ponha pixels na sua memória em um momento preciso. Se você usa interpretação, você pode contar ciclos facilmente e emular o timing apropariado; com recompilação dinâmica/estática, as coisas são bem mais complicadas.

Gerenciamento de interrupções:
Interrupções são o mecanismo principal que a CPU comunica com o hardware. Geralmente, seus componentes de hardware irão dizer à CPU que interrupção ela cuida.
Isso é bem elementar — quando o seu código gera uma determinada interrupção, você olha na tabela de gerenciador de interrupção e chama o callback apropriado.
Emulação do hardware:

Há dois lados em emular um determinado dispositivo de hardware:

  • Emulando as funcionalidade do dispositivo
  • Emulando as interfaces do dispositivo atual

Tome o caso do disco rígido. A funcionalidade é emulada ao se criar a armazenagem, rotinas de leitura/escrita/formatação, etc. Essa parte é geralmente elementar.

A interface atual do dispositivo é um pouco mais complexa. Isso é geralmente uma combinação de registros de memória mapeada (ex: partes da memória que o dispositivo observa para mudanças para fazer sinalização) e interrupções. Para um disco rígido, você pode ter uma área mapeada na memória aonde você lê comandos, escreve, etc, então lê os dados novamente.

Eu iria em mais detalhes, mas há um milhão de maneiras que você poderá ir com isso. se você tem quaisquer questões específicas, sinta-se livre para perguntar e eu adicionarei as informações.
Eu acho que fiz uma boa introdução aqui, mas há uma tonelada de áreas adicionais. Eu estou mais do que feliz de ajudar com qualquer pergunta. Se fui vago em alguma parte, é devido à complexidade do assunto.

Post fortemente inspirado na excelente postagem vista no Stack Overflow.

Publicado em Programação | Com a tag , , | Deixar um comentário

O Raindrop é lançado!

No dia 23 de Novembro de 2009, foi lançado o Raindrop, que promete uma quase revolução na forma como os usuários da internet trocam mensagens entre si.

Em suma, o Raindrop terá como objetivo ser um tipo de “meio de campo” entre a grande infinidade de redes sociais disponíveis, tais como: emails, Twitter, Flick, Youtube, blogs, e tudo o mais que tiver uma API aberta.

Ainda na versão inicial e experimental (0.1), os desenvolvedores buscam uma forma de disponibilizar um arquivo único para instalação. Ou seja, quem quiser se aventurar para ver como é esse sistema, terá de compilar o mesmo a partir do código fonte. tenha em mente também que os serviços iniciais resumem-se ao Twitter e o Gmail.

Para quem quiser colaborar de outras formas que não envolvam programação em Python e análises de CouchDB, há um grupo no Flickr que discutem possíveis formas de interface gráfica do projeto.

Aguardem mais notícias sobre essa ferramenta num futuro próximo…

Publicado em Mozilla | Deixar um comentário

XPCOM: Manual de uso do proprietário

Descrição do item:
É um componente multiplataforma, semelhante ao COM do Windows (e não, não é a porta COM. É outra coisa, bem diferente).
O XPCOM pode ser implementado em diversas liguagens, tais como JavaScript, Python, ou C++.  Ela já trás de fábrica rotinas prontas para acesso a arquivos, gerenciamento de memória, estruturas de dados. A maioria dos componentes não estão ligados ao núcleo central, sendo fornecidos por outros componentes, ou por meio de extensões.

Para mais informações, visite:
https://developer.mozilla.org/en/xpcom

Publicado em Mozilla | Deixar um comentário

Songbird: Mais do que o olho pode ver

Meses atrás, eu fiz a atualização do meu computador, do Windows XP para o novo Windows 7. Obviamente, tive de fazer backup das informações importantes (tais como gigas e gigas de fotos de viagens e das minhas músicas).
Mas, eis que reinstalo o Songbird, faço o restore dos dados, e, ao iniciá-lo pela primeira vez, ele são achou nenhuma das minhas músicas.
A explicação para isso era elementar: O diretório padrão de usuário mudou. No Windows XP, o diretório dos usuários é C:Documents and Settings/Usuário1. No windows 7, eu restaurei as músicas em outro diretório(no caso, D:/Músicas/Usuário2).
Para resolver isso, a maneira mais fácil (pois tenho muitas músicas, todas com meta-dados cadastrados, avaliados, e categorizados) é substituir o diretório na base de dados do Songbird, que é um minúsculo arquivo SQLite.
Eu no caso usei uma extensão do Firefox chamada SQLIte Manager, que consegue abrir e manipular essas bases de dados.
Etapa 1 – Selecionando as músicas que estão cadastradas no diretório antigo:
SELECT *
FROM media_items
WHERE content_url LIKE
“%c:/documents%20and%20settings/usuario1/meus%20documentos/minhas%20m%c3%basicas%”

Etapa 2 – Selecione todos os registros da consulta, e exporte como SQL
Etapa 3 – Abra o arquivo SQL gerado na etapa anterior, e substitua no bloco de notas:
De: “c:/documents%20and%20settings/usuario1/meus%20documentos/minhas%20m%c3%basicas”
Para: “d:/usuario2/m%c3%basicas/Songbird%20Music”
De: “someTable”
Para: media_items
Etapa 4: Limpe a tabela atual no SQLIte Manager
Etapa 5: Renomeie a tabela atual
Etapa 6: Crie uma cópia vazia da atual
CREATE TABLE “media_items” (
media_item_id integer primary key autoincrement,  /* implicit index creation */
guid text unique not null, /* implicit index creation */
created integer not null,
updated integer not null,
content_url text not null,
content_mime_type text,
content_length integer,
content_hash text,
hidden integer not null check(hidden in (0, 1)),
media_list_type_id integer,
is_list integer not null check(is_list in (0, 1)) default 0
)
Etapa 7: Cole o novo código SQL
Pronto!

Provavelmente, o SQLite Manager não conseguirá limpar a tabela atual, daí o trabalho adicional de criar uma cópia, e depois renomear.
Obs: Lembre-se sempre de ter um backup da base, e de acessar a base SQLite com o Songbird fechado!

Publicado em Mozilla | Deixar um comentário

The (Song)Bird is the Word!

Recentemente, logo após migrar do Windows XP para o Windows 7, vi que as músicas do Songbird não tocavam, e que o diretório monitorado não foi achado.
Foi aí então que eu percebi que o banco de dados SQLite usado pelo programa armazena a localização das minhas músicas pelo endereço completo (no caso, na pasta do meu usuário em Documents and Settings). Mas agora as músicas estavam em outro diretório (uma subpasta de Users). Para resolver isso, eu usei a extensão SQLite Explorer, para fuçar no banco de dados principal do Songbird. Uma vez conectado, achei a tabela que cadastra as músicas, exportei a tabela como SQL, fiz uma substituição nos diretórios, limpei a tabela, reinseri os dados via SQL, e inciei o Songbird.
O aviso de diretório monitorado ainda apareceu, mas as músicas agora estão tocando sem problemas. Mas, inexplicavelmente, perdi as minhas listas de execução (não sei se por conta do backup, ou se foi por conta desse hack).

De qualquer modo, fica a dica, caso alguém passe por situação semelhante.

Publicado em Mozilla | 1 comentário

Ações Marketeiras da Mozilla – Parte um: Hei, estamos na imprensa

Pois é, iniciarei uma nova série de artigos, mostrando um pouco como o Marketing da Mozilla agiu em alguns eventos importantes, de como a União faz o Açúcar a força, etc e tal.

Como começou?
Em seu primeiro ano, o firefox contou com o impressionante número de 100.000 usuários.
Para evidenciar esse rápido crescimento, resolveram exibir um anúncio no New York Times, na edição de 16 de dezembro de 2004. A página continha o nome de centenas de pessoas que contribuíram para o financiamento para o lançamento do Firefox 1.0.

Mas a história não parou por aí…
E, em 2006, na ocasião de lançamento do Firefox 3.0, a fundação Mozilla tentou quebrar o recorde no Guiness de software com maior número de downloads, no período de 24 horas. E conseguiram! Nesse período, 8.002.530 pessoas fizeram o download do navegador.

E agora?
Qual será a próxima do Firefox não poderemos saber. Quem sabe alguma ação apareça no lançamento da vindoura versão 4.0?

Ação de marketing em 2004

http://en.wikipedia.org/wiki/SpreadFireFox#Advertising

Ação de lançamento do Firefox3 – Record do Guiness:

http://www.spreadfirefox.com/en-US/worldrecord

http://br.mozdev.org/drupal/2008/06/enquete-download-day

História da Mozilla:

http://en.wikipedia.org/wiki/Mozilla

http://pt.wikipedia.org/wiki/Mozilla

Publicado em Mozilla | Deixar um comentário