Resultado inicial do estudo do Flask Framework

Cansado de fazer as coisas só com Django resolvi implementar algo usando algum outro framework Python. Como não curto estudar só a teoria e não implementar nada, resolvi fazer um microprojeto.

Como estava sem criatividade, lembrei de script que o Rudy Matela tinha feito para gerar um pdf com os textos dos postits do sprint. E resolvi fazer um clone da versão web usando Flask e Google App Engine(GAE).

O Flask é microframework feito em Python que usa o Jinja2Werkzeug, ele não é um framework full stack, ele vem só com o básico para você desenvolver sua aplicação Web, isso é vantagem no caso do uso com o GAE, pois como ele não tem um ORM própria, você pode usar SQLAlchemy, SQLObject ou mesmo a API de armazenamento de dados do GAE. O Flask possui extensões que ajudam no desenvolvimento para várias funcionalidade.

O resultado do estudo e implementação você pode ver no ScrumReal

O código você pode baixar através do github http://github.com/fabiocerqueira/scrumreal

Quem tiver sugestões sobre o que pode melhorar no código, agradeço! 😀

PyLestras do PugCE – REST com Python

Hoje na Fa7 o PugCE realizou o evento PyLestras, tivemos 3 palestras e a resolução de problema em um pequeno Dojo.

As palestras foram:

  • 09:00-09:20 – Conhecendo o PugCe (Italo Maia)
  • 09:30-10:20 – AppEngine (Filipe Fernandes)
  • 10:30-11:20 – Rest com Python (Eu \o)
  • 11:30-12:00 – DOJO

O problema proposto para Dojo foi implementar a sequência de Conway da seguinte forma:

# -*- coding: utf-8 -*-
import doctest

def next(prev):
    """
    >>> next(1)
    '11'
    >>> next(2)
    '12'
    >>> next(312311)
    '1311121321'
    >>> next(22)
    '22'
    """
    prev = str(prev)
    res = ''
    pa = prev[0]
    acc = 0
    for a in prev:
        if a == pa:
            acc += 1
        else:
            res += "%d%s" % (acc, pa)
            acc = 1
        pa = a
    res += '%d%s' % (acc, pa)
    return res

def conway(ini, lim):
    """
    >>> conway(1, 1)
    '1'
    >>> conway(1, 6)
    '1 11 21 1211 111221 312211'
    >>> conway(3, 4)
    '3 13 1113 3113'
    >>> conway(22, 5)
    '22 22 22 22 22'
    """
    res = str(ini)
    for i in range(lim - 1):
        prev = res.split()[-1]
        res += " %s" % next(prev)
    return res

if __name__ == "__main__":
    doctest.testmod(verbose=True)

Um segunda versão usando o módulo itertools do Python e geradores, mostra também como representar exceptions no doctest:

# -*- coding: utf-8 -*-
import doctest
from itertools import groupby

def conway_generator(ini, lim):
    """
    >>> a = conway_generator(1, 1)
    >>> a.next()
    '1'
    >>> a = conway_generator(2, 3)
    >>> a.next()
    '2'
    >>> a.next()
    '12'
    >>> a.next()
    '1112'
    >>> a.next()
    Traceback (most recent call last):
        ...
    StopIteration
    """
    res = str(ini)
    yield res
    for i in range(1, lim):
        res = ''.join(["%d%s" % (len(list(g)), k) for k, g in groupby(res)])
        yield res

def conway(ini, lim):
    """
    >>> conway(1, 1)
    '1'
    >>> conway(1, 6)
    '1 11 21 1211 111221 312211'
    >>> conway(3, 4)
    '3 13 1113 3113'
    >>> conway(22, 5)
    '22 22 22 22 22'
    """
    return ' '.join(conway_generator(ini,lim))

if __name__ == "__main__":
    doctest.testmod(verbose=True)

O problema não foi resolvido na hora do Dojo, mas serviu para mostrar algumas coisas interessante do Python 😀

Os slides da minha palestra seguem abaixo assim como o link para o código usado de exemplo:

source: github.com/fabiocerqueira/murl

livro citado em inglês e português

A história do Python

Na lista da Python Brasil divulgaram um blog com a história do Python. É uma leitura interessante e estou repassando aqui para outros também conhecerem melhor essa linguagem incrível.

Tem o blog oficial[1] mantido pelo Guido van Rossum e Greg Stein e também a traduação para pt-br[2] mantida pelo Douglas Drumond e Victor Matheus.

A versão em português não foi completamente traduzida.

[1] – http://python-history.blogspot.com/

[2] – http://python-history-pt-br.blogspot.com/

PythOnCeará – Primeiro evento do PugCE

No próximo sábado dia 14/11 será realizado na FA7(Faculdade 7 de Setembro) o primeiro evento dos programadores Python no Ceará. O evento será promovido pelo PugCE e contará com quatro palestras de diversos temas envolvendo Python, desde mercado, web, desktop e mobile.

