quarta-feira, 8 de maio de 2013

configurando e testando o virtualenvwrapper no Ubuntu 12.04

Este é um roteiro básico pra quem quiser utilizar o virtualenv através da ferramenta virtualenvwrapper. A proposta do post é configurar estas ferramentas no ambiente Ubuntu 12.04 e colocar um projeto(django-mingus) em funcionamento neste ambiente virtual que será criado a partir das ferramentas citadas anteriormente. Antes de mais nada, devemos instalar alguns pacotes no sistema operacional:
islan@tornado:~$ sudo apt-get install python-dev python-pip python-setuptools
Como o projeto que instalaremos possui/utiliza outros projetos que adotam diferentes sistemas de controle de versão de código, necessitaremos ter as ferramentas básicas destes sistemas de controle de versões instaladas no Ubuntu:
islan@tornado:~$ sudo apt-get install git subversion mercurial
Finalizando, instalaremos o virtualenvwrapper:
islan@tornado:~$ sudo pip install virtualenvwrapper
Adicionar as seguintes linhas ao final do seu arquivo ~/.profile (obviamente, alterando o caminho $HOME/Documentos/.virtualenvs para o caminho que vc irá utilizar no seu ambiente:
export WORKON_HOME=$HOME/Documentos/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
Após a edição do ~/.profile, carregar estas alterações em seu ambiente:
islan@tornado:~$ source ~/.profile 
Agora já podemos criar nosso ambiente e entrar em seu diretório:
islan@tornado:~/Documentos/.virtualenvs$ mkvirtualenv myblog2
New python executable in myblog2/bin/python
Installing setuptools............done.
Installing pip...............done.
(myblog2)islan@tornado:~/Documentos/.virtualenvs$ workon myblog2
(myblog2)islan@tornado:~/Documentos/.virtualenvs$ cdvirtualenv 
(myblog2)islan@tornado:~/Documentos/.virtualenvs/myblog2$ 
Os passos seguintes são os mesmos previstos no roteiro de instalação do projeto django-mingus:
(myblog2)islan@tornado:~/Documentos/.virtualenvs/myblog2$ git clone git://github.com/montylounge/django-mingus.git
Alterar o arquivo stable-requirements.txt, adicionando um pacote que é requerido pelo projeto django-mingus mas que não foi listado:
-e git://github.com/ktonon/django-portfolio.git#egg=django_portfolio
Instalar os pacotes através do pip:
(myblog2)islan@tornado:~/Documentos/.virtualenvs/myblog2$ cd django-mingus/mingus/
(myblog2)islan@tornado:~/Documentos/.virtualenvs/myblog2/django-mingus/mingus$ vi stable-requirements.txt 
(myblog2)islan@tornado:~/Documentos/.virtualenvs/myblog2/django-mingus/mingus$ pip install -r stable-requirements.txt 
Criar o arquivo local_settings.py baseado no modelo já fornecido pelo projeto, criar/sincronizar a base de dados, carregar os dados de teste do projeto e finalmente executar o servidor de desenvolvimento:
(myblog2)islan@tornado:~/Documentos/.virtualenvs/myblog2/django-mingus/mingus$ mv local_settings.py.template local_settings.py
(myblog2)islan@tornado:~/Documentos/.virtualenvs/myblog2/django-mingus/mingus$ ./manage.py syncdb
(myblog2)islan@tornado:~/Documentos/.virtualenvs/myblog2/django-mingus/mingus$ ./manage.py loaddata test_data.json
Installed 23 object(s) from 2 fixture(s)
(myblog2)islan@tornado:~/Documentos/.virtualenvs/myblog2/django-mingus/mingus$ ./manage.py runserver
Pronto, se tudo ocorreu conforme o esperado você terá sua instalação do django-mingus rodando em um ambiente isolado e acessível através do endereço: http://127.0.0.1:8000/

cache local de pacotes instalados via pip

Quer fazer cache local de pacotes já baixados via "pip install" poupando seu tempo e sua conexão? Basta adicionar a variável de ambiente PIP_DOWNLOAD_CACHE ao final de seu ~/.profile (Substitua o caminho como lhe convier):
export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
Recarregue seu .profile
islan@tornado:~$ source ~/.profile 
Pronto.

quinta-feira, 11 de outubro de 2012

Tratamento de parâmetros em scripts python

Boa noite!

Passando por aqui pra indicar uma ótima biblioteca pra facilitar a vida de quem precisa criar scripts em python. Quer coisa mais chata que a definição dos parâmetros suportados pelo script que vc está criando?

Existe um módulo chamado docopt que é simplesmente, fenomenal.

A instalação pode ser feita através do pip:
ubuntu$ sudo pip install docopt

Basicamente ela utiliza a docstring definida no início do script e já habilita seu script a receber toda a parametrização que estiver por lá.

Os parâmetros passados são todos adicionados à um dicionário que pode ser facilmente tratado.

Pra exemplificar o que estou dizendo, segue um exemplo disponível no próprio projeto.:


islan@tsunami ~$ cat teste.py
#!/usr/bin/python
"""Naval Fate.

Usage:
  naval_fate.py ship new <name>...
  naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
  naval_fate.py ship shoot <x> <y>
  naval_fate.py mine (set|remove) <x> <y> [--moored|--drifting]
  naval_fate.py -h | --help
  naval_fate.py --version

Options:
  -h --help     Show this screen.
  --version     Show version.
  --speed=<kn>  Speed in knots [default: 10].
  --moored      Moored (anchored) mine.
  --drifting    Drifting mine.
"""

from docopt import docopt

if __name__ == '__main__':
    arguments = docopt(__doc__, version='Naval Fate 2.0')
    print(arguments)

A execução do exemplo anterior resulta em:

islan@tsunami ~$ ./teste.py ship new teste
{'--drifting': False,
 '--help': False,
 '--moored': False,
 '--speed': '10',
 '--version': False,
 '<name>': ['teste'],
 '<x>': None,
 '<y>': None,
 'mine': False,
 'move': False,
 'new': True,
 'remove': False,
 'set': False,
 'ship': True,
 'shoot': False}
islan@tsunami ~$

Posso estar parecendo exagerado, mas realmente adorei o projeto.
O melhor de tudo: há versões do projeto já disponíveis para outras linguagens como php, javascript.

O criador do projeto falou na PyCon UK 2012. Vale a pena assistir.

Enjoy!

terça-feira, 11 de setembro de 2012

Imagem do dia da NASA como seu papel de Parede


Está certo que nós adoramos olhar o dia todo pras nossas inúmeras sessões de terminal abertas durante o dia, mas que tal colocar um papel de parede interessante no seu desktop Linux?

Esta é a idéia por trás do script de autoria de Christian Stefanescu pode ser visualizado aqui.

Trata-se de um script bem simples, feito em python.

São pré requisitos a instalação do pil e do feedparser:
PIL (apt-get install python-imaging ou pip install PIL)
feedparser (apt-get install python-feedparser ou pip install feedparser)
Há duas variáveis no início do script que precisam ser observadas/setadas:
DOWNLOAD_FOLDER
FONT_PATH

A primeira refere-se ao diretório onde serão salvas as imagens e a segunda variável trata-se da fonte que será utilizada para inserir o texto do feed da nasa na imagem.

Sugiro que adicione uma entrada no crontab para que este script seja executado diariamente.

Enjoy!

terça-feira, 4 de setembro de 2012

Removendo espaços à direita em Código fonte - Sublime Text 2



Se você, assim como eu, utilizar o Sublime Text 2 e necessitar "limpar" sujeiras como espaços à direita de um código fonte, sugiro que utilize o plugin TrailingSpaces.

O processo de instalação do plugin é super simples:
Ir no diretório de pacotes, clonar o projeto do github e adicionar o atalho para sua chamada:



cd ~/.config/sublime-text-2/Packages
git clone git://github.com/SublimeText/TrailingSpaces.git

Menu Preferences>Key Bindings - User e adicionar o código:
[{ "keys": ["ctrl+shift+t"], "command": "delete_trailing_spaces" }]

sexta-feira, 31 de agosto de 2012

Habilitar Debug no squid

Quando a configuração do seu squid passa a ficar cada vez mais complexa, o que geralmente resulta no crescimento do número de acls(ou seria o contrário? :P), é essencial utilizar o debug para obter mais detalhes sobre seu proxy.

O squid possui várias seções de debug, que podem ser habilitadas. A lista completa você pode ver aqui.

No meu caso, como estava precisando confirmar em qual acl determinado acesso estava sendo bloqueado, tive que habilitar o debug da seção 28, que trata sobre controle de acessos:

debug_options 28,2

Sendo que o 2, no final da configuração nada mais é que o log level que você necessita.

Ah! Muito cuidado ao habilitar o debug em um proxy que esteja em pleno funcionamento. O log pode crescer rapidamente, além do i/o para a escrita do log aumentar consideravelmente.

Até a próxima!

quinta-feira, 30 de agosto de 2012

TCP_DENIED_REPLY/403 no access.log

A configuração de meu proxy possui uma acl que libera o acesso ao site xpto.

Apesar de haver uma acl explícita de liberação, que antecede qualquer outra acl de bloqueio e que talvez pudesse interferir nas permissões, o proxy estava retornando a mensagem TCP_DENIED_REPLY/403 ao tentar baixar um arquivo deste mesmo site xpto.

Geralmente, quando necessito liberar o acesso total a determinado site/domínio eu utilizo somente uma diretiva http_request liberando determinada acl.

Realmente não é necessário a utilização da diretiva http_reply_access, já que por padrão ela é uma diretiva permissiva:


 NOTE: if there are no access lines present, the default is to allow
 all replies


Porém, em minha configuração a diretiva http_reply_access já tinha sido utilizada para restringir um outro conteúdo. Exatamente este uso que passou a impactar esta liberação.

Para solucionar o problema e permitir que o cliente acessasse todo o conteúdo do site, bastou incluir a exceção para a acl do site que eu precisava liberar na chamada desta diretiva (http_reply_access).