um pluguinho
Uncategorized
Server rack à la zeroconf com Pow
Apr 17th
Já faz algum tempo que não mantenho um apache instalado no ambiente de desenvolvimento, isso se deve principalmente ao fato de que já não desenvolvo nada em php a alguns anos, logo um apache rodando o tempo todo na máquina acaba sendo um desperdicio de recursos.
Uma coisa que tem aumentando muito por aqui são aplicações rack, sejam projetos em andamento, sejam apps de teste para as mais diversas gemas que aparecem por esse mundão do ruby, sempre preciso levantar uma app para testá-la e quase sempre isso quer dizer levantar uma app rack.
Não que digitar um comando como rackup, padrino start, rake start ou similares sejam a morte, mas eu acabo perdendo um tempinho gerenciando o que esta ou não em pé. Sem contar que na hora de acessar, o historico do browser acaba virando uma zona: http://localhost:3000, http://localhost:4567, http://localhost:9000 e por ai vai, acabo perdendo um pouco de comodidade que o Chrome oferece na busca de urls já acessadas. Evidente que existe a opção de adicionar uma host no /etc/host, mas mesmo isso acaba não sendo prático de manter.
Então surge o Pow, o Pow é uma aplicação escrita pelo Ryan McGeary, que tem como objetivo ser um zeroconf rack server para Mac OS X, voltado exclusivamente ao ambiente de desenvolvimento. Como ele suporta rack apps, consequentemente suporta Rails apps.
Como toda ferramenta zero-conf, a instalação e configuração do Pow é muito simples:
$ curl get.pow.cx | sh
Em algum momento ele vai pedir a senha do root para fazer configurações de firewall (ele redireciona fluxo da porta 80 da sua máquina para porta 20559 do Pow), e vai criar uma symlink no seu home: ~/.pow.
Agora basta criar um symlink para sua aplicação dentro dessa pasta, e configuração já esta pronta:
$ ln -s ~/Projects/myapp ~/.pow/myapp
Acessando http://myapp.dev o Pow vai reconhecer o virtual host e automaticamente levantar a aplicação, se depois de 15 minutos a aplicação não tiver mais acessos o Pow dece a aplicação e continua aguardando conexões. Aqui uma dica: no Chrome digitar apenas myapp.dev não funciona, ele não identifica isso como um host e acaba indo parar na busca, o http:// se faz necessário (pelo menos no chrome dev foi assim).
Alguns features interessantes:
- Auto refresh: Pelo menos aqui no testes com uma aplicação padrino (preciso falar um pouco mais sobre padrino), ele fez refresh dos meus controllers e models automaticamente, acredito que isso funcione também no Rails, vai depender mais de como o framework é desenvolvido;
- Suporte a rvm: Por padrão ele procura pelo seguintes arquivos na pasta da aplicação: .powrc, .powenv ou .rvmrc, o que acaba sendo uma mão na roda se você utiliza .rvm;
- Suporte a variáveis de ambiente: no arquivo .powenv você pode exportar variáveis de ambiente que sua aplicação utilize. Isso tem sido de grande utilidade por aqui, pois permite emular os comportamento de configuração que o Heroku utiliza;
- Subdomínio: Este é um dos pontos fortes na hora de executar testes, facilita bastante poder digitar subdomínios, principalmente quando você esta desenvolvendo aplicações que utilizam subdomínios dinâmicos.
- É mais: Mais detalhes sobre como utilizar e configuras as esta e vários outras opções na página do projeto: Pow
Como sempre o Pow não é a bala de prata, mas é sempre bom poder automatizar tarefas repetitivas, e quando isso envolve pouca configuração ou zero acaba ficando ainda melhor.
YourMove – A Saga de um concurso móvel
Feb 21st
Não postei nada aqui sobre o concurso da Intel que estava participando, o tempo andava curto e muitos projetos para trabalhar, pensei em deixar para o final e fazer um resumão, então vamos lá!
O concurso da Intel tinha como objetivo o desenvolvimento de um aplicativo de sua escolha para plataforma móvel batizada de MID, teve inicio no mês de Julho do ano passado. Fiquei sabendo do concurso antes de abrir as inscrições, através do site br-linux.org, mas acabei por esquecer e quase não consegui me cadastrar a tempo de participar da votação popular, para escolha das melhores idéias.
Nesta primeira fase tivemos um probleminha, algum engraçadinho resolveu que iria sair do ultimo lugar e chegar ao primeiro, e em menos de 1 dia tinha mais votos do que o primeiro colocado, depois de alguns protestos através de comentários, o filho da mãe em vez de se retirar da disputa, fez o favor de adicionar votos para outros participantes, você podia escolher 10 idéias que lhe agradasse, com isso gerou-se mais confusão e protestos. Para finalizar a confusão quem estava administrando o site do concurso, se descuidou e a opção de votar ficou aberta além da data limite, o que gerou mais alguns protestos, e por fim a Intel desconsiderou os votos apos a data limite e liberou a classificação final, minha idéia ficou em quinto lugar.
Em um outro post vou dar mais detalhes sobre o que se trata a minha idéia, e também apresentar a primeira versão aberta ao público.
O regulamento previa que os 10 primeiros ganhariam um MID da Intel para desenvolver o aplicativo e apos o envio do beta para a Intel, ganharíamos um Netbook, ambos com processadores Atom. Mas infelizmente pelos entraves da Receita Federal os MID que eram para ter chegado em 30 dias, levaram quase 5 meses para chegar, o que levou a Intel a estender o prazo de entrega dos beta, e também adiar o evento de apresentação dos projetos.
Do dia 31/10 passamos para o dia 31/01 como data limite, o que em termos aumentou em muito o tempo para o desenvolvimento do programa, mas sem o MID de quase nada adiantava este tempo extra. Por volta do dia 15/12 recebemos os “brinquedinhos”, a primeira impressão foi ótima, pelo pacote já deu para perceber que o produto tinha bom acabamento:

