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! 😀

Anúncios

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

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/

Novidade no Google App Engine

Ontem implementei um bot para o twitter usando o GAE(Google App Engine) que todo dia da semana tuita às 9:00 o cardápio do restaurante universitário da UECE, foi implementado em Python que até ontem era a única linguagem aceita pelo GAE e também porque é a linguagem atual que eu mais gosto de programar.

Foi anunciado no blog oficial do GAE que agora terá suporte à Java. Além de outras novidades que você pode conferir no post oficial.

Algo que precisei para implementar o bot e senti falta no GAE foi funcionalidade de Cron, que foi adicionado nesta última versão. Eu fiz o bot usando outros recursos, mas pretendo implementar usando as novas funções de Cron.

A movimentação com java já começou e colocaram para rodar PHP no GAE:
http://twitter.com/app_engine/status/1478653255

Não sabe o que é o GAE? Site oficial: http://code.google.com/appengine/

A idéia do bot foi do Pedro

Python Challenge

Aprenda python com o riddle PythonChallenge, o jogo possui 33 níveis atualmente, porém não é tão simples. Você precisa fazer alguns códigos em Python(Não obrigatoriamente, mas as dicas levam sempre para Python) para evitar tarefas que seriam bem cansativas se fossem feitas a mão.

Como jogar?

A cada nível o jogo vai lhe dar dicas em vários lugares diferentes, mas sempre no arquivo. A imagem é dica, os textos são dicas e até mesmo no código fonte existem dicas.

A resposta é feita trocando o arquivo da url com a nova resposta.
Exemplo:
http://www.pythonchallenge.com/pc/def/nivel1.html
se a resposta for nivel2 você deve colocar
http://www.pythonchallenge.com/pc/def/nivel2.html

Existe um forum, um wiki e o canal #pythonchallenge na rede freenode
Eu estou no nível 5 e já precisei usar vários código em Python para resolver e foi um bom exercício. Evitem ver as respostas antes de resolver. Bom jogo!
PS: Quando você passa para o próximo nível você pode ver as soluções do nível anterior. Tem uma galera que viaja na solução. hehe

O código fonte do Jaiku foi liberado

Jaiku é uma rede social de micro-blogging que foi lançado em 2006 por Jyri Engeström e adquirido pela Google em 2007. O Jaiku possui caracteristicas semelhantes ao twitter e quando o twitter baleiava o jaiku foi muitas vezes citado como substituto. Porém o passarinho azul não morreu e o Jaiku ainda teria um forte concorrente.

A Google então resolveu parar com desenvolvimento do Jaiku e resolveu disponibilizar o código fonte dele que agora é feito com o Google App Engine(Python) no Google Code Project.

Você pode ver o código do projeto em: JaikuEngine

E também foi disponibilizado o código do cliente Jaiku para celular que pode ser baixando em: Client Jaiku Mobile

meu jaiku: http://fabiocerqueira.jaiku.com

meu twitter: @fabiocerqueira