Março archive

30
Mar

Curso de Python na UFMT - segunda aula


Ontem (30/03) aconteceu a segunda aula de Python que estou ministrando gratuitamente na UFMT.

Primeiramente eu ensinei como ter um ambiente de desenvolvimento para programar em Python no Windows usando NotePad++. E percebi que ensinar como preparar um ambiente de desenvolvimento é muito importante. Muitos dos que iniciam em Python não usam Linux (ainda) e também não sabem como configurar variáveis de ambiente entre outros passos que é necessário para ter um ambiente de desenvolvimento legal no Windows.

Depois de tudo instalado e configurado, resolvi passar uns exercícios para eles praticarem. Como na primeira aula os alunos viram quase toda a estrutura inicial da linguagem (string, comandos condicionais, laços de repetição, listas, dicionários ). Os exercícios que usei estão no wiki do PythonBrasil.

Na primeira aula percebi que muitos aprenderam o conteúdo rapidamente. Mas nessa segunda aula percebi que os alunos que não praticaram durante a semana, esqueceram muito do que foi passado.

Vejamos alguns exercícios passados:

Primeiro exercício

Quase todos conseguiram solucionar o primeiro exercício que era para ler duas strings, e exibir elas na tela e o tamanho delas na tela e informar se elas eram iguais e se tinham o mesmo tamanho.

Como muitos alunos vieram do C, eles ficaram surpreendidos ao ver que para comparar uma string com outra basta apenas usar o operador de comparação (==).

Nesse exercício alguns demoraram, mas todos resolveram.

Segundo exercício

O segundo exercício consistira em ler um nome e exibir na tela ao inverso e em maiúsculas.

Nesse exercício muitos resolveram rapidamente, mas quase todos chegaram a essa solução:

nome = raw_input('Digite seu nome:  ')

i = len(nome)
nome2 = ''
while i>=0:
    nome2 += nome[i]
    i -= 1
print nome2.upper()

Alguns chegaram a uma solução mais pythônica, que a meu ver é a solução ideal:

nome = raw_input('Digite seu nome: ')
print nome[::-1].upper()

Nesse post eu não vou falar sobre a maneira pythônica de se escrever um código, vou deixar isso para um outro post. Mas eu fiquei bem surpreso a ver que teve alunos que chegaram a solução acima.

Depois de mais alguns exercícios, comecei a passar conteúdo novo: funções. Chegamos a ver quase tudo sobre funções em Python: declaração, parâmetros, parâmetro padrão, recursividade, escopo, lambda, generators e etc.

Próximas aulas

Para finalizar, como o curso ainda terá mais três aulas que consistirá em praticar o que foi feito, veremos também orientação a objetos e para finalizar veremos PyGame. Eu deixei que eles escolhessem entre Django, PyGtk ou PyGame. Mas a maioria escolheu PyGame.

Quanto ao material eu ainda estou formulando ele para disponibilizar aqui no site. Quando estiver pronto eu publico o link aqui no blog para todos lerem.
29
Mar

Qual o melhor serviço de hospedagem para Django?


A pergunta que está no título desse post é uma das principais perguntas de quem desenvolve para web utilizando o Django .

Eu lembro que quando comecei a utilizar o Django eram poucas hospedagens onde era permitido instalar o mesmo. Mas por sorte ( ou azar ) eu encontrei uma empresa de serviços de hospedagem com muitos privilégios por um preço bem pequeno. Parecia um 'sonho de hospedagem'.

Mas após alguns meses de utilização quando tive um problema com uma instalação de um aplicativo em Django nessa hospedagem, eu soube que ela não da suporte a Django e sim aceita o uso dele em seus servidores.

Hoje há muitos serviços de hospedagem que aceitam o Django , mas, nem todos dão suporte à ele, dificultando ainda mais a escolha de um serviço ideal.

Inspirado por esse dilema, foi criado o site Djangofriendly onde contém uma lista de hospedagens com a descrição e preço de cada um. Onde o desenvolvedor também pode se cadastrar e votar positivamente ou negativamente contra uma hospedagem e se quiser pode deixar comentários.

