domingo, 4 de outubro de 2009

Scheme - Uma linguagem folclórica


O Scheme é um dialeto da famosíssima linguagem LISP, criada pelo cientista da computação John McCarthy, inspirada pela teoria matemática chamada de cálculo lambda. LISP também foi amplamente utilizada em pesquisas na área de inteligência artificial e foi provavelmente dela que surgiu o conceito de lista encadeada.

Eu não faço a menor idéia de como é hoje a linguagem LISP para quem quer trabalhar como programador, mas eu resolvi aprender essa linguagem devido ao fato dela ser uma linguagem que implementa muito bem o paradigma de programação funcional e como até hoje eu só aprendi um pouco de linguagens estruturadas, como a linguagem C, e um pouco de linguagens orientadas a objetos, como Python e Ruby, resolvi conhecer qualé a desse paradigma. Tá, eu sei que Python e Ruby são multi paradigma, mas elas dão ênfase na programação orientada a objetos!

Mas, voltando ao assunto original, como não quero trabalhar como programador, acho que posso me dar ao luxo de aprender qualquer tipo de linguagem, por menos prática que ela seja, apenas pelo prazer de aprender. E um outro motivo para eu querer aprender Scheme é que o Emacs usa elisp, mais um dos dialetos de LISP, e aparentemente tem uma galera querendo fazer o Emacs funcionar também com Scheme. Só que não faço a menor idéia de como é a compatibilidade do Scheme com Elisp...

Obviamente, Emacs também é uma excelente ferramenta para programar em Scheme! Ouvi falar que muita gente, mesmo os defensores da seita do VI, largam seus editores/IDEs/SOs favoritos apenas para programar Scheme no Emacs!

Aprendo Scheme por causa do Emacs, e aprendo Emacs por causa do Scheme, parece que caí num ciclo vicioso, mas não, eu queria aprender ambas as coisas desde o início.

Bem, deixa de enrolação, esse texto era sobre o que eu tenho feito feito para aprender Scheme, usando o Emacs e por que tudo isso é muito divertido. Então, como usar decentemente o Emacs para programar em Scheme?

A primeira coisa é decidir qual interpretador de Scheme usar, eu escolhi o Guile. O interpretador GNU Guile, não o personagem do street fighter!

Agora basta configurar o Emacs para usar o Guile, para tal, basta colocar no ~/.Emacs a seguinte linha:

(setq Scheme-program-name "guile") ;; Sonic boom!

Então basta recarregar o Emacs ou ir deixar o cursor no final da linha anterior e mandar o Emacs executar o código elisp: C-x C-e.

Agora vem a parte mais legal, que é a integração do Emacs com o interpretador guile, que funciona bem que é uma maravilha! Eu faço assim, sempre que vou estudar Scheme eu abro duas janelas no Emacs, deixo uma para escrever o código e outra com o interpretador Scheme.

Conforme eu programo, eu peço para o Emacs enviar uma linha ou um bloco de texto direto para o guile, assim eu consigo testar pedaços do programa em tempo de programação, sem ter que ficar montando um programa inteiro para só depois analisar o que um trecho de código faz.

Bem, pode ter sido confuso isso que descrevi acima, mas funciona assim, eu primeiro digito C-x C-3 para abrir uma janela nova, então vou na segunda janela, executando C-x o, nessa segunda janela eu executo o comando M-x run-Scheme e o interpretador fica rodando. Voltando para a primeira janela já podemos começar a programar, então vamos tentar digitar o mais clássicos programa de todos os tempos, um hello world em Scheme! Digite o seguinte código na janela para programar:

(display "Hello World!")

Agora, com o cursor no final da string, execute C-x C-e, e tcharam! o Emacs enviou a linha inteira para o interpretador, que, err, interpretou o código e mostrou a saída! Bem legal, hein?

E ainda dá para fazer mais, dá para enviar um bloco de texto inteiro para o interpretador, e é bem fácil, primeiro você escreve um código que tem mais de uma linha, então seleciona o bloco e em seguida você roda C-x C-r. Aqui vai um exemplo de código para você testar:

