quinta-feira, 21 de janeiro de 2010

Sons, muitos sons! Com Python :D

Pois é, tive um dia de domingo agradável, programando!
A turma do Dojo Rio está tocando o projeto opensource Dojotools para reunir ferramentas para facilitar nossas vidas durante as sessões de coding dojo.
Para dar minha pequena contribuição para minha diversão, e prejuízo de meus ouvidos, passei a tarde arrumando o sound_alarm. Este script surgiu de diversas brincadeiras que já havia feito para reproduzir som com Python no Windows e no Ubuntu.
Juntei coisas que eu já tinha, refatorei, produzi algumas "melodias" para perturbar quem se aproxima de mim, e taquei no github.

Ontem testei o script no Mac e não funciona. Pelo menos aqui no Macbook Pro não tem /dev/audio, e não descobri como tocar sons em diferentes frequências como consigo no Linux e Windows.

Eis que se alguém tiver uma solução pro Mac OSX ela é apreciada :D

quinta-feira, 10 de dezembro de 2009

Novas línguas do semestre

Neste segundo semestre de 2009 inicei meu contato com diversas novas línguas e linguagens.
Para começar, estou agora morando em Portugal, o que me deixa em contato com um português um bocado diferente do que estava acostumado no Brasil.

Depois, por ter contato com amigos de diversas partes do globo, o inglês é certamente a língua que mais tenho utilizado no dia-a-dia. Para completar, tem o Polonês e o Turco, que podem parecer exóticos mas tem feito parte do meu cotidiano no momento.

Mas, o que tenho feito de novo aqui em Lisboa? Só vida boa? Não, não.
Os trabalhos da faculdade me fizeram desviar da jornada estritamente pythônica para olhar outras linguagens.

No Brasil meus amigos continuam arrasando com as super comunidades, mega encontros, e muita agitação todos os dias da semana. Aqui, encarei um projeto de Inteligência Artificial usando LISP.
O objetivo era resolver automaticamente instâncias do jogo Hidato.

Inicialmente o contato com LISP não foi muito amigável, porém com o tempo fui pegando o gosto e vi muito espaço para aprendizado com esta linguagem. Implementei meu projeto para o ambiente CLISP, e fiquei muito satisfeito pela boa velocidade com que resolvia grandes instâncias do jogo.

Os pontos que me deixaram curiosos no LISP e que ainda não tive a oportunidade de brincar foi o processamento de texto, acesso a dados via Internet, e outros detalhes que não me vêm à cabeça neste momento...

O lado negro foi ter que cursar Programação com Objectos usando Java, linguagem extremamente burocrática, e que nenhum conhecimento interessante me traz. É impressionante a distância entre uma idéia pra solucionar um problema e uma solução implementada em Java. Talvez os mais experientes hackers da terra do cafezinho vão discordar desse meu desabafo sem código, mas aqui o objetivo é só relatar meu descontentamento mesmo :P

Por fim, Matlab. É um ambiente proprietário, de sintaxe muitas vezes esquisita, e que estou utilizando nas aulas de Processamento de Imagens. Não vi ainda vantagens em relação a usar Python + Numpy + Matplotlib... ainda assim, é uma linguagem interpretada e lá temos console e um manual muito bem elaborado.

Acho que as linguagens compiladas tem um ponto a menos nas minhas avaliações por conta da velocidade do "escrever código". Legibilidade e fluxo de desenvolvimento acabam valendo mais que tempo de execução.

segunda-feira, 21 de setembro de 2009

Novo blog com histórias e relatos da minha viagem para Portugal

Hoje finalmente comecei o blog para relatar minha viagem, o um ano de intercâmbio em Lisboa.

Aos que quiserem acompanhar a jornada, apontem para Lisboa, Portugal.

sexta-feira, 11 de setembro de 2009

Lisboa, Portugal

Eis que cá estou desde segunda-feira. Esta tem sido uma semana muito boa.

