terça-feira, janeiro 15, 2008

Novo Blog

Terminei hoje meu novo blog: www.igorsobreira.com, portanto não vou mais atualizar esse aqui.

O novo feed é esse aqui. E o feed somente da categoria python (ainda não tem nada :P). Aguardo a visita de vocês....

quinta-feira, dezembro 20, 2007

Tela preta na inicialização do Ubuntu Gutsy

Quando instalei meu Ubuntu Gutsy ele tava com um bug meio chato, quando inicializava não aparecia a famosa logo do com a barrinha carregando, mas ficava tela preta por bastante tempo, até aparecer a tela de login. Então eu simplesmente apertava ALT + F1, e ali em modo texto ele inicializava mais rápido.

Mas um dia desses decidi procurar resolver isso, e é realmente bem simples (na verdade o primeiro resultado no google :-) ). Primeiro é preciso editar o arquivo usplash.conf:

sudo gedit /etc/usplash.conf

que provavelmente deve estar assim

# Usplash configuration file
xres=1280
yres=1024

e no meu caso, com tela de 15'4'', eu atualizei pra isso

# Usplash configuration file
xres=1280
yres=800

depois basta atualizar o tema, que é o simbolo do Ubuntu e a barrinha carregando

sudo update-usplash-theme usplash-theme-ubuntu

e pronto!

quarta-feira, dezembro 12, 2007

Renomear arquivos

Surgiu a pouco a necessidade de renomear todas imagens de uma pasta, so adicionar um termo no início do nome. E nada como um script em Python pra facilitar sua vida:

import os

for nome in os.listdir('.'):
novo_nome = 'MEET_' + nome
os.rename(nome, novo_nome)
print 'OK'

quarta-feira, dezembro 05, 2007

Configurando o Gedit

Gosto de usar o Gedit pra programar, inicialmente ele parece ser bem simples, mas pode-se adicionar alguns plugins, basta ir em Edit -> Preferences -> Plugins e escolher. Também tem um pacote no apt-get, o gedit-plugins, que trás alguns adicionais, como auto-completa de chaves, parêntesis, aspas, etc, comentário de um bloco de comandos. Mas aqui tem vários outros bem interessantes, principalmente pra quem programa em Python.

Um bem legal é o Python Outline, que mostra todo o
outline do código no painel lateral. Outro interessante é o Better Python Console, que permite executar o código Python apertando f5, como no IDLE.

Quem é desenvolvedor web, vai gostar do Browser Preview. Tem o Word Completion, que permite auto-completa de palavras que já foram digitadas no documento. O ideal seria ele mostrar os métodos e atributos do objeto, mas esse ainda está na seção de "Requested Plugins", assim como um Debugger pra Python.

É bem fácil instalar novos plugins, normalmente é um arquivo .py e um .gedit-plugin, basta copiá-los para o diretório /usr/lib/gedit-2/plugins e reiniciar o Gedit. Pronto, é so escolher e usar.

UPDATE
Esse artigo tem umas dicas legais também

domingo, dezembro 02, 2007

Enviando e-mails com smtplib

O protocolo SMTP é utilizado para enviar e-emails. E Python possui um módulo embutido, o smtplib, que facilita o envio de e-mails utilizando esse protocolo, e é bem facil de usar:

>>> import smtplib
>>> server = smtplib.SMTP('gmail-smtp-in.l.google.com', 25)
>>> para = 'v2.igor@gmail.com'
>>> de = 'ninguem@nada.com'
>>> msg = '''
... From: ninguem@nada.com
... To: v2.igor@gmail.com
... Subject: Nao eh nada nao
... Aqui eh o corpo da mensagem
... '''
>>> server.sendmail(de, para, msg)
{}
>>> server.close()

A classe SMTP do módulo smtplib serve para se conectar com um servidor de e-mails, caso você tenha um servidor de email rodando localmente, basta usar "localhost". E 25 é a porta padrão do SMTP.

A mensagem de e-mail tem um formato padrão que está definido aqui. Mas os campos mais comuns são:

To: E-mail dos destinatários
Cc: E-mail das pessoas que devem receber uma cópia da menssagem
From: E-mail do criador da mensagem
Subject: Assunto da mensagem
Date: Data e hora em que a mensagem foi enviada

Como se pode perceber, o cabeçalho das mensagens fica no formato Chave: valor... O unico dado que não tem uma chave é o corpo da mensagem em si. A classe Message do módulo email ajuda a formatar essa mensagem:

>>> from email.Message import Message
>>> msg = Message()
>>> msg['Subject'] = 'Assunto do email'
>>> msg.set_payload('Aqui eh o corpo da mensagem')
>>> print msg
From nobody Sun Dec 2 16:29:56 2007
Subject: Assunto do email

Aqui eh o corpo da mensagem


Os valores do cabeçalho podem ser adicionados como na sintaxe de um dicionário do Python, e o método set_payload() serve para adicionar a mensagem.

Ah, e caso no exemplo acima o email não chegue na sua caixa de entrada do gmail, não se esqueça de verificar nos "Spams".

quarta-feira, novembro 28, 2007

Lendo e-mails do Gmail

Estava dando uma olhada no módulo smtplib do Python, então lembrei que li a um tempo atrás sobre um módulo pra ler emails do gmail, é a libgmail.

Tem outro módulo pra isso, é o gmail.py, mas quando eu fui testar recebi um erro de login :/ .

Outro detalhe é que eu baixei o libgmail pelo apt-get, e também tive problemas na hora do login, mas com a ultima versão pelo site do projeto deu certo.

É realmente bem simples de usar:

>>> import libgmail
>>> ac = libgmail.GmailAccount('v2.igor@gmail.com', 'senha')
>>> ac.login()
>>> inbox = ac.getMessagesByLabel('Inbox')
>>> len(inbox)
100
>>> for msg in inbox:
... print msg.subject
...
[ ... ]

Fica ai a dica.

sexta-feira, outubro 19, 2007

Esperando um pouco por uma função

Navegando randomicamente pela web, acabei esbarrando numa classe do módulo threading(pretendo fazer um post sobre Threads breve) que é bem legal. Passamos um tempo para que uma função(callable) seja chamada. Com um exemplo fica mais fácil:

>>> from threading import Timer
>>> def ola():
... print 'ola!'
...
>>> t = Timer(5, ola)
>>> t.start() #espera 5 segundos
>>> ola!

Depois de criado o objeto Timer(), chamamos seu método start() para começar a esperar. Caso precise parar no meio da espera, tem o método cancel(), além de vários outros....

>>> dir(t)
['_Thread__args', '_Thread__block', '_Thread__bootstrap', '_Thread__daemonic', '_Thread__delete', '_Thread__exc_info', '_Thread__initialized', '_Thread__kwargs', '_Thread__name', '_Thread__started', '_Thread__stderr', '_Thread__stop', '_Thread__stopped', '_Thread__target', '_Verbose__verbose', '__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', '_note', '_set_daemon', 'args', 'cancel', 'finished', 'function', 'getName', 'interval', 'isAlive', 'isDaemon', 'join', 'kwargs', 'run', 'setDaemon', 'setName', 'start']

Leia mais aqui