(define (factorial n)
  (if (= n 1)
    1
    (* n (factorial (- n 1)))))

(factorial 30)

Se você não se lembra como se seleciona um trecho de código usando Emacs isso é realmente muito simples, basta apertar M-x espace com o cursor onde você quer que o bloco comece, então movimente o cursor até o final do bloco e toda a região delimitada pela posição atual do cursor e a parte onde o início do bloco foi marcado. Agora é só executar C-c C-r.

Espero que as informações acima sirvam para quem está começando com Scheme e queira usar Emacs para programar e, caso você comece a estudar Scheme também, fale comigo e podemos aprender um pouco juntos, discutir umas idéias, trocar uns códigos e coisas assim. Se tiver curiosidade, deixe um comentário ou entre em contato.

sábado, 12 de setembro de 2009

RE: Your Brains

Alguém há algumas semanas me enviou um mp3, o nome do arquivo é Re: Your Brains. Não faço a menor ideia de quem foi que enviou e acabei deixando o mp3 aqui largado no meu Desktop com um monte de outros arquivos aleatórios.

Sem querer deixei o ponteiro do mouse em cima do arquivo e a música começou a tocar, primeiro eu me assustei, pois eu não tinha mandado meu computador fazer nada, mas logo em seguida percebi o que tinha acontecido e resolvi ouvir a música. E a música é bem legal, tanto pela sonoridade quanto, e principalmente, pela letra! Confiram:




RE: Your Brains

Heya Tom, it's Bob,
From the office down the hall.
It's good to see you buddy,
How've ya been?
Things have been okay for me,
Except that I'm a zombie now.
I really wish you'd let us in.
I think I speak for all of us when I say I understand
Why you folks might hesitate to submit to our demands,
But here's an FYI - you're all gonna die, screaming.

All we wanna do is eat your brains
Were not unreasonable,
I mean no-one's gonna eat your eyes
All we wanna do is eat your brains
Were at an impasse here,
Maybe we should compromise.
If you open up the door,
We'll all come inside and eat your brains.

I don't wanna nitpick Tom, but is this really your plan -
Spend your whole life locked inside a mall?
Maybe that's okay for now,
But someday you'll be out of food and guns,
And you'll have to make the call.
I'm not surprised to see you haven't thought it through enough -
You never had the head for all that 'bigger picture' stuff.
But Tom, that's what I do,
And I plan on eating you, slowly.

All we wanna do is eat your brains
Were not unreasonable,
I mean no-one's gonna eat your eyes
All we wanna do is eat your brains
Were at an impasse here
Maybe we should compromise
If you open up the door,
We'll all come inside and eat your brains

I'd like to help you Tom,
In any way I can.
I sure appreciate the way you're working with me.
I'm not a monster Tom - well, technically I am...I guess I am...

I've got another meeting Tom;
Maybe we could wrap it up.
I know we'll get to common ground somehow.
Meanwhile I'll report back to my colleagues,
Who are chewing on the doors.
I guess we'll table this for now.
I'm glad to see you take constructive criticism well
Thank you for your time, I know we're all busy as hell.
And we'll put this thing to bed,
When I bash your head open.

All we wanna do is eat your brains
Were not unreasonable,
I mean no-one's gonna eat your eyes
All we wanna do is eat your brains
Were at an impasse here
Maybe we should compromise
If you open up the door,
We'll all come inside and eat your brains

domingo, 30 de agosto de 2009

Pornophonique e Jamendo

Pornophonic é uma banda alemã de um estilo alternativo, que mistura rock e música eletrônica com sons de jogos de Gameboy e Commodore 64! Além de ter um pouco de pr0n como inspiração nas músicas!

Gostei de quase todas as músicas do album 8-bit lagerfeuer, mas posso destacar Sad Robot e Space Invaders como minhas preferidas. Inclusive todas as músicas estão disponíveis para download no site do Pornophonic.

Descobri essa banda há quase um ano, enquanto eu navegava no Jamendo, que é uma espécie rede social onde músicos podem publicar seus trabalhos. O interessante do Jamendo é que as músicas são todas distribuídas pela licença Creative Commons, todas com permissão para ouvir e redistribuir. Além disso, existe a possibilidade de os usuários se inscreverem num programa para receberem uma parte dos lucros obtidos com anúncios do site.

