quinta-feira, 22 de julho de 2010

IT Crowd - The Game

Que tal ajudar as Indústrias Reinholm com seu novo sistema de suporte remoto?

Já assistiram a algum episódio do seriado britânico "The IT Crowd"? Bom acontece que agora eles também possuem um jogo disponível no site deles. The IT Crowd Game parece um daqueles jogos estilo "Tower Defense" mas neste jogo você deve proteger os computadores de seus clientes contra vírus e spams.

Ah! E recomendo a série, os episódios são muito bons e já estão na quarta temporada e com a quinta já engatilhada!

segunda-feira, 19 de julho de 2010

Randomicidade randômica

Cedo ou tarde todo mundo que começa a programar se depara com as funções que geram número aleatórios ou randômicos. Bom na verdade estas funções não são realmente aleatórias, elas são pseudo geradores de números aleatórios. Geralmente estas funções usam fórmulas matemáticas ou tabelas pré-calculadas de números. Existem também formas verdadeiramente aleatórias de se gerar números, usando-se por exemplo ruído atmosférico gerado por tempestades ou fenômenos da física quântica. Neste link você pode achar um artigo bem completo falando sobre as duas formas de gerar números aleatórios.

Voltando as nossas queridas linguagens de programação cabe uma pergunta aqui, o quão randômica é a função de gerar número aleatórios de cada linguagem?
Abaixo faço uma pequena análise visual das funções mais comuns de cada linguagem para geração de números aleatórios. Disponibilizo também o código fonte usado para gerar cada imagem.
Devo dizer que é uma análise sem muito rigor e que isso não deve ser visto como crítica a uma linguagem ou outra. Como é comum que recursos do sistema operacional sejam utilizados na hora de gerar os números é útil informar que todos os testes foram feitos usando-se o Ubuntu 8.10 versão de 32 bits.

Linguagem C



Eu usei o seguinte comanado para compilar este código:

cc -o c-rand $(pkg-config --cflags --libs cairo) c-rand.c
E como você pode ver é necessário ter a biblioteca cairo instalada. No linux não deve ser muito difícil de instalá-la, no Ubuntu um 'sudo apt-get install libcairo2-dev' deve bastar.

Java


A versão da máquina virtual usada foi "1.6.0_14". Para fazer funcionar é só usar os tradicionais javac e java.

Perl



A versão do Perl utilizada foi 5.10.0. Um comando ./nomescript.pl deve ser o bastante para executar o código. Lembre-se de dar permissão de execução ao script.

PHP



A versão do PHP usado para executar foi 5.2.6. Um comando php nome_arquivo.php deve ser o suficiente para rodar.

Python



O python utilizado foi o 2.5.2. Novamente um comando do tipo python nome_arquivo.py deve rodar o código sem problemas.

Ruby



O Ruby utilizado foi o 1.8.7. Um comando ruby nome_arquivo.rb deve fazer a mágica. Note que usei a biblioteca RMagick, provavelmente você precisará instalar esta gem para rodar o código.

Concluindo
Quanto mais uniforme a figura gerada menos aleatório foi o processo de geração dos números. Uma imagem que se destaca (de forma ruim) é a imagem gerada pela linguagem Ruby. Estas imagens são bem pequenas (elas foram ampliadas), tem uma resolução de 20x20. Ou seja, a função que gera os número foi chamada somente 400 vezes (20 * 20). Você pode alterar o código que desejar aumentado a resolução da imagem gerada (basta aumentar o valor da varável TAM) para ter um panorama melhor.
Para finalizar uma pergunta: Qual das linguagens você acha que é a mais randômica?

quarta-feira, 14 de julho de 2010

Aquela para perder a amizade

Em homenagem a Paul o polvo "vidente".
Sabe porque o polvo vai para a academia?
Para ficar moluscoloso.

Atenção! O Ministérido da Saúde adverte: Contar este tipo de piada para amigos, familiares ou parceiros pode acarretar em sérios danos a sua relação.

quarta-feira, 16 de junho de 2010

Acesso grátis a livros sobre Desenvolvimento de Games

Só uma dica rápida. O pessoal do site boingboing.net está fazendo uma competição de criação de games e através de uma parceria com o site Safari Books eles estão disponibilizando livros sobre o tema.

Mais detalhes é acessar aqui.

Os livros ficam disponíveis através do site da Safari Books, mas é bem fácil de usar a interface do site. Pelo que vi os livros ficam disponíveis por 30 dias, após isso você provavelmente deverá ter que pagar uma taxa. O site funciona no esquema de assinatura.

Estou lendo o livro Fundamental of Game Design. Espero conseguir terminar antes que o prazo final de 30 dias acabe. Boa leitura a todos!

