/lerrua

Coding

Redimensionando imagens com Python

Nós programadores perdemos um tempo tentando mexer em programas de edição de imagem como Photoshop e Gimp para quebrar algum galho, tarefas bobas como redimensionar uma imagem para um determinado tamanho sem perder a qualidade por exemplo.

Perda de tempo maior ainda seria se fossem 20 ou 30 imagens, imaginem? Pois é.

Sorte que com python podemos automatizar esse trabalho com apenas algumas linhas de código.

1
pip install Pillow 

Pillow é um fork mantido pela comunidade da PIL (Python Image Library), é com ela que vamos fazer essa brincadeira.

1
2
3
4
5
6
7
8
9
10
11
import PIL

# Queremos gerar uma imagem com tamanho 300x200
wsize = 300
hsize = 200

img = PIL.Image.open('/path/to/original_picture.png')

# redimensionamos sem perder a qualidade
img = img.resize((wsize, hsize), PIL.Image.ANTIALIAS)
img.save('/path/to/new_img.png')

Pronto! Sua new_img.png foi gerada na pasta que apontou acima.

Quanto ao problema que citei no começo desse post, é uma solução bastante simples. Vamos apenas iterar esse código acima, mais ou menos assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Vamos supor que esses são os nomes das imagens
IMGS = [
    'original_img_1',
    'original_img_2',
    'original_img_3',
    'original_img_4',
]

for i in IMGS:
    wsize = 300
    hsize = 200
    img = PIL.Image.open('/path/to/{}.png'.format(i))
    img = img.resize((wsize, hsize), PIL.Image.ANTIALIAS)
    # na pasta /thumbs será gerada a imagem com mesmo 
    # nome que a imagem original.
    img.save('/path/to/thumbs/{}.png'.format(i))

E é isso, se pensarmos em número de 20 imagens então acabamos de economizar um precioso tempo que seria gasto com um trabalho bem chato e repetitivo.

[slides] Introdução a testes com Django

Algumas empresas tem a cultura de ministrar workshops entre seus funcionários e com o objetivo maior de compartilhar conhecimento, nivelamento de equipes e entre outros motivos. Por uma grata sorte minha atual e última empresa tinham essa cultura.

Esses workshops podem ser pequenos cursos, longos ou mesmo palestras, geralmente onde a empresa toda participa.

Mas bem, dessa vez falei um pouco sobre testes com Django, como vim do Ruby on Rails tentei um pouco comparar libs dos dois frameworks, mostrando onde isso funciona no mundo Ruby e qual ferramenta semelhante existe para o mundo Python.

Migrando sua app Django da 1.4 para 1.5

Buenas! Recentemente atualizei uma aplicação “gorda” para a versão 1.5.5 do Django e resolvi compartilhar essa experiência. Foi um pouco demorado, mas nada realmente que dure mais de um dia de trabalho. Primeiramente leia a release notes, não precisei ler nenhum outro artigo além desse para migrar minha aplicação.

Third apps

Módulos como o simplejson e localflavor foram removidos do Django e se tornaram apps independentes. A simplejson pode ser facilmente substituída pelo módulo json nativo da linguagem.

Outros módulos também serão deprecados nas próximas releases, então para não ter tanto trabalho futuro sugiro dar uma lida na deprecation timeline e já se preparar para eventuais mudanças.

New-style url

O padrão de urls nas templates mudou, use:

1
{% url "app:my_view" param1 %}

ao invés de: {% url app:my_view param1 %}.

Esse “novo” padrão é válido desde a 1.3, desde que esteja usando a load url from future em seu template.

Deprecate warnings

É normal a primeiro momento rodar um runserver e se deparar com vários warnings no terminal, alguns warnings de deprecations que você solucionou os mantenedores de suas libs terceiras também terão de solucionar. Recomendo fortemente visitar as docs de suas principais dependências e verificar o changelog, provavelmente algum homem de bem criou uma versão especifica compatível com a versão de Django que você usa.

Tendo esse cuidado acredito que esses warnings sumirão e você terá menos trabalho para um futuro upgrade em sua aplicação.

Django 1.6

Nesse fim de ano saiu a primeira release estável da 1.6, talvez vocês se perguntem porquê eu não fiz o upgrade da 1.4.x diretamente para 1.6.0 e as respostas são simples.

Baby-steps, seria traumático demais fazer essa atualização sem resolver as coisas novas da 1.5 primeiro e um outro motivo, dependências. Muitas libs ainda estão fazendo esse trabalho de upgrade, onde grande parte ainda tem o Django 1.5 como base de sua release estável. Mas nada problemático, logo logo também farei esse trabalho e posto aqui novamente. ;)

Meu ambiente de trabalho em 7 itens

Hello world! Após anos sem escrever nada resolvi tomar vergonha na cara e colocar em prática a idéia de escrever um blog pessoal. Pra seguir a modinha e dar um chute inicial nesse blog vou listar os 7 itens mais importantes do meu ambiente de trabalho.

1 – Unix

Na maior parte do tempo fico no OSX, o fato curioso é que utilizo Linux no computador do escritório e por incrível que pareça não me incomodo tanto entre variar entre os dois OS. Uma dica para quem quer usar alguma distro linux leve e que não fuja tanto do visual do OSX são as distros PearOS e o Elementary.

2 – Bash

Apesar de utilizar o ZSH no escritório considero bash ainda o meu default, me sinto mais confortável com ele.

3 – Vim

O meu fiel companheiro desde 2010, já tentei todos os editores e IDEs que imaginar mas Vim é algo único. Atualmente meu vimfiles é focado para devs Python, mas atende também quem codifica em outras linguagens.

4 – Git

SVN e Windows stuffs, coisas que não uso há um bom tempo…

5 – Python

Pra quem me conhece sabe que Ruby foi a base da minha criação como programador, mas nos últimos dois anos Python vem fazendo fortemente parte da minha vida.

6 – Chrome

Inspect > Firebug, simples assim.

7 – IRC, skype

Skype ainda é uma das poucas coisas que deixo 24hs conectado principalmente por conta de algumas reuniões, enquanto IRC é um hábito que ainda tento retomar.