Para não ter seu 'sonho' transformado em pesadelo, consulte o Djangofriendly antes de contratar um serviço de hospedagem.
28
Mar

'Python' is not 'Phyton'



Grafia

Devido a grande ocorrências de artigos onde o nome da minha linguagem preferida foi escrito errado, resolvi criar esse post como uma forma de protesto e informação.

Não é necessário digitar o comando abaixo para saber que P-Y-T-H-O-N é diferente de P-H-Y-T-O-N. Mas é frequente os artigos onde essa troca acontece.


>>> 'PYTHON' is not 'PHYTON'
True


Creio que o nome da linguagem não é escrito errado de propósito, provavelmente ou foi falta de atenção ou falta de conhecimento. Mas o erro foi feito.

E esses erros de grafia não se limitam apenas em Phyton se procuramos no Google vamos encontrar Pyton, Piton, Pitón entre outros similares.

Vamos tentar ( eu também não estou livre de erros ) escrever Python corretamente ok?

Para os mais interessados, o Marco André também em protesto escreveu um ótimo artigo falando sobre a origem e a grafia da linguagem Python. E lendo esse artigo você descobrirá porque a linguagem tem o nome Python.

Pronúncia

Um outro erro grave é a pronúncia. É comum ouvir piton, pitón, faiton entre outras formas de tentativas de pronuncia para a palavra Python. Mas se recorrermos a alguns vídeos de palestras ou ao FAQ do site PythonBrasil, descobriremos que:

'Deve-se dizer "Páifon", lembrando que "th" pronuncia-se colocando a língua entre os dentes e emitindo um som de "f". "Páiton" também é uma pronuncia aceitável.'

Update: O Marco André, sugeriu nos comentários um ótimo link onde é possível ouvir a pronúncia da palavra Python.

Então fica a dica para quem escreve artigos, tutoriais e etc. Python não é Phyton. E para quem quer pronunciar a palavra Python sem passar vergonha lembre-se Python (Páiton) não é Píton.

24
Mar

Curso de Python na UFMT - primeira aula

Começou no sábado dia 22/03 um curso gratuito de Python que tem duração de 5 sabádos na Universidade Federal do Mato Grosso (UFMT).



No primeiro dia de aula, teve a presença de 22 pessoas. Entre as pessoas haviam alguns amigos meus e entre eles o Helder do xbilidade.net.



O andamento da turma na primeira aula foi muito bom. Foi possível ensinar todos os conceitos básicos da linguagem com estrutura de controles e ainda trabalhar a fundo com strings, listas e dicionários. Se continuar nesse ritmo será possível passar mais conteúdo do que eu tenho planejado e isso é muito bom!



Mas esse foi apenas o começo!

21
Mar

Monkey Patch

Motivado pelos posts sobre paradigmas de programação escritos pelo Ronaldo Ferraz e a uma discussão sobre como alterar uma classe em tempo de execução no Python, resolvi escrever sobre esse assunto aqui no blog.



Moneky Patch é como é chamada a possibilidade de poder alterar uma classe em tempo de execução. Existem linguagens em que o Monkey Patch é muito utilizado, como o Ruby, mas é possível utilizar essa técnica em Python também.



Em Ruby para alterar uma classe basta apenas chamar a classe novamente e assim extendê-la:



Vamos criar uma classe chamada Teste:




class Teste
def oi
puts 'oi'
end
end


Vamos alterar ela. Como citei acima basta apenas recriar ela com o novo método:




class Teste
def ola
puts 'ola'
end
end


Em Ruby é permitido alterar classes nativas e métodos já existentes. Dessa forma se eu quiser adicionar um método a classe String eu posso.




class String
def conta
return self.size()
end
end


Em Python as coisas funcionam um pouco diferente. Vamos criar uma classe sem métodos chamada Teste:




>>>class Teste: pass
>>> dir(Teste)
['__doc__', '__module__']


Vamos criar uma função para adicionar futuramente como método a classe Teste




>>> def oi(self): print 'oi'


Para adicionar essa função como método da classe basta criar um atributo na classe e atribuir a função a esse atributo da seguinte maneira:




