Recentemente, eu estava procurando formas de criar uma aplicação para enviar e-mails que fossem reconhecidos pelo Google Now. Descobri que é possível, o google possui um sistema de markup que faz com que as aplicações processem os e-mails e mostrem informações que são enviadas nessas tags.  Se você tem interesse nisso, eu recomendaria ler a página de overview do Google Markup.

Mas não parei por aí. Procurei uma forma de fazer um aplicação para testar o envio dessas mensagens com as informações de markup.
Segui o exemplo da página Apps Scripts e enviei vários e-mails de notificações de evento para mim – dessa forma só torna-se possível enviar e-mail para o próprio usuário. Se você quiser enviar para outras pessoas será necessário se registrar no Google.

Então vou citar os passos que fiz  (os mesmos do tutorial):


1. Primeiramente inciei um projeto no script.google.com.

2. É necessário criar 2 arquivos. O HTML que irá conter o template do e-mail enviado, e o Javascript (GoogleScript).  Os nomes são: Code.gs e mail_template.html.

O conteúdo do Code.gs foi o seguinte:

function testSchemas() {
  var htmlBody = HtmlService.createHtmlOutputFromFile('mail_template').getContent();

  MailApp.sendEmail({
    to: Session.getActiveUser().getEmail(),
    subject: 'Testing E-mail Markup - ' + new Date(),
    htmlBody: htmlBody,
  });
}

e o conteúdo do mail_template.html foi:
http://pastebin.com/tvZyf727

mailTemplate

A mágica está no json embeded no e-mail.

3. É necessário salvar os arquivos – o ponto vermelho nos nomes dos arquivos mostra que eles não foram salvos.

4. Executar a função. Na aba superior “Executar-> testSchemas

No email que chegou na minha conta aparece a seguinte informação.

Essa é a visualização via aplicativo Imbox do Google.

markup

 

Contudo, no Gmail só apareceu a informação textual:

markup2

E nada no Google Now.

Tenho várias versões de Python instalado aqui no meu sistema, e antes de ter instalado a mais nova versão, o Python 2.7, o meu Ubuntu tinha como versão default o Python 2.6. Após a instalação dessa nova versão notei que no terminal ao ser digitado apenas python, sem  especificar a versão do interpretador, ele iniciava o 2.7.  Corrigir esse problema para alguns poderia ser apenas comodismo, mas, em um sistema como o Linux, que possui vários scripts rodando em Python, a simples alteração do interpretador default poderia causar um problema bem maior.

Pesquisei um pouco na internet, e encontrei a solução, mas, para minha surpresa o problema persistiu. O detalhe que estava faltando só encontrei numa lista de discurssão, vou explicar o que se deve fazer. Não tenho certeza mas creio que essa dica funcione em qualquer distro que seja baseada no Debian.

1 – Edite o arquivo /usr/share/python/debian_defaults

$ sudo gedit /usr/share/python/debian_defaults

2 – Coloque na linha default-version a versão desejado do Python

default-version = python2.6

3 – Ainda no arquivo, adicione na linha supported-versions as versões instaladas.

supported-versions = python2.6, python3.0, python2.7

Feche o arquivo, e vamos para a etapa final.

4 – Com o comando which descubra qual link o shell está acessando o interpretador.

$ which python # informa o path

/usr/bin/python

Um breve comentário deve ser feito aqui, quando instalei o Python 2.7 o shell estava acessando python por um link /usr/local/bin/python devido a isso sempre que fazia a etapa 5, nada era modificado. Quando vi pelo comando which que ele estava acessando outro link, apenas o exclui e ele voltou a acessar o do /usr/bin/python.

5 – Remova o link simbólico informado na  etapa 4 ( /usr/bin/python ) e crie um novo link para a versão que deseja ter como default.

sudo rm /usr/bin/python

ln -s /usr/bin/python2.6 /usr/bin/python # cria um link simbólico

Com essas alterações, tudo voltou ao normal. Talvez seja necessário abrir novamente o shell.

Rodrigo Lira

Python Image Library (PIL) é uma biblioteca que permite criar, modificar e converter arquivos de imagens numa gama de formatos usando Python. No site é possível baixar a biblioteca para as principais plataformas e versões de Python – ainda não está disponível para o 3.x da linguagem. Quem utiliza o Linux pode baixar através do Synaptic com o seguinte comando

#apt-get install python-imaging

Manusear imagens com módulo Image da biblioteca PIL é bem simples

>>> from PIL import Image
>>> imagem = Image.open("linux-potato.jpg")
>>> imagem.size,imagem.mode,imagem.format
((320, 272), 'RGB', 'JPEG')

Abrimos uma imagem e através dos atributos size, mode, format descobrimos algumas informações sobre ela.

