Chronosbox

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:

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:

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.

3 Comments :, , , , , , , , , , , , , , more...

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!

Leave a Comment more...

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.

(continue reading…)

1 Comment :, , , , , , , , , , , , more...

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!

2 Comments :, , , , , , , , , , more...

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!

1 Comment more...

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

WinScp, FileZilla, Putty

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

1 Comment more...

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á!

  1. 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

    Fonte: http://handrus.chronosbox.org/slickspeed/

  2. 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.

  3. Tamanho
    YUI – 43Kb (Core + Selector)
    Moochikit – 51Kb
    Jquery – 56Kb
    Mootools – 65Kb
    Dojo -  79Kb
    Prototype – 126Kb
    Extjs – 131Kb
  4. 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
  5. 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:

  1. Jquery
  2. Mootols
  3. Prototype/ YUI
  4. ExtJS/Dojo
  5. MochiKit

Um aviso especial para o ExtJS sua liçensa é dual: Comercial e GNU portanto você deve pagar para usa-la em projetos comercias!!

2 Comments :, , more...

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):

  1. 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.
  2. Baixe o arquivo pSX_linux_1_13.tar.bz2 para sua máquina.
  3. Descompacte o arquivo, eu recomendo fazê-lo na sua home: tar jxvf pSX_linux_1_13.tar.bz2 -C ~/
  4. 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.
  5. 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
Gran Turismo 2

Gran Turismo 2

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.

Blood Roar 2

Blood Roar 2

Carregando um jogo: O pSX suporta os arquivos de imagem no formato .cue/.bin, .ccd/.img/.sub, .iso, e .mdf/.mds e o próprio CD-ROM do jogo. A maneira mais fácil para mim, é manter os links ou os CDs na pasta cdimages e rodar rapidinho dali. O pSX suporta carregar um jogo pela linha de comando (pSX iso_do_jogo.bin), mas nunca obtive sucesso dessa maneira. Acredito que manter a ISO além de servir como backup do seu jogo é mais rápido que achar o CD original.

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!

2 Comments :, , , , , more...

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!

5 Comments :, , , more...

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):

(continue reading…)

5 Comments :, , more...

StatPress

Visits today: 85 Visits since 6 de abril de 2009: 15777 Visitors now: %visitoronline%