Conheci novos países, novas culturas, novas pessoas... sim... PESSOAS muito interessantes. Escrevi algumas coisas em papel nos primeiros dias, depois pretendo postar.

Agora moro aqui em Portugal por um ano, muitas novidades por vir, como o Coding Dojo Lisboa! Aguardem.

domingo, 23 de agosto de 2009

Windows Vista: filtrando visualização no Windows Explorer

Muitas vezes ficamos apenas reclamando dos Sistemas Operacionais, reclamamos do Windows, ele não presta, a Microsoft é má, isso e aquilo...
Bem, depois de ouvir cuidadosamente a palestra do Robert M. Lefkowitz na PyCon 2007, espero que você mude de idéia e comece a entender onde fica o software livre e o proprietário, pois ambos tem seu espaço. Então agora estou escrevendo a favor do Windows Vista, já que acabo de descobrir uma funcionalidade muito bacana, que parece ficar escondida na interface...

Programar no Windows não costuma ser uma tarefa tão divertida quanto ter um Linux bem arrumado, mas em ambos os casos eu sempre fico querendo esconder os arquivos .pyc e ver só o que interessa, os .py.
O que eu descobri é que com o Windows Explorer eu posso fazer isso e um pouco mais!

Aqui está um diretório com alguns arquivos Python e seus respectivos compilados, no modo de exibição "detalhes":

Colocando o mouse sobre qualquer coluna aparece uma seta no canto direito, como pode ser visto abaixo. Clique nesta seta para exibir um menu contextualizado com a coluna. Por exemplo, na coluna "Modificado em", é possível filtrar os arquivos por data. Tem até opções para filtrar os arquivos mais recentes, por semana, mês ou ano. Veja:

E você pode filtrar por nome, neste caso resolvi mostrar apenas os arquivos cujo nome começa com números (ocultando o __init__.py, que neste caso não é tão interessante):

E posso agrupar por tipo de arquivo, assim posso acessar separadamente, como se fossem dois "diretórios virtuais":

Note que desde a segunda tela eu já estava usando o filtro por "Tipo" para exibir apenas "Python file", resolvendo meu problema com os ".pyc" que só distraem!

Python: o print agora se chama raw_input

Opa! Ah? Que? O que que houve? Como assim?

Certo, nada mudou no Python... na verdade mudou, agora no Python 3.0 o raw_input virou input, que não deve ser confundido com o input presente nas versões pre-3.0.

A dica que deixo aqui é apenas um fato que percebi que tenho utilizado há algum tempo... talvez uma nova "técnica", mas que não dei muita bola até que comecei a falar sobre ela com amigos, e pensei que não faria mal relatar aqui.

Às vezes queremos colocar um print no meio do código, naquele processo de depuração (claro, você está fazendo TDD e dificilmente precisa fazer isso) e o que acontece é que, na maioria dos casos, temos que ficar caçando onde o output foi parar, quando você tem muita informação que surge no terminal.

Então, use o raw_input, que terá o mesmo efeito do print, porém o interpretador vai parar logo após exibir o que solicitou. Basta pressionar qualquer tecla para continuar a execução do script.

Outrar opção é parar com AssertionError, fazendo:

assert False, objeto_ou_valor_a_ser_inspecionado

Exemplo:
def get_tweets(user):
   from gluon.tools import fetch
   from gluon.contrib.simplejson import loads as sj_loads
   
   page = fetch('http://twitter.com/%s?format=json' % user)
   return sj_loads(page)['#timeline']

#print get_tweets('ilovetweeting')
raw_input(get_tweets('ilovetweeting'))

Novo domínio e demais novidades

Olá!

A novidade mais recente é que agora o lifeatmymind.blogspot.com é blog.rodolfocarvalho.net!
Outra é que a partir do próximo mês vou residir em Lisboa, Portugal. Em busca de novas aventuras...

E isso quer dizer que globo.com agora entrou para a história, não estou mais desenvolvendo lá. Excelente experiência que tive nos últimos 8 meses, agora é partir para o desconhecido na Europa.