Montando um ambiente Python

Fui alocado em um projeto feito em Python com Django. Estou montando o ambiente de desenvolvimento e resolvi colocar aqui um passo a passo.

Como estou no MacOS, não precisei instalar o Python.

Instalar o pip no Python do sistema operacional: Ele é um substituto do easy_install. Até agora, o que vi de diferente é que você pode passar um arquivo com suas dependências para ser instalado.
easy_install pip

Instalar o VirtualEnv: Serve para criar ambientes python isolados. Como um RVM, do ruby.
pip install virtualenv

Instalar o Vitual Env Wrapper: Então, aparentemente, o VirtualEnv não tem uns comandos bacanudos como o rvm, daí foi criado esse wrapper, para dar uma moral
pip install virtualenvwrapper

Breve config do Vitual Env Wrapper:
Adicionar no ~/.bashrc, ou ~/.bash_profile:
# VirtualENV config
export WORKON_HOME=~/.virtualenvs
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages --distribute'
source /usr/local/bin/virtualenvwrapper.sh

Assim todos os envs criados não terão uma pasta site-packages e usarão o Distribute.

A partir de agora, não bagunço mais nada no Python do sistema operacional.

Recuperar a versão de uma dependência, em um pom, no bash

No projeto que estou trabalhando, estou usando Maven, mas nem todas suas dependências estão.

Uma destas dependências continua sendo alterada, e para colocar ela no meu projeto devemos seguir os segintes passos:

  1. O jar cliente é gerado, sempre com o mesmo nome, a partir da execução de um script ant;
  2. Instalo o jar no repositório local do maven, mudando o nome do jar para adicionar a tag do CVS.

Um desenvolvedor do time precisou fazer um script que baixa essa dependência e faz esse processo de build. Mas, para isso precisava da versão do jar, que o projeto em que trabalho depende. A forma para fazer isso foi ler o pom.xml e pegar a versão que o projeto depende.

Seguem os passos:

1. Pegar a tag com a dependência:
grep -B 2 -A 2 "foo-client" pom.xml

Resultado:

<dependency>
    <groupId>com.beyondclick.foo</groupId>
    <artifactId>foo-client</artifactId>
    <version>1.2.42</version>
</dependency>

2. Pegar, somente, a tag com a versão:
grep '<version>'

Resultado:

    <version>1.2.42</version>

3. Pegar somente o conteúdo. Para isso vou usar o sed, substituindo a tag por nada 😉
sed 's#</*version>##g'

