Dicas
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.
Mudar charset e quebra de linha recursivamente no Linux
by Handrus Nogueira on 15:50, under Dicas, Linux
A algum tempo atrás precisei passar uma aplicação web que utilizava quebras de linha no formato linux e charset iso-8859-1 (US-Latin) para UTF-8 com quebra de linha no formato windows. Na época codifiquei com a ajuda do chronos este script que agora compartilho:
1 2 3 4 5 6 7 8 9 10 | #!/bin/sh #change extensions filter as you need ;) find -type f | egrep "\.php|\.css|\.js|\.html|\.htm" | egrep -v "\.svn" > ./charset_list.txt; while read -r line;do #charset change iconv -f LATIN1 -t UTF-8 "$line" > "${line}2"; mv "${line}2" "$line"; #we adopted dos format for line breaks unix2dos "${line}"; done < ./charset_list.txt > ./charset_after.log 2>&1 #receive list of params and send output to log |
Explicações: O script gera uma lista com todos os arquivos da pasta onde ele se encontra e suas subpastas subsequentes (conforme o filtro explicado na segunda linha do código).
Depois ele lê a lista e aplica as alterações num arquivo cópia. Move o arquivo sobre o anterior e depois altera as quebras de linha. Bastante simples, I LOVE BASH!
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!
Pensamento rápido – “ilike” SQL
by Handrus Nogueira on 12:18, under Dicas, Django, Multi Database, MySQL
Hoje vi um post num dos blogs que acompanho, onde um camarada disse ter conseguido 1000% de melhora na performance de uma aplicação trocando um:
SELECT * FROM TABLE WHERE fieldname ILIKE 'abc%';
Para
SELECT * FROM TABLE WHERE lower(fieldname) LIKE 'abc%';
(diferença de ilike para lower… like)
Eu achei tosco (hehehe), óbviamente que esse ganho absurdo só pode ter ocorrido numa massa gigantesca de dados e provavelmente num campo sem índice.
Mas a minha dica é outra:
Além do ganho em performance o “ilike” não é suportado no mysql e sqlite.Portanto seu uso é extremamente desaconselhável, principalmente se você estiver trabalhando com Django, Rails ou qualquer aplicação que forneça um layer multi-db.
Claro que nos frameworks citados acima o único jeito de fazer isso é forçar o uso de “ilike”, suas ORMs conseguem lidar com situações assim muito bem.
Conclusão
Evite “ilike” em queries de sql, use o “lower()… like” ou “upper… like”; E se lembre de mudar sua variável para upper/lower!
Escritório Portátil do Desenvolvedor Web
by Handrus Nogueira on 22:26, under Dicas, Django, Editores
Seguindo as “febres” de artigos que só listam coisas úteis aqui vai minha lista de softwares portables e com licença free (alguns freeware, outros open-source) para você levar na pen-drive ou disco externo e ser capaz de lidar com qualquer situação desde que tenha um windows à mão. O foco são desenvolvedores PHP e PyWeb.
1 – Browsers
Firefox 3.5, chrome, opera, avant browser. – Não faz sentido IE se você já está num windows certo? E ainda que você precise de outras versões lembre-se que estou falando de licenças free. A microsoft ainda não liberou nenhuma versão portable.
2 – Editores/IDEs
Aptana – apenas escolha zip file na opção ” download type”, Zend, Notepad++,
Gvim
Separei o Gvim por causa de alguns plugins.
Rails, PHP, CSS, CSS Color Preview, javascript, SQL, MySQL Runner e para os que gostam do estilo IDE, tentem o Proj
No caso do Gvim, considere ver o post do wombat modificado.
Também vem vindo aí um post meu sobre vim/gvim… fiquem de olho!
3 – Editores de Imagem
Gimp, Incscape, PickPick (screenshot e color picker).
4 – Escritório / Comunicação
Open-Office, Pidgin, aMsn, Thunderbird e lightning para thunderbird para os calendários e to-do.FoxitReader para abrir pdfs
5 – FTP / SSH
6 – Utilitários
7-zip, FreeFileSync,Font Matcher, WinMerge, InfraRecorder, Wink
7 – Servidores Web
PHP: Xampp,USB Web Server
– UPDATE: pra mim nenhum dos dois servidores para Django funcionaram, se você teve sucesso, poste uma mensagem contando como
Django: IntantDjango, DjangoStack
Comparação de Frameworks Javascript
by Handrus Nogueira on 03:20, under Dicas
Eu particularmente uso JQuery e muita gente sempre me procura para compara-la à ExtJS, MooTools, Prototype, YUI e Dojo. Como também faz tempo que estou devendo um post pro Chronosbox… aqui está!
- Velocidade
Vale lembrar que os resultados mudam de navegador para navegador, meu testes:Browser Dojo ExtJS JQuery Mootools MochiKit Prototype YUI Chrome 2.0 22 66 24 90 838 409 308 Firefox 3.0 190 306 209 231 5013 298 547 IE7 647 538 800 1099 120388.16666666665 2696 2102 Safari 4.0 9 85 14 65 1005 220 238 Opera 9.64 92 135 306 212 4092 200 441 - Compatibilidade
ExtJS é o único dos frameworks acima que não aparece aqui, no entanto ele foi feito para ser compatível com JQuery e YUI, ambos com nota A.No teste de seletores somente o MochiKit apresentou problemas com os seletores, ainda assim ele aparece com nota A.Ajax/DHTML Libraries DHTML-only Libraries THE GOOD GUYS (Grade A Toolkits) Dojo Toolkit DHTML Kitchen Echo 2 DynAPI 3.0 Javascript/Ajax Toolbox How To Create Jitsu Open Cube jQuery Todd Ditchendorf’s DHTML Gallery jsLINB UIZE JavaScript API MochiKit Walter Zorn Moo.fx X Library Prototype Sardalya Script.aculo.us Spry Tacos TurboWidgets TwinHelix Wicket Yahoo! User Interface Library Zapatec Ajax Suite THE BAD GUYS (Grade D or E Toolkits) AjaxFace Bindows EBA Ajax Plex Toolkit Microsoft Atlas ThyApi Rialto TIBCO General Interface ZK Fonte: http://www.musingsfrommars.org/2006/03/ajax-dhtml-library-scorecard.html
A – IE6+, FF1+,Safari 1.2+,Other DOM | B – IE6+, FF2+,Safari + | C – IE6, FF1+ | D – IE6. - Tamanho
YUI – 43Kb (Core + Selector)
Moochikit – 51Kb
Jquery – 56Kb
Mootools – 65Kb
Dojo - 79Kb
Prototype – 126Kb
Extjs – 131Kb - Rich Internet Application
Este item eu considero um empate técnico já que todas apresentam os componentes básicos para contruir ambientes Ricos, embora o ExtJS deixe isso claro mais facilmente e o Jquery tenha muito mais opções que os concorrentes é uma questão de saber procurar. Para facilitar um pouco a busca aqui ficam 2 links:
http://theresaneil.wordpress.com/2009/02/04/30-essential-controls/
http://wiki.jqueryui.com/Essential-Controls-List - Documentação
Em termos de documentação o ExtJs dá um show de organização e visual, mas a falta de exemplos de código torna sua aprendizagem um tanto quanto lenta e difícil. A documentação do Dojo é uma lista de funções amontoadas, o Yahoo UI… alguém acredita que existe um arquiteto de usabilidade na yahoo quando vê aquele site??A mootools está indo pro caminho certo, se incluir alguns demos talvez fique uma documentação boa, já a mochikit é outra documentação básica… O Jquery pelo numero de exemplos e pela iniciativa do Visual Jquery fica com o prêmio nesse tópico.
Conclusão:
Em termos de velocidade e compatibilidade podemos considerar um empate enter Jquery, MooTools, ExtJS, Prototype e Dojo. Mas em tamanho ExtJS e Dojo são mais de 20Kb maiores, o que é considerável nuam conexão lenta.
No geral Jquery e Mootools são as vencedoras, e por detalhes minimos como tamanho e atividade da comunidade vou considerar o hanking dessa forma:
- Jquery
- Mootols
- Prototype/ YUI
- ExtJS/Dojo
- MochiKit
Um aviso especial para o ExtJS sua liçensa é dual: Comercial e GNU portanto você deve pagar para usa-la em projetos comercias!!
Jogue seus games de playstation no seu Linux
by Felipe 'chronos' Prenholato on 22:09, under Dicas, Linux
É comum termos emuladores de vários videogames para Windows, o que eu já acho um trabalho de desenvolvimento notável. Alguns destes notáveis desenvolvedores resolveram portar emuladores do Windows para o Linux e outros sistemas operacionais, podemos citar o ZSnes (Snes), Yabause (Sega Saturn) e o nome do nosso post de hoje, pSX emulator (Playstation).
O pSX emulator (Playstation) emula com sucesso através do uso de uma bios o playstation, acredito que completo, pois jamais tive problemas com algum jogo. Vamos ao passo a passo para a instalação do pSX emulator (Playstation):
- Depêndencias: tenha certeza que tens instalado em teu sistema OpenGL, ALSA, GTK, GTKGLEXT e libxml2. Não me lembro de outra dependencia faltando em meu Gentoo.
- Baixe o arquivo pSX_linux_1_13.tar.bz2 para sua máquina.
- Descompacte o arquivo, eu recomendo fazê-lo na sua home: tar jxvf pSX_linux_1_13.tar.bz2 -C ~/
- Você precisa baixar a bios do playstation, este não é um procedimento legal, logo fica por sua conta e risco. O nome do arquivo é: SCPH1001.bin.
- Feito o Download da bios, coloque-a no diretório bios (se você seguiu o tutorial, ~/pSX/bios). Em seguida inicie o emulador, execute no terminal: cd ~/pSX;./pSX
Pronto, você está rodando o pSX
. A questão que sempre vem é, rodar não é o difícil, coisas como a configuração dos memory cards sempre pegam o pessoal, então vamos lá (estes passos são baseados no readme que vem com o tar.bz2:
Configurando os memory cards: a configuração é bastante simples, vá em Files->Configuration, aba Memory Cards. Clique nos … e escolha um nome de arquivo, clique em OK e pronto. Repita o passo para o segundo Memory Card. Você pode trocar os Memory Cards a vontade com o do seus amigos, etc
.
Configurando os paths: configurar os paths pode inicialmente parecer uma coisa boba a se fazer, mas irá te poupar tempo de fica procurando por coisas bobas. De atenção especial a pasta default de memory cards e cd images. Na pasta de cd images você pode linkar os diretórios com as imagens dos CDs de jogos.
Configurando Joystick: qual a graça de se jogar em um emulador sem um controle adequado
? Basta plugar um joystick em qualquer porta USB sua, e caso este for reconhecido pelo Linux, iniciar o pSX. O Joystick será listado na aba Controllers da configuração e você deverá selecionar ele no select Device, em seguida basta ir pressionando as teclas (você precisa clicar na primeira) e configurar o joystick.
Bem, após ter feito tudo isso, você já deve estar jogando seu jogo predileto. Faça bom proveito e, caso você seja um amante de Gran Turismo 2 ou Blood Roar, como eu, vamos trocar figurinhas :].
Abraços!
VIM colorscheme Wombat – customizado
by Felipe 'chronos' Prenholato on 00:59, under Colorscheme, Dicas, VIM - Vi IMproveded
Procurando por uns plugins legais para o VIM relacionados a python eu achei (tropeçei) em um tema chamado Wombat, uma variação do Desert criada por Lars H. Nielsen. Como achei ele interessante eu peguei e comecei a mecher nele, deixando mais próximo do desert customizado.
Aqui temos uma screenshot em 1440×900 com os dois temas abertos, Wombat original e meu tema Wombat modificado:
Com cores mais vivas (fortes?) eu achei melhor para ler a noite, sem luz (como eu normalmente fico quando meu colega de quarto dorme). Esta semana eu trabalherei bastante no timetracker (em breve eu falo sobre ele aqui) e no blog de minha namorada, e ai falo como o tema fica enquanto trabalhamos com ele.
Download: wombat modified colorscheme
Divirtam-se!
Indentando seus arquivos automaticamente e em massa com o VIM.
by Felipe 'chronos' Prenholato on 12:54, under Dicas, Planet GentooBR, VIM - Vi IMproveded
Heya pessoal.
Depois de longo tempo sem postar, mas sempre coletando idéias, a dica de hoje abrange uma área delicada, indentação de código. Por todo o mundo existem códigos mal indentados (exceto em python :]), e no meu trabalho, este é um caso extremamente comum com as ferramentas que dou manutenção, e literalmente é um pé no saco. No dia 06 de Setembro deste mês, de tão saco cheio que estava dos códigos mal indentados e sempre usando uma mapping (1) do VIM para indentar uma página, com o problema sério que quando ia dar um svn diff ou coisa do genêro quase toda a página vinha no diff, senão toda ela, resolvi verificar se o VIM não tinha um “BATCH mode”, assim com o top, para usar em um loop para passar nos arquivos.
Pois bem, depois de uma meia hora batendo papo no #vim da irc.freenode.net, o pessoal me fala de uma opção ‘-c’ do VIM, que eu jurava não ter visto no manual do VIM. É dai que surge a dica de hoje
.
Para indentar os arquivos, podes usar os seguintes comandos (segue abaixo a explicação dos comandos para ninguém ficar boiando):