Mais informações sobre o encontro:
local: FA7, em frente a Unifor, sala 35 – mapa
horário: das 13:00 às 17:30
dia: 14/11/09
Programação:
Quatro palestras de 50 minutos, com pausa para coffee break
Palestras:

  • “Por que python?!” – Nicholas Amorim
  • “Python para Web e Desktop” – Alec Nascimento
  • “Django tem ritmo!” – Italo Maia
  • “Sokoban com PyS60” – Fábio Cerqueira

Eu serei um dos palestrantes como vocês viram na grade acima e falarei de como foi o desenvolvimento do Sokoban para celular. Espero a presença de quem ler isso aqui \o/

Faça sua inscrição no evento aqui.

Sokoban – Jogo python para plataforma s60

Comprei faz uma semana um celular Nokia N78, um dos motivos da compra foi que poderia ter Python instalado nele e também pelo wifi hehe. Para testar o python resolvi pegar o meu remake do BoxWorld que tenho em Python e refazê-lo usando a API do PyS60. O Resultado ficou divertido e serve para quem nunca desenvolveu nada para celular ter noção de como começar.

Onde encontrei material?

No Fórum da Nokia tem muita informação sobre como desenvolver para celulares da plataforma deles. Um bom link: http://wiki.forum.nokia.com/index.php/Introduction_to_PyS60

Onde testei?

Como eu tenho o celular ficou tranquilo fazer os testes, mas existe um simulador que roda no windows. Como eu uso linux testava diretamente no celular, mas instalei aqui o simulador para fazer um vídeo do jogo.

Um boa referência também para início você ver no blog do Igor do Santos:

http://stoa.usp.br/igordsm/weblog/40092.html

http://stoa.usp.br/igordsm/weblog/41001.html

Vídeo do jogo:

Usei o xVidCap para capturar o vídeo do emulador rodando o Windows no VBox.

Comandos para jogar:

O jogo é simples:

  • usei os números para controlar: 2 – cima, 8 – baixo, 4 – esquerda, 6 – direita(muda quando vira para paisagem)
  • setas para movimentar o mapa caso ele seja maior que a tela.
  • c – para desfazer

Tem um menu com opções para reiniciar, ir para(mudar de mapa) e mudar o modo de visualização do jogo(Retrato e Paisagem).

Código Fonte:

Vamos ao que interessa. 🙂 Source do Sokoban:

No DropBox:  download.

E no github: http://github.com/fabiocerqueira/BoxWorld-for-PyS60

Script de dicionário Inglês para Português em Python

Olhando o meu histórico de comandos aqui no terminal vi que  um dos comandos que uso mais é o dic, mas este comando é um script que fiz em python que traduz  do inglês para português usando a base de dados do Babylon. Como meu inglês não é essas coisas todas, eu preciso por várias vezes no meu dia saber o significado de algumas palavras, então resolvi criar  este script para evitar ter que ir no site toda vez. Como eu sei que pode ser dificuldade de outras pessoas resolvi postar aqui no blog para ajudar:

#!/usr/bin/python
#-*- coding: utf-8 -*-
#------------------------------------------------------------------------+
#   Dicionário Inglês/Português Babylon                                             
#   por Fábio Cerqueira                                                  
#   Versão 0.1b para uso pessoal
#                                                                        
# Licença								                                 
#    Copyright (C) 2009  Fábio Cerqueira                                 
#       							                                	 
#    Este programa é software livre; você pode redistribuí-lo e/ou       
#    modificá-lo sob os termos da Licença Pública Geral GNU, conforme    
#    publicada pela Free Software Foundation; tanto a versão 2 da        
#    Licença como (a seu critério) qualquer versão mais nova.            
#    Este programa é distribuído na expectativa de ser útil, mas SEM     
#    QUALQUER GARANTIA; sem mesmo a garantia implícita de		         
#    COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM             
#    PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais   
#    detalhes.                   					                     
#    Para consultar texto em inglês visite:				                 
#	http://www.gnu.org/licenses/gpl.txt                                  
#									                                     
#------------------------------------------------------------------------+

import urllib2
import sys
import re

if len(sys.argv) < 2:
    print "Erro! Use:\n  %s palavra" % __file__
    sys.exit()
else:
    word = sys.argv&#91;1&#93;
    
try:
    down = urllib2.urlopen('http://online.babylon.com/cgi-bin/trans.cgi?layout=uol.txt&lang=ptg&word=%s' % word)
except:
    print 'Erro! Não foi possível conectar.'
    sys.exit(1)

texto = down.readlines()

ini = '<div style="margin: 5px;">\n'
fim = '</div>\n'

try:
    p = re.compile('(<&#91;^<>]+>)')
    for l in texto[texto.index(ini)+1:texto.index(fim)]:
        s = p.sub('',l.replace('\n',' '))
        print s.decode("iso-8859-1"),
except ValueError:
    print 'Erro! Nao foi possível localizar a palavra.'

Dica: para não ter que digitar o caminho completo de onde você vai colocar o arquivo na hora do uso, crie um link simbólico na pasta /bin/