No final desse post tem um aplicativo do Jamendo para tocar o álbum, mas caso ele não funcione, na página do album no Jamendo tem várias alternativas para ouvir a música, desde o download de mp3 ou ogg via bit torrent ou até a possibilidade de integrar o site com o Rhythmbox ou Amarok.

  

domingo, 24 de maio de 2009

Programando para Android sem Eclipse

Eu nunca consegui me acostumar a nenhuma IDE de programação, cheguei a usar Emacs, Anjuta, Eclipse e nem lembro mais quais outras: eu sempre ficava perdido com a quantidade grande de opções e me frustrava. Meu jeito de programar sempre segue o estilo mais clássico, uso um editor de texto bem simples e um terminal para compilar, debugar e executar o programa.

Esse foi um dos motivos que acabou me afastando por um tempo de começar a programar para Android, sempre que eu pegava um tutorial ele começava explicando como como instalar o Eclipse, depois o plugin e outras coisas mais chatas. Mas tomei vergonha na cara e resolvi descobrir como fazer para não precisar de nenhuma IDE, e até que é mais simples do que eu imaginava.

Claro, programadores mais experientes podem ganhar muita produtividade usando IDEs como o Eclipse, porém, para iniciantes e estudantes, os métodos clássicos de programação fazem com que se tenha um maior contato com a estrutura do projeto e consequentemente melhor compreensão dos vários fatores relacionados ao desenvolvimento.

Vou dar dicas de como proceder num sistema Debian, mas que quase com certeza deve funcionar também no Ubuntu. E claro que qualquer pessoa com o mínimo de força de vontade vai conseguir adaptar esse tutorial a outra distribuição ou outro sistema operacional. Estou levando em consideração que o leitor tem alguma familiaridade com o sistema operacional GNU/Linux, que sabe se virar usando linha de comando e que também tem alguma noção de programação.


Instalação

Primeiro vamos instalar as dependências, que são os pacotes do Java 6 SDK e o Ant, que é uma ferramenta de construção parecida com o make. Como root, execute o seguinte comando para instalar os pacotes:

aptitude install openjdk-6-jdk ant

Então precisamos pegar o Android SDK e em seguida configurar o ambiente de trabalho. Como gosto de manter meu sistema limpo, eu vou instalar o SDK no meu $HOME. Como usuário comum, vá ao diretório onde foi feito o download do SDK e o descompacte. Então, na linha de comando, siga os seguintes passos:

mkdir ~/bin
mv android-sdk-linux_x86-1.5_r1 ~/bin
ln -sf ~/bin/android-sdk-linux_x86-1.5_r1~/bin/android

Agora precisamos definir algumas variáveis de ambiente para que alguns programas estejam no path e que esses programas saibam qual versão ou implementação do Java deve ser usada. Edite o ~/.bashrc adicionando as seguintes linhas no final do arquivo:

## configuração do PATH ##
export PATH="$HOME/bin:$HOME/bin/android/tools:$PATH"

## configuração do PATH ##
export JAVA_HOME="/usr/lib/jvm/java-6-openjdk/jre/"
export PLUGIN_HOME="$JAVA_HOME/plugin"

Agora basta recarregar as configurações do bash. Você pode simplesmente abrir outra instância do bash, por exemplo, abrindo outra janela do seu terminal gráfico preferido, mas se você estiver com alguma janela aberta, basta executar o seguinte comando:

source ~/.bashrc

Neste momento o Android deve estar funcionando perfeitamente e a maneira mais fácil de começar a testar é executando o emulador. Mas antes de rodar o emulador, precisamos criar um Android Virtual Device (AVD). Basta executar o comando a seguir:

android create avd \
--name \
--target
O android vai perguntar se você quer criar uma versão customizada do hardware. Responda que não.

O target, ou melhor, o alvo define qual versão do Android e qual especificação de hardware será usada pelo emulador quando você carregar esse AVD. Para ver a lista de alvos possíveis execute o seguinte comando:

