Author Archive
Vim confs prontas para trabalhar com Python e Django
by Felipe 'chronos' Prenholato on 06:59, under Dicas, Django, Linux, VIM - Vi IMproveded, python
Este fim de semana eu reescrevi meu .vimrc e gastei um tempo extra para fazer
as coisas funcionarem melhores para mim com python e django
. Eu acabei
fazendo um belo trabalho e agora estou codando com muito mais eficiência.
Os resultados são:
- Um .vimrc muito bem comentado e com muitas customizações.
- Suporte para python omnicomplete.
- Adição dos paths python e django automáticos ao ambiente do vim.
- Adição da DJANGO_SETTINGS_MODULE automaticamente ao ambiente do vim, para completar seu próprio código.
- Suporte do SnipMate para código django e django templates.
- Django templates com suporte para highlighting das tags e uso do ‘%’ com o plugin matchit.
- Python folding e suporte a python jumping.
- O tema acinzentado wombat com algumas customizações minhas.
- Um gerenciador de sessões para o Vim para facilitar sua vida em manter o ambiente de trabalho.
Aqui estão os arquivos para download:
- vim-confs-latest.tbz2: O arquivo tar compactado com todos os arquivos, descompacte na sua home.
- vim-confs-latest.tbz2.md5: O md5sum do tar.
Se você preferir, este é o endereço no github: http://github.com/chronossc/my-vim-confs
O pacote não poderia ter sido criado sem alguns plugins e artigos, segue a referência:
- UsingVimWithDjango do Django Wiki
- SnipMate vim plugin por Michael Sanders
- SnipMate snippets for django por Rob Hudson (Demo)
- Matchit vim plugin por Benji Fisher
- Updated Syntax highlighting for Django templates por Dave Hodder
- py_jump vim plugin por Sergiy Matusevych
- python fold vim plugin por Jorrit Wiersma
- Session Manager for vim por Yuri Klubakov
Adicionalmente (thx Handrus), eu sugiro para quem escreve muito HTML, dar uma olhada no SparkUp vim and textmate plugin
. Eu não testei, mas pareceu muito bom.
Muito obrigado a quem ler, a todos que escreveram os plugins, ao pessoal do canal #vim na freenode e a ótima documentação do vim!
Agora bora codar com o vim
** Atualizado
2010-03-07: Eu criei novamente o tar porque eu removi algumas mensagens de debug, então faça o download novamente se você já fez
.
2010-03-09: Eu criei novamente o tar, fiz alguns fixes e adicionei no github.
Migrando bases de dados LATIN1 para UTF-8 com o PostgreSQL
by Felipe 'chronos' Prenholato on 03:59, under Databases, Debian/Ubuntu, Dicas, Gentoo, Linux, PostgreSQL, Servidores
Nos dias atuais é um padrão que todos os sites e servidores web rodem ao menos com UTF-8 como encoding default, entretanto pode-se encontrar casos onde ainda se roda LATIN1 ou até mesmo ASCII.
O caso que tratamos hoje é de um servidor Debian, versão 5.0.3 (lenny), que usava o encode LATIN1 quando instalado e configurado o Postgresql, e não me deixava criar uma base de dados UTF-8, gerando o seguinte erro:
debian:~# su postgres -c 'createdb teste3 -E UTF-8' createdb: database creation failed: ERROR: encoding UTF8 does not match server's locale en_US DETAIL: The server's LC_CTYPE setting requires encoding LATIN1.
Configurando múltiplos ambientes Python
by Felipe 'chronos' Prenholato on 00:20, under Dicas, Django, Gentoo, python
Múltiplos ambientes python
Trabalhar com várias versões de ambientes python tem se tornado algo comum em minha vida, e acredito que um meio fácil de ’setar’ estes ambientes seja algo útil e não tão simples para a maioria das pessoas.
Eu criei um simples bash script que seta este ‘ambiente’, trata-se de uma função que você cria no seu .bash_profile. Executa-se ela com a versão do python em seguida e pronto, seu ambiente esta configurado. Vamos ver no código como eu fiz, o script está com comentários em inglês:
export ORIGINALPATH=$PATH loadpyenv(){ # $PV is our control variable, get from $1, first argument on shell # anything that you need to put here and depend for python version ${PV} is your var ;) export PV=$1 echo -e "\n:: Setting environ to use python $PV" # Put here various aliases that you can use # put a python alias alias python="python${PV}" # m and runserver a kick alias for Django common actions alias m="python${PV} manage.py" alias runserver="python${PV} manage.py runserver :8000" # easy and fast install of python packages, in right path with localpyinstall alias localpyinstall="python${PV} setup.py install --prefix=~/.py/${PV}/" echo -e "\n:: New aliases" # print aliases :) alias python m runserver localpyinstall echo -e "\n:: New PATH" # setup aplications path, be careful about not use $ORIGINALPATH. # # I use a path structure like that: # ~/.py/ # |-- 2.4 # |-- 2.5 # `-- 2.6 export PATH="${HOME}/.py/${PV}/bin/:${ORIGINALPATH}" echo $PATH echo -e "\n:: New PYTHON PATH" # setup new python path, don't need to add system wide path, just our custom paths export PYTHONPATH="${HOME}/.py/${PV}/lib/python${PV}/site-packages/" # print more some info python$PV -c "import sys;print sys.path" echo -e "\n:: Django version & file" python$PV -c "import django;print 'version %s ... file %s' % (django.get_version(),django.__file__);" }
Agora crie uma estrutura de diretórios com o comando:
$ mkdir -pv ~/.py/{2.4,2.5,2.6}
E cada vez que for usar uma versão diferente do python, carregue com:
$ loadpyenv VERSÃO
Onde VERSÃO é a versão escolhida do python.
Várias versões do Python no Gentoo
O Gentoo Linux, minha distro do dia a dia, me dá um bom bonus quanto a múltiplas versões do python, configure no /etc/make.conf a seguinte linha:
USE_PYTHON="2.4 2.5 2.6"
Instale os pythons nas versões escolhidas e execute o seguinte comando para re-compilar seus pacotes:
emerge $(eix -I dev-python/* | grep "\[I\]" | cut -d' ' -f2)
O eix é uma aplicação de indexação do portage, muito comum nas máquinas Gentoo.
Cada pacote python é recompilado para as 3 versões (no caso), mas tive problemas em compilar alguns pacotes para a 2.4, fiquem avisados
Bom, é isso, até mais!
Manipulando erros Http 403 (permissão negada) no Django
by Felipe 'chronos' Prenholato on 17:35, under Apps e extensões, Django
Olá pessoal
. Recentemente, precisei usar o módulo Auth do Django e suas permissões. É bastante interessante como você pode definir permissões por módulo e usar nas views, templates, etc.
Nosso código de hoje vem da necessidade de trabalhar facilmente com permissões negadas, onde o Django fornece apenas um HttpResponseForbidden, o que não é exatamente interessante de manipular, pois o ideal seria algo como a manipulação de erros 404.
Com essa necessidade desenvolvi um Middleware que intercepta exceções Http403 (vem junto com o pacote), e retorna uma das seguintes opções, na ordem de prioridade:
- Uma view customizada, configurada usando handler403 no seu urls.py
- Renderiza o template 403.html
- Renderiza um template Hardcoded
Para usar o Middleware, siga os procedimentos:
- Baixe o projeto no fim deste post, vamos usa-lo de exemplo, ele se chama http403project.
- Descompacte e copie o arquivo http.py para algum lugar do seu projeto, no http403project ele fica na raiz.
- Adicione o middleware ao settings.py:
MIDDLEWARE_CLASSES = ( # ... 'http403project.http.Http403Middleware', )
- De raise na view, ex:
from http import Http403 def Http403View(request): raise Http403(u"This is custom message for permission denied.")
- Configure sua view customizada ou template se desejar. Seu template deve ter o nome de 403.html, sua view recebe os argumentos request e exception, o argumento exception contem a mensagem enviada pelo usuário
. No projeto exemplo ele está renderizando o template 403.html, mas existe uma view de exemplo bastante simples no arquivo urls.py
Projeto: http403project.tgz
Ok, é isto, super simples, por hoje é só
, divirtam-se!
Atualize o hosts.deny para bloquear tentativas de brute force
by Felipe 'chronos' Prenholato on 14:14, under Linux, Servidores
Ai embaixo um simples script para você bloquear hosts tentando brute force no seu SSH, muitas das vezes pode sanar o problema de ter uma porta diferente pro ssh
O script varre o /var/log/messages para detectar tentativas de invasão, pega os hosts, e adiciona no /etc/hosts.deny
Código:
#!/bin/bash</code> cp /etc/hosts.deny /var/tmp/hosts.deny # Jun 8 00:39:43 mintaka sshd[23332]: User root from 222.77.183.51 not allowed because not listed in AllowUsers egrep "$(date +%b) ($(date +%d)|$(date +%e)).*User .* from [a-z0-9\.]* not allowed because not listed in AllowUsers" /var/log/messages | sed -e 's/.* from \([a-z0-9\.]*\) .*/\1/' | sort | uniq | sed -e 's/^/ALL:/' > /etc/hosts.deny ; #Jun 8 11:54:33 mintaka sshd[31221]: Invalid user bob from 62.204.145.224 egrep "$(date +%b) ($(date +%d)|$(date +%e)).*Invalid user .* from [a-z0-9\.]*$" /var/log/messages | sed -e 's/.*Invalid user .* from//' | sort | uniq | sed -e 's/^/ALL:/' >> /etc/hosts.deny ; diff -u /etc/hosts.deny /var/tmp/hosts.deny &>/dev/null || (echo "** hosts.deny updated **" ; cat /etc/hosts.deny)
Script funcionando:
Sep 2 16:55:02 mintaka -- MARK --
Sep 2 13:58:10 mintaka sshd[20790]: Did not receive identification string from 189.2.118.72
Sep 2 13:58:34 mintaka sshd[20795]: Invalid user suporte from 189.2.118.72
# Tentativa de brute force
Sep 2 13:58:41 mintaka sshd[20798]: Invalid user suporte from 189.2.118.72
Sep 2 13:58:43 mintaka sshd[20800]: Invalid user suporte from 189.2.118.72
Sep 2 13:58:46 mintaka sshd[20802]: Invalid user suporte from 189.2.118.72
Sep 2 13:58:49 mintaka sshd[20804]: Invalid user suporte from 189.2.118.72
Sep 2 13:58:51 mintaka sshd[20806]: Invalid user suporte from 189.2.118.72
Sep 2 13:59:24 mintaka sshd[20817]: Did not receive identification string from 189.2.118.72
# Script roda
** hosts.deny updated **
ALL:74.221.239.100
ALL: 189.2.118.72
ALL: 200.27.79.101
ALL: 74.221.239.100
# E os hosts agora estão bloqueados
Sep 2 14:00:09 mintaka sshd[20826]: Invalid user teste2008 from 189.2.118.72
Sep 2 14:00:10 mintaka sshd[20864]: refused connect from 189.2.118.72 (189.2.118.72)
Eu rodo em minha máquina a cada 2 minutos
Fast quote on #django
by Felipe 'chronos' Prenholato on 00:57, under Quotes
Fast quote on #django
<the-teacher> the-man: welcome to Python
<the-man> the-teacher: welcome to what?
<the-man> the-teacher: what is a python?
<some-people> lol
<the-teacher> the-man: the language Django is written in, you twit
<chronos> husahduas… I’m reading it..
<the-man> the-teacher: language?
<some-people-2> the-man, …
<the-man> the-teacher: like, english?
<chronos> need a quote…
<some-people> ”
<the-man> oh come on, don’t bullshit me with “welcome to Python”
<the-man> @ the-teacher
…
Django apps (coleção) – parte 1
by Felipe 'chronos' Prenholato on 03:14, under Apps e extensões, Django
Eu estou trabalhando atualmente com Python e Django, a linguagem e o framework
são excelentes e como pretendo desenvolver um projeto bastante interessante
com ele estou listando aqui alguns dos apps que achei bastante interessante
em uma rápida pesquisa no Django Plugables e outros lugares.
Estou dividindo o artigo em duas partes e postarei uma por semana, coloquem
suas sugestões nos comentaŕios
.
Problema com cores do WP-Syntax
by Felipe 'chronos' Prenholato on 23:24, under Plugins, Wordpress
WP-Syntax é o plugin que colore todos os códigos do meu blog. Meu grande amigo Handrus notou um problema com a cor dele, coincidentemente depois da atualização para WP 2.8.1. Ajustei a cor de background do plugin para que fique legível mas resolvi não trabalhar nas cores agora, pois o WP-Syntax-Colorizer é um .. pé no saco. Estou oficialmente começando a mecher com o mecanismo Geshi e o plugin WP-Syntax para melhorar o plugin, se alguém tiver sugestões do que fazer nele, postem ai
.
Vai ser o primeiro plugin para WP que eu trabalho.
Thx
Template para páginas do Wordpress para mostrar somente posts de uma categoria.
by Felipe 'chronos' Prenholato on 02:11, under Snippets, Wordpress
Exemplo de código rápido para obter facilmente um template que pode ser usado em páginas para separar posts por categoria:
Adicione no seu template de página, antes do loop, o seguinte código:
<? the_post(); $keys = get_post_custom_keys(); if(in_array("category",$keys)) { $categoryslug = get_post_custom_values("category"); query_posts('category_name='.$categoryslug[0]); } ?>
Agora na sua página, adicione um campo customizado com o nome de ‘category’, e o valor sendo o slug da categoria.
Salve a página e seja feliz
. Isso te permite, usar o mesmo template para qualquer página que precise de uma categoria, sem precisar mecher em mais código PHP.
Voltando as atividades
by Felipe 'chronos' Prenholato on 08:40, under My Blog
Depois de um tempinho off de blog (tive bons motivos), tou voltando as atividades …
Twitter: http://twitter.com/chronossc