Com o aparelho em mãos deu para ter um idéia melhor do que era, do que poderia ser feito, e para dizer a verdade, poderia ter trabalhado no programa a mais tempo, afinal com porta USB host, leitor de Micro SD, teclado slider padrão qwerty, GPS, tela touch, 512MG de RAM, dois SD de 2GB internos, e um processador de Intel Atom de 900Mhz, o AIGO P8860 é um PC em miniatura.

Como o espirito hacker manda mais do juízo, as primeiras semanas foi de hackerismo total, instalações e formatações suscetivas, passando de Ubuntu, Slax, Debian, Arch e chegando ao próprio Moblin, resultados variados, mas em geral agradáveis. Os problemas mais recorrentes ficam por conta da tela touch e do GPS, já a wireless é quase sempre suportada, precisando apenas copiar os Firmwares devidos. A curiosidade fica para a webcam integrada que funcionou em todas as distros sem nenhuma interversão.
Passadas as festividades de fim de ano (lembranças boas da Chapada Diamantina), comecei a trabalhar na aplicação. Entre indas e vindas, pensei em desenvolver em diverso tipos de ambiente:
- Ruby com GTK. Era uma boa opção visto que estou trabalhando com Ruby a mais de um ano e tem sido minha linguagem principal, mas sinceramente o suporte a GTK, ou mesmo QT e outras toolkits gráficas ainda não é lá essas coisas em Ruby, por esse motivo ou outro que eu desconheço as libs e dependências não estão disponíveis facilmente em qualquer ambiente;
- C++ e Clutter. Para quem não conhece o Clutter é um projeto relativamente novo, que ainda não chegou a versão 1.0, sua principal característica e torna fácil lidar com objetos 2D, animações e eventos, criando uma serie de efeitos que lembram interfaces como a do Canola, Iphone, dentre outros. Mas meu conhecimento em C++ não chega ao nível Jedi, talvez um jovem Padawan, o que seria muito complicado com o curto espaço de tempo.
- Algum ambiente RIA. Como programador web a muito anos, eu sempre gostei da idéia de desenvolver aplicações desktop com base em navegador, a facilidade em lidar com HTMl e CSS aliadas ao poder que Javascript, permitem construir aplicações muito ricas em termos de interface. Prova disso é o que a Palm fez com o novo WebOS, um Webkit sobre um kernel linux e temos um ambiente de desenvolvimento relativamente fácil, e principalmente facilmente extensível visualmente
Por fim acabei por escolher a terceira opção, mas ai apareceu um pequeno problema: qual ambiente RIA utilizar? Talvez um dos mais conhecidos ultimamente seja o Adobe AIR, mas seu suporte a Linux ainda é limitado e seu peso era um empecilho grande ao uso do mesmo no MID. Uma alternativa Open Source é o Titanium, um projeto bem interessante que juta vários outros projetos, como Google Gears, Webkit, Rake, JazzRecord, dentre outros e criam um ambiente de desenvolvimento muito bom. Mas a versão para Linux ainda esta no campos das promessas, e apesar das minhas tentativas (foram varias) não conseguir obter uma ambiente, mesmo que beta, no qual pudesse trabalhar.
Bom só me restou uma saída, trabalhar no meu próprio ambiente RIA, nasce então o Eibox, meu primeiro framework público. A principal idéia por trás do Eibox é criar um framework Python, compatível tanto com desktops quanto com aparelhos móveis. Sei que o projeto é ousado, e vou precisar de muita colaboração para conseguir este feito, mas com a primeira versão do podMobile em funcionamento acredito que sera combustível o suficiente para que outras pessoas possam contribuir.
No momento o Eibox esta construído sobre Python e Qt4, a QT entra na joga para fazer a ponte entre o Python e Webkit, ao mesmo tempo que fornece uma rica biblioteca que pode ser utilizada para completar a aplicação. Mas existe um porem nisso, a QT por mais leve que seja, adiciona peso extra ao ambiente, e limita o Eibox ás plataformas em que a QT esteja disponível. Para ter acesso ao código fonte do Eibox basta acessar o repositório do podMobile.
Deixando o Eibox de lado, conseguir fazer a aplicação funcional, pelo menos o suficiente para apresentar no evento. A baixo você pode conferir o vídeo da apresentação da minha aplicação e tirar suas próprias conclusões:
A decisão do vencedor ficou a cargo de uma bancada formada pela Intel, e um voto do público do evento. Infelizmente minha aplicação parece não ter agradado os jurados, ou seria o fato de dar palpite de mais nas outras apresentações (eu e minha boca grande). Mas em fim o fato de que o publico escolheu com 37% dos votos a minha aplicação me deixou muito feliz. Evidentemente que vencer o concurso era o objetivo maior, mas o retorno dado pelas pessoas foi muito gratificante, vários me procuram depois da apresentação para parabenizar pela idéia e pelo framework.
Bom é isso, e a quem interesse, o Eibox vai continuar em desenvolvimento e tenho muitos planos para ele, em breve devo postar mais algumas coisas falando do que fiz e sobre o futuro do mesmo, quero melhorar bem o código, e levar o framework para outras plataformas.
De volta das ferias
Jan 11th
Bom 2008 foi um bom ano, não sou muito de ficar fazendo balanços e promessa de ano novo, mas espero que 2009 seja ainda melhor, e por falar em conquistas de 2008, finalmente saiu o vídeo da Arena do fisl 8.0:
Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!
Jun 24th
…e também a pen drives, card drives, camisetas geeks, livros e mais! O BR-Linux e o Efetividade lançaram uma campanha para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e participe – quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!
Webkit no maemo
Jun 14th
No projeto que começamos no fisl, o odfmobile, optamos por utilizar a engine Gecko do projeto Mozilla, para trabalhar a exibição dos documentos. O uso desta se deu através da biblioteca gtkmozembed para python.
A opção de usar o gtkmozembed foi mais por questão de tempo, e por consequência, disponibilidade da api, já integrada ao python. Mas depois de um tempo pesquisando sobre o desenvolvimento para plataforma maemo acabei esbarrando neste post. Lendo isso e tirando como base o navegador do N800 e do iPhone, fiquei me perguntando se o Webkit não seria uma opção melhor ao Gecko.
Para ter uma ideia do que seria melhor, resolvi baixar e compilar o Webkit para o maemo e ver no que dava. Então vamos aos passos para testar o Webkit no maemo, vou considerar que você já saiba com ter SDK do maemo em sua máquina e que esteja familiarizado com o mesmo.
Instale o m4:
Depois baixe e instale os seguintes pacotes no seu scratchbox:
- http://www.atoker.com/webkit-maemo/flex_2.5.33-12_armel.deb
- http://www.atoker.com/webkit-maemo/gperf_3.0.3-1_armel.deb
- http://www.atoker.com/webkit-maemo/libicu36_3.6-2_armel.deb
- http://www.atoker.com/webkit-maemo/libicu36-dev_3.6-2_armel.deb
Existe duas maneiras de obter o Webkit, e elas estão descritas neste link.
Uma vez que tenha obtido o WebKit, rode o comandos:
> make && make install
Ele deve criar uma pasta em /opt/webkit, para testar se deu certo a nossa instalação, vamos compilar um simples navegador feito em C.
> PKG_CONFIG_PATH=/opt/webkit/lib/pkgconfig:$PKG_CONFIG_PATH gcc -o hbrowser hildon-browser.c `pkg-config gtk+-2.0 hildon-1 webkit-1.0 --cflags --libs` -Wall
Uma vez feito isso podemos transferir os arquivos para o dispositivo e testar, copie a pasta /opt/webkit para o /opt do seu dispositivo, depois copie o hbrowser para onde desejar. Antes de testar instale a biblioteca: libicu36_3.6-2_armel.deb, que já foi citada acima, no seu dispositivo.
Para rodar o hbrowser faça:
Nenhuma das tarefas a cima são triviais, mas isso são apenas os primeiros testes, partindo do principio de que funciona, posso fazer mais testes sobre a performance e estabilidade de Webkit no maemo.
Aguardem em breve mais novidades!!
Definitivamente de volta a terrinha
May 29th
É isso pessoal, depois de 3 anos e meio morando em Curitiba estou de volta a Patos de Minas. Saudades de Curitiba não vão faltar, foram 3 anos de muitas felicidades, amigos e aprendizado.
A explicação para essa guinada na vida são muitas, primeiro que o projeto em que estou trabalhando esta começando a render seus frutos, o que por si só já seria motivo o suficiente para voltar. Mas além disso a saudade da família e da terra bateu, Curitiba é um cidade maravilhosa e diferente do que muitos falam, seu povo e receptivo, basta saber chegar e conversar
Infelizmente não consegui terminar a faculdade em Curitiba, o que não chega a ser um problema, aqui em Patos tem dois cursos de informática e todos me agradam. Graças a tecnologia a vida muda pouco, o acesso as informações é fácil tanto quanto era em Curitiba, e agora que conheci um pedaço do Brasil viajar se tornou ainda mais divertido, com certeza minhas viagens para treinamento, palestras, eventos e cursos pelo Brasil devem aumentar.
Eu diria que Patos é uma Curitiba em miniatura, as coisas aqui são boas, a cidade é limpa, organizada, e tem algo que me agrada mais do que em Curitiba: as festas, ainda não estou participando de nada, o tempo não tem permitido, mas com certeza neste requisito a coisa e mais animada por aqui.
E vamo que vamo…
Arena de programação
May 21st
Depois de um mês do fim do fisl 9.0, finalmente sobrou um tempo para falar sobre a Arena de Programação, acompanhado do fato de que o N95, um dos prémios da arena, chegou hoje pela manha
Para quem não sabe a arena é um evento que acontece dentro do fisl, sendo este o segundo ano de arena, e esperamos que muitos outros ainda venham. O objetivo geral da arena é promover a integração entre os programadores do mundo livre e gerar algum tipo de contribuição com essa integração. No ano passado tivemos uma arena voltada ao projeto Debian, e esse ano ao projeto Gobo Linux e a plataforma de desenvolvimento móvel da Nokia.
Na primeira fase tivemos um processo de seleção com base em patch que deveriam ser feitos para o projeto Gobo Linux, mais informações aqui. Graças ao fato de que o número de inscrições nesse processo foi aquém do esperado, eu pude participar, meus patch foram enviados com 1 semana apenas de antecedência.
Já no primeiro dia de arena a coisa pegou fogo, fomos divididos em grupos de 4 programadores, e cada equipe recebeu um N95, onde constavam uma lista de tarefas a serem executadas com o aparelho usando python. Terminei este dia frustado, tínhamos feito muita coisa, mas nada tinha ficado realmente pronto e funcional, ficamos com um tarefa pronta, e todas as outras semi acabadas. Fui pro hotel cabisbaixo e pronto pra receber a notícia de que não havíamos nos classificado.
Passei uma noite de cão, pois decidi que não ia deixar aqueles códigos besta me vencer, como tinha instalado o emulador da plataforma S60 um domingo antes de ir para o fisl, resolvi que faria o que não consegui fazer durante o dia, obs: isso não contava em nada, fiz porque era um desafio que deveria ser vencido, mas não iria mudar a decisão do dia seguinte.
Na manha de sexta estava lá as 9:00, cansando pra caramba da noite anterior, mas ainda sim tive um tempo pra fazer mais alguns testes e refinar as tarefas que eu tinha feito durante a noite. No fim consegui terminar uma das tarefas e desenrolar uma outra, de um joguinho, mas como o emulador não tem suporte ao acelerómetro, o joguinho ficou só na teoria de que funcionaria.
Qual foi a surpresa de saber que nossa equipe tinha classificado, os códigos que entregamos mesmo na sua maioria incompletos, estavam dentro do esperado, de fato tínhamos feito um bom trabalho. Foi uma grade satisfação saber que todo o trabalho que tinha feito a noite anterior, não tinha sido em vão, ninguém da organização ficou sabendo sobre isso, mas pessoalmente teve um imenso valor.
Eu não sou de forma algum experiente em programação em Python. Eu trabalho com programação a uns 10 anos, mas Python nunca foi o meu forte, mesmo com várias semelhanças com Ruby, que tem sido minha linguagem principal nos últimos meses, o Python era de certa forma um obstáculo.
Mas as 24 horas que passei programado, 12 da quinta feira, e mais 12 da noite que virei programando, com certeza me preparou pra o trabalho que veria em seguida. Então, logo após o anuncio de quais as equipes que tinha se classificado ficamos sabendo que as equipes deveriam se re-arranjar em grupos de três.
Minha equipe mudou e passei a trabalhar com dois programadores de Joeville, nem sabia eu que essa seria a equipe vencedora. Recebemos um N800 e a árdua tarefa de criar um leitor de ODF para o aparelho, usando pymaemo.
A tarefa em si não seria complexa, não fosse o tempo pra programar. Levando em conta que os aparelhos só ficaram disponíveis lá pelas 12h da sexta feira e que teríamos que entregar de volta ás 21h, e que no sábado teríamos mais umas 4 horas para termina o trabalho, ficamos com umas 13 horas de aparelho disponível para trabalhar.
Novamente mais um dia puxado de trabalho, pegando um pouco mais leve, afinal eu estava a mais de 24h sem dormir e com um agravante que quase ninguém sabia, eu passei por um cirurgia de apendicite no final do mês de março, e ainda não estava completamente recuperando, inclusive tendo que trocar curativos.
Mais um dia se foi e muito trabalho ainda tinha que ser feito, uma vez definido o caminho que queríamos seguir o trabalho estava nos trilhos, mas ainda longe de ser concluído. Novamente fui para casa e para mais algumas horas de trabalho noturno, cheguei no hotel tomei um banho e dei um tempo comendo uma parmejiana com amigos no Copão. De volta ao hotel passei mais uma noite em claro estudando pra o dia seguinte, como não tinha o aparelho, e dessa vez nem o emulador, passei a noite estudando sobre xslt (que estávamos usando na solução) e mais um pouco sobre Python e as bibliotecas que estávamos usando.
No dia seguinte a coisa foi um susto, em menos de 4 horas conseguimos juntar o trabalho que os três estavam fazendo e fazer um programa funcional a tempo de entregar, nossa estratégia se mostrou eficiente, pois mesmo trabalhando separados, estávamos sempre trocando ideia sobre o todo. Cada um pegou seu pedaço e trabalhou firme nele.
As horas seguintes ao fim da arena foram as mais duras que já passei, tínhamos que esperar das 12h até as 20h, quando aconteceria o encerramento do fisl, e teríamos o anuncio do resultado. Eu estava tremendamente cansado, com mais de 48 horas de olhos abertos, mas nem tentei deitar em um cato e descansar, estava ansioso d+ para isso.
As 19h rolou uma apresentação das equipes finalistas, falamos sobre nossas soluções, e fizemos um pequeno momento de reflexo sobre a possibilidade de continuar o projeto que tínhamos começado ali. Passado isso fomos andando para o teatro principal para o encerramento do evento, as borboletas no estômago já estavam do tamanho de elefantes, e a ansiedade de saber o resultado era visível no rosto de cada participante que tinha chegado ate ali.
Como sempre o anuncio dos vencedores começou pela ordem inversa e os ganhadores do terceiro e segundo lugar foram anunciados por primeiro. Neste 2 minutos que dura entre o anuncio do segundo lugar e o primeiro existe um vazio na cabeça de quem espera o resultado que é indiscritível, afinal, ou foi tudo ou foi nada, e as chances em números são as mesmas para os dois lados. Então o anuncio do vencedor e algo que não se pode dizer em palavras, ficamos tão feliz que pulamos os três abraçados por um longo e feliz minuto.
Depois disso a coisa só fica melhor, você leva horas para perceber o que aconteceu, e que você realmente ganhou. Receber o prémio e algo fantástico, mas saber que você deu conta é ainda melhor, e a loucura e algo que domina facilmente a gente nesse momento.
Logo depois de mostrar com toda felicidade o N800 que tinha ganhando ao público, escutei um sonoro “joga, joga, joga!!!”, era uma plateia maravilhada com os prémios, e que clamava de alguma forma pra participar daquilo, não pensei duas vezes, virei para uma mesa, deixei minha sacola, e comecei a desmontar meu W300 na busca pelo chip GSM, que não queria sair de forma alguma, quando consegui arranca-lo do aparelho foi apenas um grito: “PEGUE O CARREGADOR COMIGO DEPOIS”, estava feito, tinha jogado meu celular para plateia que o recebeu com toda a felicidade.
Depois disso veio a entrevista para a impressa, e maravilhosos momentos de comemoração e orgulho da conquista. O N800 foi explorado de todas as formas, e tenho grandes planos de participar do seu desenvolvimento, seja com projetos Open Source ou pessoais. O N95 demorou um pouco para ser entregue, mas finalmente chegou e é outro brinquedo sem igual.
Quanto ao projeto que desenvolvemos para o N800 a coisa esta andando, ainda não temos nenhum release, mas em breve devemos postar alguma novidade por aqui, quem quiser acompanhar o andamento do projeto pode acessar o site do projeto: http://code.google.com/p/odfmobile/ ou ainda o repositório do mesmo: http://github.com/nuxlli/odfmobile
Bem vindos ao novo endereço
May 14th
Bom pessoal depois de muito pensar (que nada decidi em duas horas), resolvi registrar o domínio e mudar de casa.
O wordpress.com foi uma boa, mas ele é limitado em termos de recursos e não te oferece todo o poder do WordPress, então, aqui estamos com um novo visual e hospedando no VPS do projeto Shopcerto (qualquer dia desses falo sobre o projeto).
Espero escrever mais, e escrever bem, tenho lido os posts anteriores e ainda tem muito a caminhar.