android list target

Para carregar o emulador, basta executar o comando:

emulator -avd


Criando um projeto

Para criar um novo projeto é necessário usar o comando android, cujos parâmetros de linha de comando são:

Parâmetros para a ação "criar projeto"

Parâmetro curto
Parâmetro longo
Descrição
-k
--package
Esse é o nome de pacote do seu programa. Ele deve ser escolhido para ser único, e deve seguir as especificações de nome de pacote da linguagem Java
-n
--name
Nome do projeto. É esse o nome que os usuários do seu programa verão.
-a
--activity
Nome da classe Activity do seu projeto. Essa é a classe que vai interagir com o usuário.
-t
--target
Esse parâmetro define qual será o "alvo de construção" do seu projeto. Esse alvo é qual versão do Android e qual especificação de hardware será usada pelo seu projeto. Digite android list target na linha de comando para ver a lista de alvos possíveis
-p
--path
Caminho para o diretório onde ficará seu novo projeto


Aqui está um exemplo de criação de projeto:

android create project \
--package com.exemplo.jahnke.helloworld \
--name HelloWorld \
--activity HelloWorld \
--target 1 \
--path ~/projetos/android/helloworld


Programando

Agora vamos implementar o Hello World no Android. A partir de agora vou supor que você está no diretírio especificado no path do comando anterior.

Use seu editor de texto preferido para abrir o arquivo src/com/exemplo/jahnke/helloworld/HelloWorld.java e o modifique para que ele fique assim:

package com.exemplo.jahnke.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloWorld extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

TextView text_view = new TextView(this);
text_view.setText("Olá mundo!");

setContentView(text_view);
}
}


Compilando e instalando

O Ant é usado para compilar e instalar os aplicativos e seu uso é bem simples. Para compilar e instalar o aplicativo que acabamos de criar, basta executar os comandos:

ant debug
ant install
Se você modificar o aplicativo e quiser reinstalar, também é super simples, basta executar:

ant debug
ant reinstall
Agora o programa já deve estar acessível pelo emulador.

Espero que você tenha gostado do meu texto, e se você gostou do exemplo e estiver empolgado para continuar aprendendo a desenvolver para Android, o próximo passo é ler sobre os fundamentos dos aplicativos do Android. Caso tenha alguma crítica, sinta-se livre para participar nos comentários.

terça-feira, 12 de maio de 2009

Não jogue seu PS2 pela janela??

Tô muito puto da vida, eu estava muito feliz com a quantidade de jogos que serão lançados para Playstation 2. Eu fiquei pensando "pô, se Black ficou lindão assim, então os novos jogos devem ter uma qualidade parecida", mas eu estava enganado!

Tive duas desilusões, primeiro vi o lançamento Star Wars: The Force Unleashed, vi que uma das plataformas do jogo era o PS2 e resolvi testar o jogo. Achei meio sem graça, meio travado. Os gráficos até que eram legais, mas eu sentia que faltava alguma coisa. Acabei concluindo que a falta de um processador potente impedia uma simulação física mais detalhada e isso tirava um pouco da graça do jogo. Nunca mais peguei o DVD para jogar.

Agora algo parecido aconteceu novamente, peguei o DVD do X-Men Origins: Wolverine para Playstation 2. Porra, ao invés de trabalharem o jogo direito para ter um visual pelo menos parecido com God of War II, tenho a impressão de que pegaram a engine do jogo e desabilitaram todos os efeitos gráficos legais, tiraram todas as texturas bonitas e todo o polimento. Os personagens do jogo são tão quadrados que os gráficos lembram os jogos de PSX, além disso, a jogabilidade é travada pra caramba. Desconfio que o mesmo aconteça para a versão PSP e, talvez, para Wii.

Além disso, um amigo que tem um Xbox 360 me confirmou que o começo do jogo é super empolgante e bem mais divertido que o filme mas que pelo fato do jogo ter tido a obrigação de ser lançado perto da data de lançamento do filme, ele ficou com bugs e defeitos feios nos gráficos, que ficam mais evidentes no final do jogo.