Monday, June 4, 2007

Minhas fotos no IV ESLAM

Foram divulgadas as primeiras fotos do IV ESLAM. Aproveitei para caçar as minhas fotos:

  1. Cantando o hino nacional ao lado do Oliva
  2. Júlio, Oliva e eu
  3. Um dos ganhadores de brinde :-P e eu
  4. Mini-curso de python :-D

Tuesday, May 29, 2007

IV ESLAM - Mini-curso de Python

Nesse ESLAM tive o prazer de ser convidado para ministrar o Mini-curso de python. Não tenho certeza se o mini-curso foi 100%, mas penso que deu para os participantes terem uma idéia de como o python funciona. Vou passar aqui a lista de sites recomendados que prometi.


  • Python Brasil
    • http://www.pythonbrasil.com.br/moin.cgi
  • Python Wiki
    • http://wiki.python.org/moin/
  • Documentação oficial
    • http://docs.python.org/
    • PEPs - Python Enhancement Proposals
      • Style Guide for Python Code - http://www.python.org/dev/peps/pep-0008/
  • Python side-bar
    • http://www.edgewall.org/python-sidebar/
  • Documentação extra-oficial
    • http://www.effbot.org/zone/index.htm
    • http://www.brpreiss.com/books/opus7/
    • Quick Reference
      • http://rgruet.free.fr/#QuickRef
    • Python na prática
      • http://www.async.com.br/projects/python/pnp/
  • Comunidade
    • http://planet.python.org/
    • http://www.pythonbrasil.com.br/planet/
  • Cookbook
    • http://www.java2s.com/Code/Python/CatalogPython.htm
    • http://www.activestate.com/ASPN/Python/Cookbook/
    • http://www.phys.uu.nl/~haque/computing/WPark_recipes_in_python.html
    • http://wiki.python.org/moin/NumericAndScientificRecipes
  • Repositório de aplicações e bibliotecas
    • http://cheeseshop.python.org/pypi
  • Posters
    • http://geekciphers.com/python-posters.html?gclid=CL3J3IrriooCFRTtPgodpV-BRA
  • Design Patters
    • http://www.suttoncourtenay.org.uk/duncan/accu/pythonpatterns.html
    • http://www.thinkware.se/cgi-bin/thinki.cgi/PythonPatterns

Monday, April 30, 2007

Que linguagem de programação eu sou?

Vendo os posts de várias pessoas, percebi que praticamente todos fizeram o quiz "Which Programming Lanuguage Are You?", resolvi fazer também e o resultado foi:



You are Python You are slower than others, but easier to understand. You are a minimalist, who doesn't like clutter.
Which Programming Language are You?



\o/

Friday, April 27, 2007

Mudando permissões de arquivos e diretórios

Alguns dias atrás tive que mudar as permissões de um diretório contendo muitos sub-diretórios e arquivos (com toda certeza eu não iria fazer isso na mão :-D), resolvi então escrever um pequeno script para fazer esse trabalho. Falta ainda colocar o módulo optparse ou semelhante pra trabalhar os dados recebidos como parâmetro da linha de comando.

#!/usr/bin/env python

"""
Change directory and file permission recursively.

"""


import os

def changepermission(directory, dirperm, fileperm):
"""
This function change dir and file permission recursively.
e.g.: changepermission(/home/user, 0775, 0664)
"""

abspath = os.path.abspath(directory)
for item in os.listdir(abspath):
if os.path.isfile(abspath + '/' + item):
os.chmod(os.path.join(abspath, item), fileperm)
     elif os.path.isdir(abspath + '/' + item):
os.chmod(os.path.join(abspath, item), fileperm)
         changepermission(abspath + '/' + item, dirperm, fileperm)


if __name__ == '__main__':

changepermission('/path/to/directory', '775', '664')

Problemas com dbus

Passei esses tempos tentando resolver um problema no pydistcc relacionado ao dbus. Procurei a lista do python-brasil, existe uma solução aparente em C, mas quero saber se existe como resolver isso usando somente python. Alguem sabe?


Friday, March 30, 2007

PyDistcc status

Aproveitando que estou por aqui ... :-)


