lyse -bp terra "o vento” “los hermanos”

Apesar de ainda não ter disponibilizado a versão 0.2.0 do LyricSearch por está fazendo refatorações no código, comprovei o funcionamento da biblioteca tempfile e webbrowser tratadas no último post.

Agora podemos usar a opção -b ou –browser para abrir um navegador/janela/aba para mostrar a letra da música. Função bem útil uma vez que meu plugin de busca devolve o texto com formação HTML.

Futuramente, pretendo criar uma API e plugins correspondentes para tipos de saídas possíveis. Assim, é possível que essa opção não dure muito. Só o futuro dirá.

Em breve anunciarei a nova versão do LyricSearch. Aguardem.

technorati tags:

Santa Biblioteca!

“Python vem com baterias incluídas!”

A frase acima já é consagrada na comunidade Python. Ela significa que ao instalar o Python na sua máquina você já tem uma biblioteca poderosa e variada à sua disposição.

Essa verdade eu já sabia mas somente hoje resolvi me expressar escrevendo um post sobre o tema. O motivo é que eu desejo acrescentar uma nova funcionalidade ao script de busca de letras, lyse, que é abrir uma janela num navegador web para mostrar a letra encontrada. Para isso eu preciso criar um arquivo temporário. Como fazer isso independente da plataforma? Resolvi ir atrás mas por onde começar? Na própria biblioteca do Python! O que eu encontrei foi o módulo tempfile.

Ainda não escrevi essa parte do código mas já sei que vai dar certo porque além deste módulo existe o webbrowser! Vai ser uma tarefa divertida porque é com Python!

Deseja conhecer a biblioteca de Python? Visite a sua documentação que é muito boa.

Atualização: O módulo tempfile no Windows não funciona como eu esperava. Uma pena. Tive de criar um arquivo comum para ter o mesmo efeito que acontece no Linux.

LyricSearch

LyricSearch é um script de linha de comando escrito em Python para consultar letras de música em sites da web. É possível criar plugins para extender suas buscas. Sua distribuição vem com um plugin para busca no site de letras do Terra.

Atualmente a API do Plugin de Consulta é bastante simples. O script (nomeado lyse) espera que o plugin faça parte do grupo de ponto de entrada (entry points) lyricsearch.search e seja uma classe e esta deve implementar o método find(title, artist) retornando uma string contendo a letra de música ou uma string vazia caso não encontre nada.

Exemplo de uso:

#baixando o script

easy_install LyricSearch

# consultando por uma letra

lyse “o vento” “los hermanos”

# ler o help do programa

lyse -h

Brevemente terminarei o segundo post a respeito de plugins em Python. O LyricSearch será comentado com mais clareza nele.

Baixe o fonte da distribuição para ver o código!

Plugins com Eggs – Parte I

“O nome sugere alguma invenção gastronômica mas não é!”

Introdução

Normalmente quando falamos de plugins sempre os relacionamos a frameworks e aplicações. Sendo que cada framework ou aplicação tem seu próprio modo de tratar os componentes plugáveis. Lembro que quando desenvolvia em Jakarta Struts haviam plugins e os declarávamos no arquivo de configuração struts-config.xml para que eles fossem reconhecidos e carregados no framework. Outros frameworks tratam isso de forma diferente.

Como cada aplicação/framework tem seu próprio modo de tratar os plugins, o que faremos se quisermos criar uma aplicação customizável por meio de componentes? Terei de criar meu próprio modelo de plugins? A aplicação para carregar o plugin (que é o componente plugável) terá de saber onde encontrá-lo. Como dito anteriormente, podemos declará-lo em um arquivo de configuração; em outros casos, colocando-o numa pasta apropriada, para que a aplicação reconheça.

Em Python encontramos uma forma de criar plugins de forma genérica independente do tipo de aplicação. É sobre o que trataremos como tópico principal neste e outros dois posts.

Um pouco de história

A biblioteca padrão da linguagem Python possui um pacote chamado distutils criado para facilitar e padronizar a instalação de bibliotecas, scripts e aplicações. Funciona de modo semelhante ao makefile para C/C++. Os pacotes instalados com o auxílio do distutils contêm em sua pasta raiz um script Python nomeado setup.py. Nela existem as diretrizes do que vai ser colocado no diretório site-packages, quais scripts serão instalados e arquivos-fonte em C/C++ para serem compilados, além de outras coisas. Com a execução do script por meio do comando: python setup.py install ocorre o processo de instalação.

Surgiu depois uma extensão do distutils chamada Setuptools, na verdade um criativo projeto concebido para facilitar mais ainda a instalação e incremento da capacidade original do distutils.

Setuptools

Com o Setuptools veio um formato de distribuição e instalação chamado Egg. Ao contrário dos ainda bem utilizados arquivos compactados com as extensões .tar.gz e .zip, os eggs são arquivos compactados com a extensão egg. Além do conteúdo presente nos outros, os Eggs contêm um diretório de metadados. Um metadado importante é a informação de quais dependências a distribuição possui. Falaremos disso mais adiante.

O Setuptools também fornece um script (easy_install) para realizar as seguintes funções: procurar, baixar e instalar pacotes, sejam eles no formato convencional (tgz e zip), no formato Egg ou de repositórios Subversion. Programas com esse propósito não é novidade no mundo das linguagens de programação. Perl possui o CPAN para isso e Ruby tem o Gems. Sabe-se que futuramente Java terá um recurso similar quando seu formato de pacotes Jar for substituído.

