Linux
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:
#!/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!
Compilando fácil com Debian/Ubuntu
by Handrus Nogueira on 18:28, under Debian/Ubuntu, Linux, Servidores
Como usuário do bom e velho gentoo, sempre senti falta da possibilidade de compilar softwares para ganhar uma certa performance. Principalmente em se tratando e softwares de uso em servidor, como Java, PHP, apache, mysql e porstgres. Nos meus testes sempre senti diferença entre as versões pré-compiladas e compilada in loco.
No Debian/Ubuntu a descoberta do apt-build me ajudou a contornar o problema com a mesma classe e quase a mesma eficiência que o portage.
Vamos ao passo-a-passo:
Para instalar o apt-build:
sudo apt-get install apt-build auto-apt
Configure para sua máquina:
dpkg-reconfigure apt-build
Escolha sua arquitetura de processador e o nível de otimização, o indicado é o médio.
As opções ficam salvas no arquivo /etc/apt/apt-build.conf ; Vamos apenas ajustar o número de processadores na ultima linha do arquivo altere-o para
make_options = " -j4"
onde o número é igual ao número de “cores” + 1. Portanto um quadcore seria “-j5″.
Para evitar que os pacotes compilados sejam atualizados pelos pacotes oficiais vamos editar o arquivo /etc/apt/preferences adicionando:
Package: *
Pin: release o=apt-build
Pin-Priority: 990
Não se esqueça de adicionar os repositórios de código fonte (deb-src) e pronto!
Agora ao invés do tradicional apt-get install
apt-build install
Exemplo: sudo apt-build install xchat emesene
Tutorial rápido sobre apt-build:
apt-build install –reinstall
apt-build upgrade Upgrade nos softwares instalados
apt-build world Recompila todo o sistema
apt-build remove programa Remove o programa
apt-build clean-build Remove pacotes compilados
apt-build clean-sources Remove os códigos fonte baixados.
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
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!
Meus 3 dias testando KDE 4.2.2
by Felipe 'chronos' Prenholato on 23:41, under Gentoo, KDE, Linux, Planet GentooBR, Reviews
Para adiantar minhas opnições, eu digo que realmente gostei muito do que fizeram, mas os bugs encontrados não o tornam um desktop apto para uso diário, embora bonito. Vamos as minhas opniões ponto principais!
Ponto a ponto posso dizer que o modo como é organizado os plasmoids e os temas usados estão ficando cada vez melhor. A integração com GTK continua a mesma do KDE 3.5.10 que uso. Os novos plasmoids precisam, na sua maioria, de um trabalho melhor, pois plasmoids que me deixariam ter RSS no desktop de uma maneira bonita (o que me é muito útil) não funcionam, o monitor de sistema não perde aos feios monitores do superkaramba e ainda continuamos a ter plugins inúteis como o olho que segue o mouse.
(continue reading…)
Matando sessões de outros usuários em servidores *nix, mas só como root.
by Felipe 'chronos' Prenholato on 01:42, under Linux
Bem, certo dia da minha vida, tive que kickar um sysadmin do servidor dele, onde eu
estava instalando um portal pq ele realmente estava me atrapalhando, ficava reiniciando postgresql toda hora, o servidor também … enfim, ridículo
.
Me bateu uma luz (por causa do mesmo sysadmin) hoje e fiz uma coisa legal, segue
abaixo um script para kickar todos os usuários que não seja o que vc passar ou
kickar o que vc passar, pegando principalmente por IP/Maquina deles.
Naturalmente você só poderá rodar o script como root, mas acredite, não é difícil conseguir.
A maioria dos servidores acaba dando uma permissão com sudo a algum arquivo usando vim, tipo, sudo vim /etc/apache/vhosts/seuvhost.conf, dentro do vim, execute :!su - e você terá um shell como root.
(continue reading…)
pingping – Verificando conexão com servidores.
by Felipe 'chronos' Prenholato on 12:28, under Dicas, Linux, Planet GentooBR, Servidores
Ai em baixo meu script pingping. Ele vai alertar os emails quando algum servidor parar. Leia ele
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #!/bin/sh # This script send ICMP requests for each server on SERVIDORES list and sends # emails for emails in LISTA_EMAILS list why one of servers doesn't reply # You only receive alerts if in last time that script request server we have a success reply # or if we not tested server yet. # # Author: Felipe Rafael Prenholato - chronos@gentoobr.org # IRC: nick chronos at irc.freenode.net # Date: 21 de Junho de 2006. # # This script is under GPLv2. Read it at http://www.gnu.org/licenses/gpl-2.0.txt. # Any changes please send me a mail :). # # IP or name of servers to test SERVIDORES="elise prime odissey" # emailo to send alerts LISTA_EMAILS="chronos@gentoobr.org philipe_rp@yahoo.com.br" # date format to send in email data=$(date +"%T de %d/%m/%Y") # this function sends ping ping_server() { local pingreturn local serversts local TMPFILE local server server=$1 TMPFILE="/tmp/ping_$server.tmp" # Debug #echo "Server: $server" #echo "Temp file: $TMPFILE" # ping and get return ping -c3 $server &>/dev/null; pingreturn=$?; # 0 means ok if [ "$pingreturn" == "0" ] then echo "1" > $TMPFILE fi # 1 means problems if [ "$pingreturn" == "1" ] then if ! [ -e $TMPFILE ] then echo "1" > $TMPFILE fi serversts=$(cat $TMPFILE) # send mail if have problems if [ "$serversts" == "1" ] then echo "0" > $TMPFILE msg="Servidor $server fora do ar em $data. Contatar responsavéis." ass="Servidor $server fora do ar." LC_ALL="en_US.ISO-8859-1" echo "$msg" | mail -s "$ass" $LISTA_EMAILS fi fi } # roda ping_server para cada servidor. for e in $(echo $SERVIDORES); do ping_server $e; done |
Ele precisa ser instalado em um servidor que possa pingar os demais e enviar emails. Versões antigas do postfix não vão funcionar, tem q suportar a opção -a no comando mail, seu uso é:
./scriptColoque ele para rodar no cron e fique numa boa