Após o início do projeto, consegui evoluir um pouco mais o código. Ele já está anunciando o serviço na rede e o daemon cliente já consegue listar os servidores anunciados ;-) Estou atualmente trabalhando no código para gerar os dados de cpu load, cpu queue lenght, network load e outras. O próximo trabalho é terminar a interface cliente com o usuário e conectá-la ao daemon cliente via dbus.
Caso queria contribuir ou somente olhar, o projeto está hospedado no sourceforge no endereço http://sourceforge.net/projects/pydistcc/.

Resposta aos comentários de um post no BR-Linux

O artigo em questão é "O que dá pra comprar com o dinheiro do windows Vista".
Quero deixar bem claro que existem outros meios mais simples de configurar, vídeo, teclado[1][2], seja lá o que for. Os metódos apresentados neste blog, em geral, são a maneira mais difícil, pois gosto de entender como as coisas funcionam. Outra coisa... nem todo usuário avaçado é programador e nem todo programador é usuário avançado. :-P

Wednesday, March 7, 2007

xterm default config

Venho utilizando o gnome-terminal faz alguns anos. Sempre tive vontade de usar o xterm, mas nunca tive paciência de configurá-lo. Hoje, depois de alguns problemas com o gnome-terminal resolvi dar essa chance ao xterm.

Para configurar, edite o arquivo ~/.Xdefaults e deixe-o com o conteúdo semelhante ao abaixo.
XTerm*foreground: white
XTerm*background: black
XTerm*saveLines: 1500
XTerm*faceName: monospace
XTerm*faceSize: 12pt;
XTerm*boldFont: monospace

Pra finalizar rode o comando abaixo para carregar as configurações.
xrdb -nocpp -load .Xdefaults

Agora é só rodar o xterm ;-)

Caso queira deixá-lo como terminal padrão do sistema, rode o comando abaixo
sudo update-alternatives --config x-terminal-emulator

e selecione o xterm.

Tuesday, March 6, 2007

Resolvendo finalmente o problema do cedilha

Desde que reinstalei meu computador, não tenho usado o c cedilha. Toda a configuração feita anteriormente foi perdida e eu tambem não lembrava como era. Revoltado com a situação resolvi ir atrás da solução e registrar aqui para futuras consultas.

Primeiro é necessário configurar o /etc/X11/xorg.conf:

Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us"
Option "XkbVariant" "intl"
EndSection


O /etc/enviroment:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games"

#LANG="en_GB"
LC_CTYPE="pt_BR.UTF-8"
LANG="pt_BR.UTF-8"
LANGUAGE="en_GB:en"


Para mim isso foi o suficiente ;-)

Trocando o idioma padrão do Ubuntu Feisty ou Edgy

Após muito tempo gasto em busca de como trocar o idioma padrão do Ubuntu Feisty ou Edgy, pois o localeconf não funciona mais, encontrei um blog que realmente tem a solucão. Resume-se em:

  • instalar o idioma desejado, ex. aptitude install language-support-en
  • adicionar ao /etc/enviroment, caso não exista:
    • LANG="en_GB"
    • LANGUAGE="en_GB:en"
  • deletar o arquivo /etc/locale.gen
  • sudo dpkg-reconfigure locales
  • reiniciar o computador
  • digitar no terminal locale para verificar o novo idioma padrão

Friday, February 23, 2007

Ubuntu Feisty + beryl + ati x200

Há alguns meses atrás tentei instalar o compiz e o xgl no meu laptop. Tive muita dor de cabeça e perdi muito tempo, acabou que não funcionou. Hoje gastei quase toda manhã tentado configurar o beryl, o xgl e a minha placa de video, não consegui configurar novamente, mas descobri uma série de fatos:

  1. AIGLX não funciona com drivers proprietários da ati;
  2. Drivers proprietários da ati não suportam o modo composite;
  3. O beryl está com um bug que causa segfault, quando utilizado no ubuntu feisty, que roda xorg 7.1
  4. Os drivers novos da ati fazem a x200 funcionar melhor ;-)

Como ainda não tenho conhecimento suficiente em C para tentar corrigir o bug, vou só ficar monitorando.

Saturday, February 17, 2007

Pyret - Um caçador de regressões