>>> from PIL import Image
>>> imagem = Image.open("linux-potato.jpg")
>>> imagem.save("potato.bmp")

Esse trecho de código salva a imagem no formato Bitmap. Além do formato Bitmap a PIL oferece uma série de formatos que podem ser utilizados com o método save, faça o seguinte para ver os formatos

>>> from PIL import Image
>>> Image.init()
>>> Image.SAVE.keys()
['PCX', 'HDF5', 'TIFF', 'BUFR', 'IM', 'GRIB', 'PPM', 'SPIDER', 'XBM', 'GIF','BMP', 'PALM', 'JPEG', 'FITS', 'PDF', 'MSP', 'EPS', 'WMF', 'PNG']
>>> from PIL import Image
>>> imagem = Image.open("linux-potato.jpg")
>>> imagem.thumbnail((128,128))  # Tamanho 128x128
>>> imagem=imagem.rotate(180)
>>> image.save("potato-thumbnail.jpg")

Com o método thumbnail é possível criar miniaturas, e o rotate , rotacionar imagens. Com isso acabo, minha breve explicação sobre o módulo Image da biblioteca PIL, mas deixo dois links interessantes , o Brincando com Python + PIL e  o link para secção de imagens do cookbook da Python Brasil, onde pode ser encontrado alguns scripts interessantes que utilizam PIL.

| http://nadiana.com/pil-tutorial-basic-advanced-drawing

Rodrigo Lira

“Um sistema de controle de versão é um software que tem finalidade gerenciar diferentes tipos de versões no desenvolvimento de um documento qualquer. Esses sistemas são comumente utilizados no desenvolvimento de software para controlar as diferentes versões – histórico e desenvolvimento – dos códigos-fontes e também da documentação. Este tipo de sistema é muito presente em empresas e instituições de tecnologia e desenvolvimento de software. É também muito comum no desenvolvimento de software livre. É útil, em diversos aspectos, tanto para projetos pessoais pequenos e simples como também para grandes projetos comerciais.”

Texto retirado do Wikipedia

Recentemente foi necessário instalar e configurar um servidor svn na empresa que estagio. Devido a grande quantidade de informação inútil absorvida na internet e minha total inexperiência no assunto, a instalação demorou mais do que o necessário porém o procedimento é bem simples. A instalação foi feita numa máquina virtualizada através do VMware com o Debian Lenny.

Vamos lá !

Para o funcionamento do Servidor SVN é necessário a instalação de três pacotes, o subversion, apache2 e a libapache2-svn. Para instalar os pacotes, como root, digite no terminal

#apt-get install subversion

#apt-get install apache2

#apt-get install libapache2-svn

Bem agora é necessário adicionar duas linhas no arquivo de configuração do apache, “httpd.conf” e caso você esteja usando Debian é necessário fazer o mesmo para o “apache2.conf”. Ambos são encontrados em /etc/apache2/

Adicione o seguinte

LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so

LoadModule dav_svn_module /usr/lib/apache2/modules/mod_dav_svn.so

Depois é necessário reiniciar o servidor apache

rodrigoclira:/etc/apache2/# /etc/init.d/apache2 restart

Será impresso algo parecido com isso na tela

Forcing reload of web server: Apache2[Sun Apr 03 22:16:45 2010] [warn] module dav_module is already loaded,skipping

[Sun Apr 03 22:16:45 2010] module dav_svn_module is already loaded,skipping

[Sun Apr 03 22:16:48 2010] module dav_module is already loaded, skipping.

[Sun Apr 03 22:16:48 2010] module dav_svn_module is already loaded,skipping

Bem, está quase tudo pronto, agora é necessário rodar o comando svnserve que permite acessar aos repositórios usando o svn network protocol.

#svnserve -d

DICA Adicione esse comando no script de inicialização da máquina, veja como no artigo do vivaolinux

Acabada as configurações, vamos criar um repositório SVN

rodrigoclira@desktop:/home/rodrigoclira# svnadmin create projeto

Onde “projeto” é o nome do repositório a ser criado. Para acessar externamento ao repositório por um cliente SVN, como o TortoiseSVN , RapidSVN ou o svn, dê um checkout informando na url o seguinte

svn://IPdaMAQUINA/CAMINHOdoREPOSITORIO

 

Se tudo foi feito corretamente aparecerá a confirmação do checkout, informando que não há alterações no repositório.

Esse tutorial é baseado no Playing with SVN do Debian Administrator

Próximo post eu escreverei algumas dicas e explicarei como colocar autenticação no repositório SVN.

| Autenticação no repositório svn

| Controle de Versão com Subversion

| HP12C on line

Rodrigo Lira