Dev in Rio 2009

Posted August 23rd, 2009 in Desenvolvimento by felipepavao

Dev in Rio 2009

Mais um evento muito legal promete agitar e marcar o cenário carioca de desenvolvimento de software. Será realizado dia 14 de setembro o Dev in Rio, um evento que terá vários ícones nacionais e internacionais representando diversas comunidades de tecnologias. Um dos organizadores é meu colega de trabalho Guilherme Chapiewski, famoso por diversas palestras que já fez em sua carreira, além de ser um grande desenvolvedor.

O evento que também é organizado pelo Henrique Bastos, contará com as presenças de Ryan Ozimeck, Guilherme Silveira, Nico Steppat, Fábio Akita, Jacob Kaplan-Moss, Jeff Patton e Vinícius Manhães Teles.

Confira toda a programação no site do evento e não deixe de participar.

Python Brasil 2009 – 5º encontro

Posted July 13th, 2009 in Eventos by felipepavao

PythonBrasil[5]

O maior evento da comunidade Python brasileira está chegando. Renomeado para Python Brasil (antes era Pycon), a Python Brasil 2009- 5º encontro acontecerá em Caxias do Sul, entre os dias 10 e 12 de setembro próximo. As inscrições já estão abertas e você pode conferir no site do evento maiores detalhes.

Estamos pensando em apresentar alguma coisa feita em Django aqui na Globo.com no evento, mas precisamos ver se iremos este ano. Ano passado o evento foi aqui no Rio de Janeiro, o que facilitou a nossa presença.

<div>
<a href="http://www.pythonbrasil.org.br/" title="PythonBrasil[5]">
<img src="http://www.pythonbrasil.org.br/2009/saiba-mais/apoio-divulgue/pythonbrasil-rectangle.gif" alt="PythonBrasil[5]" />
</a>
</div>

Testes de Django Middleware

Posted March 18th, 2009 in Desenvolvimento by felipepavao

Ainda não consegui parar e escrever sobre Rails aqui no blog, mas tenho descoberto coisas interessantes de Django. O novo desafio, aqui no trabalho, foi criar e testar um Middleware que tinha a função de identificar o User-Agent de um request e setar alguns parâmetros para que a aplicação pudesse se desenvolver a partir daí. É mais ou menos parecido com o que já foi mencionado aqui, anteriormente.

from django.conf import settings
from app.pub.structure import *
from django import http
import re
 
class IdentifyMiddleware(object):
 
    def process_request(self, request):
 
        # LIST PERFIS
        perfil = Perfil()
        perfis = perfil.all()
 
        for p in perfis:
            if p.regular_expression:
                logging.info("Identify User: regexp [%s]" % p.regular_expression)
                r = re.compile(p.regular_expression, re.IGNORECASE)
                if r.search(request.META['HTTP_USER_AGENT']):
                    request.perfil = p
                    return
 
        # SET PERFIL NONE
        perfil.name = "none"
        request.perfil = perfil

Esse Middleware lista expressões regulares guardadas em um banco de dados e compara com o User-Agent do request. Uma vez encontrada, é setado uma propriedade no request chamada perfil, identificando assim o tipo de request que estamos trabalhando. O teste realizado no Middleware era verificar se o request realmente trazia o parâmetro perfil setado.

#!/usr/bin/python
# vim: ai ts=4 sts=4 et sw=4
 
import unittest
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
#from django.test import TestCase
from django.http import HttpRequest
from app.handset.identify import IdentifyMiddleware
from django.conf import settings
 
class TestIdentify(unittest.TestCase):
 
    def _get_request(self, path):
        request = HttpRequest()
        request.META = {
            'SERVER_NAME': settings.CDA_URL
        }
 
        request.path = path_info = "/%s" % path
        return request
 
    def testPerfilIphone(self):
        request = self._get_request('identify')
        request.META = {
                        'HTTP_USER_AGENT':'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A538a Safari/419.3'
                        }
        IdentifyMiddleware().process_request(request)
        self.assertEquals(request.perfil.name, 'IPhone')
 
    def testPerfilStandard(self):
        request = self._get_request('identify')
        request.META = {
                        'HTTP_USER_AGENT':'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009030422 Ubuntu/8.10 (intrepid) Firefox/3.0.7'
                        }
        IdentifyMiddleware().process_request(request)
 
        self.assertEquals(request.perfil.name, 'standard')
 
if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(TestIdentify)
    unittest.TextTestRunner(verbosity=2).run(suite)

O teste por si só se explica, mas vale salientar o ponto onde foi utilizado a biblioteca HttpRequest do próprio Django para montar o request. Outro ponto é quando o teste instancia o método IdentifyMiddleware().process_request(request) do Middleware, o parâmetro request se mantem por referência, não necessitando de um retorno (return alguma coisa) do Middleware para continuar a testar o parâmetro perfil adicionado ao request.

Com certeza o próximo texto será sobre Rails, que é um framework que voltei a estudar muito para desenvolver projetos pessoais. Até lá.

Aprenda a programar – programação para todos

Posted March 13th, 2009 in Desenvolvimento by felipepavao

Muitos amigos intessados em iniciar no mundo da programação têm dúvidas de como começar ou qual linguagem escolher para estudar, e se sentem perdidos neste imenso campo de informação. Para melhorar isso, indico a todos os leitores que sejam iniciantes, a praticarem os tutoriais de iniciação em Python e Ruby.

python logoruby logo

Não irei defender nenhuma delas, mas considero sendo estas 2 grandes linguagens em que um novo programador se sentirá confortável para desenvolver desde os conceitos básicos até os mais avançados. Divirta-se.