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.