O projeto do Setuptools trouxe para o setup do Distutils alguns novos recursos. Citemos as principais:

  • Citar as dependências da distribuição;
  • Automatizar a busca dos pacotes presentes na distribuição;
  • Declarar objetos e serviços públicos contidos na distribuição;
  • Registrar a distribuição no Cheese Shop.

Assunto da próxima parte:

  • Detalhamento dos novos recursos
  • Plugins com Eggs!
  • Exemplo: LyricSearch

Assunto da última parte:

  • Paste: uso avançado do setuptools

Joomla! ganhou o Open Source CMS

O para mim desconhecido CMS Joomla! feito em PHP ganhou a finalíssima do Open Source CMS Final Five. A disputa ficou mesmo entre dois CMS em PHP. O segundo lugar foi o Drupal (esse eu já tinha lido a respeito).

Fica claro o quanto PHP conquistou espaço no mercado e entre os desenvolvedores. Essa vitória mostra para mim a maturidade do desenvolvimento nessa linguagem. Tanto é que o acrônimo LAMP é sinal de ambiente de desenvolvimento forte nos servidores que rodam Linux. Nem Java nem Python tem muita relevância nesse momento. E olha que Python também faz parte do P de LAMP!

Claro também está para mim que Python ganha em outros espaços que não em desenvolvimento de aplicações web e isso me anima mesmo o Plone ficando em terceiro lugar. Ainda ouviremos muito falar sobre ele.

Parabéns ao vencedor!

Meta para um futuro artigo: Plugins em Python

Essa história é velha. Há tempos venho pensando em escrever sobre os plugins na linguagem Python. O que me faltou mesmo até o momento foi imaginar alguma aplicação de exemplo bem prática e realista. O máximo que cheguei foi na idéia de um buscador de letras de música. Andei testando o site de letras do Terra tentando usar o módulo elementtree, mas infelizmente as páginas geradas nesse site não foram validadas. Achei outros  módulos para parser HTML/XHTML mas são um pouco complicados, e o que seria uma aplicação simples exigiria um pouco mais de mim. Principalmente meu tempo. Como me falta tempo (estou desenvendo uma aplicação em casa e estudando Plone), ainda não terminei a aplicação e muito menos o artigo.

Bom, e o que tem os plugins com a minha aplicação? Cada plugin seria um buscador para um site de letras diferente. Cada site tem sua particularidade em termos de endereço, parâmetros de consulta e disponibilização do conteúdo. Assim, cada plugin cuidaria dessas particularidades. Os plugins deveriam no mínimo atender uma interface única com a aplicação, para que o uso dos plugins fosse bem transparente.

No caso de haverem vários plugins instalados, o engine da aplicação usaria um primeiro plugin para a busca. Em caso de falha, ele passaria para o próximo. Melhor ainda, ele criaria vários testes e usaria todos os plugins ao mesmo tempo. Aleatoriamente escolheria um resultado de sucesso.

O artigo será exposto quando a) escrever a aplicação; b) escrever pelo menos dois plugins de busca; e c) escrever o artigo propriamente dito. Acredito que todos os programadores Python gostarão do assunto, pois é uma técnica já usada por algumas importantes equipes de desenvolvedores, dentre eles o Zope e o TurboGears. Até o fim do artigo trarei uma lista mais completa. Desejem-me boa sorte!

CMS: Plone é demais!

Duas semanas procurando uma solução de CMS em PHP. Dei uma olhada em somente duas: Xoops e Drupal. Em relação a CMS eu já conhecia o Plone, por ser feita em Python e teve uma época eu queria me especializar em um CMS. Sabemos o quanto essa ferramenta é útil e vender esse serviço é bastante lucrativo. Agora que o Plone é uma coisa bem diferente dos demais produtos, isso é verdade. A curva de aprendizado é um pouco pesada, mas depois que você começa a entender sua mecânica, a produtividade melhora substancialmente, ainda mais com uma quantidade tão grande de plugins (Products).

Por quê não escolhi o Plone? Onde trabalho não posso usar Python porque já se usa PHP e Java. Sinto que é uma pena deixar de usar um Godzilla em termos de CMS, mas fazer o quê!? É mal para uma empresa quando faltam programadores especializados em alguma tecnologia. Ainda estou avaliando direito a minha escolha de CMS (Xoops), averiguando todas as funcionalidades que são requeridas atualmente no portal e as almejadas num futuro próximo.

Porém, independente do CMS que se vá usar, é possível vender essa idéia e vender bem. Há mercados não ocupados, onde não se vende esse tipo de serviço. Aqui em Teresina, por exemplo, não se conhece muito bem a importância dos sistemas de gestão de conteúdo, e não há empresas investindo.

Os CMSs que citei, são gratuitos e open source, possuem uma comunidade movimentada, inclusive as brasileiras, e que ganham dinheiro com isso. Espero está em condições de preencher essa lacuna no mercado local.

Quanto ao Plone, estou bem desatualizado. Surgiram novas versões desde o tempo em que estava estudando. Vou correr atrás do prejuízo.