domingo, 13 de junho de 2010

Ubuntu 10.04 - Lucid Lynx

Já faz algumas semanas que instalei a mais nova versão do Ubuntu, a 10.04, no pc do meu trabalho. E devo dizer que achei ele muito bom, a inicialização está bem rápida e gostei muito do novo visual.

Ainda estou me adaptando a mudança dos botões minimizar, maximizar e fechar das janelas dos aplicativos que agora ficam na esquerda (no trabalho ficam do lado esquerdo e em casa do lado direito), talvez tenha como configurar isso mas com eu gostei muito do sistema e penso em migrar meu pc pessoal para a versão 10.04 então vou deixar assim para ir me acostumando.

Depois do sistema instalado comecei a jornada de instalação dos meu softwares favoritos sem os quais eu não vivo sem. E como não poderia deixar de ser o PHP está entre eles. E me surpreendi após instalar o LAMP e perceber que a versão padrão do PHP nos repositórios oficiais é a 5.3.

Já a algum tempo eu queria poder ter a força de vontade de instalar esta versão no meu pc pessoal para experimentar as novas funcionalidades (closures no php deve ser demais!). Mas eu não sabia se meus projetos rodariam no php 5.3, se o CodeIgniter rodaria e não achei uma maneira fácil de instalar mais de uma versão do php na mesma máquina rodando lado a lado (talvez foi falta de ter procurado mais).

Com a versão 5.3 já instalada no pc do meu trabalho, onde eu também utilizo o CodeIgniter, eu pensei, "Vamos ver no que isso vai dar!". E não é que o CodeIgniter rodou bonitinho no php 5.3?! Fiquei aliviado com isso. Depois olhando nos fórums encontrei um post dizendo que eles tinham adaptado o código para ser compatível com a versão mais nova do PHP. A única coisa que deu errado foi uma chamada a função "eregi" que agora está marcada com deprecated, mas isso estava em um código desenvolvido internamente.

Aqui vão alguns links para o pessoal que necessita rodar o php 5.2 no Ubuntu 10.04:
http://randyfay.com/node/63
http://blog.hostweb.com.br/ubuntu-10-04-lucid-lynx-com-php-5-2-10-karmic-koala/hostweb
http://www.nickveenhof.be/blog/reverting-or-downgrading-php-53-52-ubuntu-lucid-lynx-1004

Eu não testei nenhuma solução porque vou continuar com o php 5.3, afinal, algum dia ele deve se tornar o padrão nos hosts espalhados pelo mundo.

quarta-feira, 28 de abril de 2010

Obtendo os arquivos editados em um período usando o Subversion

Onde trabalho usamos o Subversion. Não sou muito fã dele, talvez mais por não saber usá-lo muito bem.
Frequentemente me pego trabalhando em um conjunto de arquivos na minha máquina local testando e desenvolvendo alguma coisa e depois eu preciso enviar estas alterações para o servidor on-line (eu sei que é bem amador esta forma de trabalhar, mas onde trabalho não somos incentivados a mudar isso). Ao invés de mandar todos os arquivos ou ficar tentando lembrar o que foi mudado eu uso o seguinte comando para me dizer quais arquivos foram alterados no projeto dentro de um determinado período:

svn diff -r {'2010-04-28 22:00:00'}:{'2010-04-28 22:05:47'} | grep "Index:" > ~/diff

Um arquivo chamado "diff"  vai ser gerado no diretório home (se você estiver usando linux) com uma listagem de todos os arquivos alterados (que passaram pelo commit) no repositório entre 28/04/2010 ás 22:00:00 até 28/04/2010 as 22:05:47. O arquivo vai ficar assim:
Index: arquivo1
Index: arquivo2.php
...

Você também pode usar números de versão se quiser, por exemplo:
svn diff -r 13:17 | grep "Index:" > ~/diff

Neste caso todos os arquivos alterados entre a versão 13 e a versão 17 serão listados. Não se esqueça de remover as chaves ({}) do comando.

É isso aí, só uma pequena dica, espero que possa ajudar alguém.

quarta-feira, 21 de abril de 2010

Um poema de Piet Hein...

Só para compartilhar um pequeno poema que vi hoje enquanto lia o livro Dreaming in Code  de Scott Rosenberg:
The Road To Wisdom
The road to wisdom? Well, it's plain
And simple to express:
Err
and err
and err again,
but less
and less
and less.
Piet Hein

Uma tradução minha não-oficial e propensa a erros:
A Estrada para a Sabedoria
A estrada para a sabedoria? Bem, é fácil
E simples de expressar:
Errar
e errar
e errar de novo,
mas menos
e menos
e menos.


É isso aí. Recomendo muito o livro "Dreaming in Code".