Estes tempos venho trabalhando em um projeto chamado pyret. Por conta disto venho aprendendo muito e tenho ganhado fluência em python e em seus módulos. Hoje terminei a primeira modificação, na parte servidora da aplicação, e enviei para o autor. Espero que ele aceite e me dê acesso ao cvs ;-)

Friday, February 9, 2007

pysvn - subversion python binding

Depois de muito penar para conseguir fazer um checkout em um servidor subversion com autenticação usando pysvn, hoje finalmente consegui. É um bocado difícil de entender como funciona esse negócio, deveria ser um pouco mais intuitivo. Pra facilitar a vida de quem venha utilizar o pysvn e não queira perder muito tempo pra entender tudo, aqui vai um codigo que fiz. Melhorias são bem vindas.

import os
import sys
import pysvn


class DownloadSubversion(object):

def __init__(self, source, dest, username, password):
self.source = source
self.dest = dest
self.username = username
self.password = password

def callback_ssl_server_trust_prompt(self, trust_data):
'''
trust_data: essa e' uma variavel, um dicionario, passado pelo pysvn
contendo informacoes sobre o certificado ssl do servidor.
Por exemplo: data de expiracao do certificado, empresa
certificadora, nome do responsavel, fingerprint e etc.

'''


#for key,value in trust_data.items():
# print '%s: %s' % (key, value)
#print
answer = 't'
#while answer.lower() not in ['p','t','r']:
# sys.stdout.write( '(P)ermanent accept, (T)emporary accept or (R)eject: ' )
# answer = sys.stdin.readline().strip()
if answer.lower() == 'p':
return True, trust_data['failures'], True
if answer.lower() == 't':
return True, trust_data['failures'], False
return False, 0, False


def callback_getLogin(self, realm, username, password, may_save):
'''
realm: essa variavel eh utilizado pelo pysvn pra informar o endereco do
servidor e o nome do servico, deixe ela ai'. Por exemplo:
"Subversion Repository" at http://111.222.333.444

username: usuario do subversion

password: senha do subversion

may_save: salvar ou nao o usuario e senha

'''


if len(username) == 0:
return False, '', '', False

return True, username, password, may_save


def downloadRepos(self):

client = pysvn.Client()
client.exception_style = 1
client.set_default_username(self.username)
client.set_default_password(self.password)
client.callback_get_login = self.callback_getLogin
client.callback_ssl_server_trust_prompt = self.callback_ssl_server_trust_prompt

if os.access(self.dest + '/.svn', os.F_OK):
client.update(self.dest)
else:
client.checkout(self.source, self.dest)


if __name__ == '__main__':


subversion = DownloadSubversion('https://www.com.br/svnroot/', '.', 'usuario', 'senha')
subversion.downloadRepos()

Comentarios liberados

Hoje a tarde um amigo disse que tentou deixar um comentário no blog, não conseguiu porque era necessário um registro. Logo pensei: "Por isso ninguém nunca comentou nada! :-/"

Para facilitar a vida dos visitantes, deixei os comentários liberados.


Valeu Henry!

Friday, February 2, 2007

Provas na faculdade

Não farei novas postagens até que as coisas estejam mais tranquilas pela faculdade.

Saturday, January 20, 2007

Python Distcc

Ontem a noite terminei de escrever a primeira parte do python-distcc, uma alternativa ao dmucs. Coincidentemente, hoje a tarde encontrei um velho amigo, Leonardo Marques, no gtalk e descobri que ele estava trabalhando em um projeto semelhante, o axdistcc, batemos um papo e decidimos unir as forças. Mais informações podem ser encontradas no wiki[2].

Wednesday, January 10, 2007

Python ConfigObj

Recentemente me daparei com o problema de reescrever o parser de arquivos de configuração de um software. Procurando na internet por um módulo que fizesse esse trabalho me deparei com o ConfigObj, que é perfeito para esta tarefa. Com apenas poucas linhas de código consegui lêr e verificar cada detalhe do arquivo de configuração. Das várias vantagens do ConfigObj, três são as mais marcantes:
  1. ótima documentação;
  2. poucas linhas de código fazem tudo;
  3. e flexibilidade de criar novas verificações.