Observe o uso do ‘/*’ para informar que deve substituir o fechamento da tag e o ‘g’, no final, para indicar que deve substituir todas as ocorrências.
Resultado:

    1.2.42

Finalmente, encadeando tudo no bash:
grep -B 2 -A 2 "foo-client" pom.xml | grep '<version>' | sed 's#</*version>##g'

Apagar os arquivos retornados pelo find

Sabe quando você precisa apagar uma lista de arquivos com um determinado padrão? O mais comum é apagar um conjunto de arquivos de uma mesma extensão.

No meu caso, estou querendo apagar os arquivos com extensão .orig, criados pelo git após um merge.

Eu posso usar o find para achar os arquivos terminados com .orig:
find . -iname \*.orig

Depois apagar um a um, usando rm.
rm ./caminho/para/o/arquivo/e_nome_do_arquivo.orig

Mas, se forem muitos arquivos, mais do que um, vou perder um tempo enorme selecionando o nome, copiando e colando com o rm.
Por isso, achei mais interessante usar o resultdo do find como argumento para o rm, através do conceito de pipe, do Bash:
find . -iname \*.orig | xargs rm

Pronto. Arquivos apagados!

Maven Integration for Eclipse 3.7, com WTP.

Com o lançamento do Eclipse 3.7, codinome Indigo, começa minha saga na tentativa de atualizar meu ambiente de trabalho, e todos os problemas relacionados com atualização dos plugins que uso.

Minha principal dificuldade foi na instalação do plugin para o maven: M2Eclipse, quando usado para projetos web. O problema era a extensão do M2Eclipse que configura projetos web, usando o Web Tools Plataform – WTP.

Depois de um tempo buscando, encontrei a informação de que a extensão m2e-wtp está na loja do M2Eclipse. Porém, ao entrar na lojinha, não encontrava a extensão que juravam que estava lá.
Procurando mais um pouco, descrobri que o m2e-wtp tem um problema de compatibilidade com outra extensão. E, por isso, foi removido da loja, como explicado na lista de desenvolvedores. 😦

Nesta mesma thread, tem o link que oferece a extensão m2e-wtp para os que não estão usando o a extensão incompatível.

Problema resolvido: Eclipse 3.7 – Indigo com o plugin M2Eclipse e a extensão m2e-wtp, que integra com o WebTools Platform.

Recuperando a lista de commiters do CVS

Alguns dos projetos, em que estou trabalhando, ficam no CVS. Estou tentando convertê-lo para o Maven sem causar impacto no trabalho dos outros desenvolvedores da equipe. Para isso preciso conseguir fazer o trabalho off-line e só publicar para os outros quando já estiver pronto.

Isso me levou a uma cruzada pessoal para mostrar as vantagens de se usar um Git da vida. No momento, consegui, junto com outros desenvolvedores, adotar o Git em uns projetos mais novos da equipe.

Para que eu consiga usar o Git neste projeto, preciso conseguir fazer uma importação do repositório. E, nesta importação, converter os nomes dos autores do commit para o formato do git.

Minha primeira dificuldade foi conseguir a lista de autores do CVS. Na falta de uma ferramenta melhor, fui para o Terminal:
export CVS_ROOT=:pserver:nome_usuario_cvs@servidor:path_repo
cvs login
cvs checkout MeuProjeto
cvs log > dump_do_log.txt
less dump_do_log.txt | grep "author: ." | awk '{sub(/\;/,"= <>",$5); print $5}' | sort -u > autores_do_meuprojeto.txt

No final eu terei um arquivo assim:
cvs_acdesouza= <>

Agora vem o trabalho de mapear os nomes e emails. Mas isso vai ter que ser manual 😦

Agradeço aos autores dos tutoriais e fóruns que me ajudaram:
Tutorial do Awk
Ordenar a lista de usuários e remover as entradas duplicadas;
Remover o ; no nome do usuário.

Porra, Gedit! Larga meu tab-size

Estava tendo o seguinte problema com o Gedit, no Ubuntu 10.10: Cada vez que eu gravava o arquivo a configuração de tamanho de tab mudava para 2.

Como todos sabem, o correto valor para o tab-size é 4, como ensinou Nosso Senhor.

Procurando por ai, vi que o problema não era só meu e aprendi que para resolver o problema do tab-size no Gedit é necessário desabilitar o plugin Smart Indent.

Não encontrei, ainda, solução para usar o Smart Indent, sem causar o problema do tab-size.

BrOffice 3.3 no Ubuntu 10.10 maverick

Com a saída do LibreOffice 3.3, o pessoal do BrOffice já se mexeu para cumpri a promessa de se basear neste fork livre do OpenOffice(sem link. Bad Oracle!).

Estou usando Ubuntu na máquina do trabalho, então a instalação foi ridícula de fácil. Eu fiz pelo console, porque coloco isso em um script para instalações futuras:
#Remover o OpenOffice
sudo apt-get remove openoffice*.*

#Adicionar o repositório ppa para o LibreOffice
sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update

# Instalar só o Writer, Calc e Impress com as configurações para o Gnome.
sudo apt-get install libreoffice-gnome libreoffice-calc libreoffice-writer libreoffice-impress libreoffice-l10n-pt-br libreoffice-help-pt-br

Pronto.

Caso tenha medo do console, faz pelo Synaptics:
Sistema > Administração > Gerenciador de Pacotes Synaptics

Adicione o repositório PPA, em inglês, ppa:libreoffice/ppa

Busque por libreoffice e marque os seguintes pacotes para instalação:

  1. libreoffice-gnome
  2. libreoffice-calc
  3. libreoffice-writer
  4. libreoffice-impress
  5. libreoffice-l10n-pt-br
  6. libreoffice-help-pt-br

Manda instalar e tá pronto.