>>> Teste.oi = oi


E para confirmar que está tudo funcionando como esperado, vamos criar uma instância para a classe Teste e executar o método oi:




>>> teste = Teste()
>>> teste.oi()
oi


Outra forma de adicionarmos um método a uma classe é usando o método setattr:




>>>setattr(Teste, oi.__name__, oi)


Agora com esse conhecimento é possível, automatizar isso criando decorators ou metaclasses como num exemplo dado pelo Guido van Rossum.



Só uma observação. Diferente de Ruby, no Python não é possivel fazer monkey patch em classes built-in como str, int, list.



Vamos a um exemplo:




>>> def conta(self): print len(self)

>>> setattr(str, conta.__name__, conta)

Traceback (most recent call last):
File "", line 1, in
TypeError: can't set attributes of built-in/extension type 'str'


Para finalizar, ter o recurso do monkey patch numa linguagem é algo muito poderoso, e alguém já disse que 'com grandes poderes, vem grandes responsabilidades'. Se você alterar uma classe usando o monkey patch com um método que já existe nessa classe, isso pode ser algo bem traiçoeiro.



19
Mar

Parabéns para mim

Bom pessoal hoje dia 20 de março faz 23 anos que eu nasci.



Parabéns para mim!



:-)

10
Mar

Django T-Shirts

Ter uma camiseta do Django é o sonho de vários desenvolvedores Django aqui no Brasil.



Uma prova disso é uma thread que está rolando na lista do django-brasil para que seja feito uma camiseta. O que muitos não sabem é que já existe o Django T-Shirts, onde há alguns modelos de camisetas e blusas de frio.



Agora é só juntar uma graninha e comprar a sua!


10
Mar

Microsoft Research Asirra

Eu sempre odiei o uso de CAPTCHA para evitar spam's e comecei a odiar ainda mais quando saiu o re-captcha. Mas eu sempre concordei que eles eram as melhores opções para verificar se uma mensagem ou um comentário está sendo inserido por uma pessoa e não por um programa. Pois é, eles ERAM as melhores opções.



Navegando pelo site da M$ Research encontrei um projeto bem bacana, chamado Asirra. O Asirra é um sistema de verificação de interatividade humana, que é composto de várias fotos de gatos e cachorros onde a pessoa tem que selecionar todos os gatos. Além de ser bem bacaninha a interface do Asirra, é bem mais fácil para um usuário identificar gatos entre cachorros do que tentar reconhecer palavras que muitas vezes são ilegíveis como as que ficam nos sistemas de CAPTCHA.



O Assira assim como o re-Captcha é gratuito e no seu site há vários exemplos de como usar ele com Python, PHP, C#, JScript, VB e Perl.

03
Mar

Python 2.6a1 e 3.0a3 sem conflitos

Há alguns dias foram lançadas as versões alpha das versões 2.6 e 3.0 do Python.



Se você quiser instalar essas versões para 'brincar' com elas sem interferir nas versões já instaladas no seu computador é bem simples.



Você pode seguir uma 'receitinha' feita pelo Luiz Rocha para instalar o Python no diretório /opt do linux.



Primeiramente baixe os arquivos tar.gz do Python 2.6a1 aqui e do Python 3.0a3 aqui.



Descompacte os arquivos:



Para o Python 2.6


$ tar xvzf Python-2.6a1.tar.gz


e para o Python 3.0


$ tar xvzf Python-3.0a3.tar.gz


Entre no diretório do Python 2.6 e execute os comandos abaixo para instalá-lo.



$ ./configure --prefix=/opt/python26
$ make
$ make install

E agora vamos fazer a mesma coisa para instalar o Python 3.



$ ./configure --prefix=/opt/python3k
$ make
$ make install

Para usá-los é só executar os seguintes comandos:



Para o Python 2.6


$ /opt/python26/bin/python


Para o Python 3


$ /opt/python3k/bin/python


Uma vantagem de instalar essas versões do Python no /opt é a facilidade de poder removê-las usando:




$ rm -rf /opt/python26/bin/python
$ rm -rf /opt/python3k/bin/python