Monday, January 8, 2007

Ubuntu from scratch - instalando ubuntu com o cd danificado

Depois de enfrentar várias vezes problemas na instalação do ubuntu, por conta de erros no cd, resolvi buscar por uma maneira de instalar utilizando o cd danificado.
Utilizando o cd do ubuntu edgy, por exemplo, siga os passos que descrevo nesta postagem:


  1. Dê boot pelo cd e avance até chegar no particionamento hd(não entre no particionador);
  2. aperte alt+F2;
  3. particione o disco com o fdisk ou cfdisk
  4. reinicie o computardor
  5. execute os passos 1 e 2
  6. mkdir /target
  7. debootstrap edgy /target file:/cdrom/ubuntu/
  8. mount -o bind -t proc /proc /target/proc
  9. chroot /target /bin/bash
  10. apt-get update
  11. aptitude install grub
  12. aptitude install linux-generic ou linux-image-generic
  13. aptitude install ubuntu-standard
  14. cp /proc/mounts /etc/mtab
  15. mkdir /boot/grub
  16. update-grub
  17. grub-install --no-floppy /dev/hda
  18. edite seu /etc/fstab
  19. reinicie seu computador
  20. logue como root sem senha
  21. passwd root
  22. vol_id -u /dev/hda1
  23. troque as entradas do /dev/hdaX pelo UUID obtido pelo comando acima
  24. edite o /etc/network/interfaces e adicione
    1. auto lo
    2. iface lo inet loopback
  25. aptitude install ubuntu-desktop

Pronto! Está instalado o ubuntu. Pode ser utilizado um livecd também, tento somente que ter uma conexão com a internet, um apt-cacher local ou os arquivos .deb necessários e fazendo pequenas alterações nos passos acima.

* Esta postagem ainda está em edição. Espero comentários para melhorá-la.

Meu hackergotchi

Durante muito tempo deixei o espaço dedicado ao hackergotchi ou avatar vago, talvez pela falta de uma foto diferente ou preguiça mesmo. Finalmente ontem, 07/01/07, tirei uma foto e percebi que ela tinha o potencial pra se tornar meu hackergotchi. Busquei por boas documentações, abri a foto no gimp e segui os howtos. Um pequeno descuido acabou gerando a idéia dos efeitos que mais gostei. O resultado está na minha página do launchpad.

Python sidebar, documentação a um clique.

Quando se está programando, geralmente é necessário procurar por informações sobre módulos ou uso da linguagem. Pensando neste problema a edgewall, mesma desenvolvedora do gerenciador de projetos trac, criou o python sidebar. O intuito é de agilizar o acesso às informações e de maneira mais conveniente, podendo ainda realizar buscas nas documentações e listas de discussão.

Para instalar, use o site oficial.

Sunday, January 7, 2007

Python smaps e gtop

Como alternativa de acesso direto aos arquivos do smaps(/proc/\/smaps), existe um módulo que acompanha o python-gobject, chamado de gtop, cuja função é oferecer ferramentas para manipulação de dados do proc.

Segue abaixo um código feito por Ian Lawrence:


import os
import gtop

def print_maps(v, c, d, name):
if c + d > 0:
print "%d\t%d\t%d\t%s" % (v / 1024, c / 1024, d / 1024, name)

for pid in gtop.proclist(gtop.PROCLIST_KERN_PROC_UID, os.getuid()):
l=gtop.proc_map(pid)

print "SHARED"
print "vmsize\tclean\tdirty\tname"

for x in sorted(l, key=lambda x: x.shared_clean + x.shared_dirty, reverse=True):
print_maps (x.size, x.shared_clean, x.shared_dirty, x.filename)

print ""
print ""

print "PRIVATE"
print "vmsize\tclean\tdirty\tname"

for x in sorted(l, key=lambda x: x.private_clean + x.private_dirty, reverse=True):
print_maps (x.size, x.private_clean, x.private_dirty, x.filename)


O próximo passo é mudar a maneira como atualmente smaps-plotter trata o /proc//smaps para o método utilizando o gtop.
 

Rodrigo Belem's journal. Powered By Blogger © 2009 Bombeli | Theme Design: ooruc