Arquivos

Arquivo para a categoria ‘Python’

Instalando o Pylons no Opensuse!

Lambda, lambda, lambda¹ garotada esperta!

Se você usa Opensuse, instalar o Pylons ficou muito mais fácil! Semana passada eu empacotei tudo que precisava e submeti ao build service. Resultado? Pylons via YaST!

Instalando:

$su
#zypper ar http://download.opensuse.org/repositories/devel:
/languages:/python/openSUSE_11.2/ python
#zypper install python-pylons

**Atenção: Eu coloquei quebra de linha para poder aparecer na tela, então copie sem – Mude a versão do opensuse para que você estiver usando (11.1, 11.2, 11.3)…

Pronto! Você tem o Pylons rodando Opensuse =)

Agora teste com o post anterior.

.

.

.

.

¹xupinhado do jovem nerd

CategoriasOpensuse, Pylons Tags:, ,

Começando com Pylons

O que é?

Pylons é um framework web extremamente, ultra, mega flexível. Ele serve como uma grande cola que une vários outros módulos para gerar uma solução web. Você pode escolher quais frameworks usar com o Pylons:

Por que usar?

Porque é um framework simples, não te obriga a fazer nada, apenas lhe dá a sugestão de como organizar e controlar o projeto. Pode ser feito qualquer mudança em sua estrutura de forma fácil, ao contrário da maioria das soluções e frameworks.

Pessoalmente acho ele mais fácil de aprender do que Django ou web2py, principalmente pelo fato de usar diversos frameworks que não estão ligados diretamente à ele, por exemplo o SQLAlchemy, onde você pode usar em qualquer outra ocasião, ou as linguagens de templates e até mesmo os helpers para geração de html, nenhum deles necessitam do Pylons pra rodar.

Instalando

Faça download do source no bitbucket:

http://bitbucket.org/bbangert/pylons/

OU via mercurial com:

hg clone http://bitbucket.org/bbangert/pylons/

Depois entre na pasta e execute:

python setup.py install

Criando um projeto

Abra o terminal/cmd, e execute o comando:

paster create -t pylons helloword

Nesse passo ele vai lhe perguntar qual linguagem de template e se vai usar o sqlalchemy ou não. Aperte <Enter> nos dois para usar o padrão.

Atenção: No windows é necessário colocar o c:\python26\Scripts\paster no path

Estutura do projeto

Depois do comando acima,  o paster cria um estrutura de arquivos e diretórios para o projeto:

1 - helloworld
2   - helloworld
3     - config
4       environment.py
5       middleware.py
6       routing.py
7     - constrollers
8     - lib
9       app_globals.py
10      base.py
11      helpers.py
12   - model
13   - public
14   - templates
15   - tests
16   development.ini

4. environment.py: Arquivo de configuração do ambiente, essas configurações são globais, então se algo precisa ser declarada apenas uma vez, será feito aqui.

5. middleware.py: Arquivo de configuração para o servidor wsgi.

6. routing.py: Configuração da URL e das rotas, você pode definir urls personalizadas, por exemplo: meusite.com/2010 vai para o controller blog com o parâmetro 2010.

7. controller: Pasta onde ficarão os controllers

8. lib: Pasta dos helpers, nessa pasta fica o conteúdo compartilhado entre os controllers

10. base.py: Contém o objeto BaseController, o qual é pai de todos os outros controllers

11. helpers.py: Esse é um arquivo especial, as views poderão acessar esse arquivo diretamente sem que o controller tenha que passar explicitamente. Os componentes compartilhados pelas views ficam aqui.

12. model: Pasta dos modelos

13. public: Pasta dos arquivos públicos,  o www do apache

14. templates: Essa é a pasta onde ficarão as views.

15. tests: Pasta dos testes unitários

16. development.ini: Arquivo de configuração do projeto, aqui é definido as informações do banco de dados.

Rodando a aplicação

Entre na pasta do projeto e execute o comando:

paster serve —-reload development.ini

com isso o servidor estará rodando e nós podemos acessar o projeto, abra um browser e entre no 127.0.0.1:5000:


Essa é uma introdução bem por cima sobre o Pylons, a intenção é só passar um super overview sobre o framework, com o tempo pretendo postar tutoriais e dicas sobre ele. Paciência….

=)

Como posso saber mais sobre o Pylons?

Em português:

Em Inglês:

Ainda não temos um site brasileiro e o material em português é escasso, tenho planos para traduzir a referencia do site e o Pylons book, mas por enquanto meu tempo é curto demais.

Espero que mais pessoas se juntem à nossa comunidade!

Por que do self no Python?

Quando começamos a mexer com Python, sempre temos algumas dúvidas acerca de certos pontos da linguagem, como por exemplo as tais properties, declaração atributos privados ou o maldito parâmetro self.

Se procurar no google você encontrará explicações mais detalhadas e profundas sobre esses pontos, nesse post eu vou dar apenas um motivo simples para a declaração explícita do self.

Se você ainda está começando algumas distinções podem ser difíceis, então vai uma ajuda:

  • Função: porção de código que executa uma determinada tarefa, relativamente independente do restante do código
  • Método: basicamente é uma função dentro do escopo de uma classe

Então afinal, por que temos que passar o parâmetro self obrigatoriamente quando declaramos um método?

Caso 1:

Veja o seguinte código:

>>> class Classe:
...    pass

Declaramos uma classe sem métodos ou atributos. Agora vamos colocar um novo método na classe:

>>> def funcao():
...    print 'minha funcao'
...
>>> Classe.metodo = funcao

Pode parecer um pouco confuso para quem programa em outra linguagem, mas a flexibilidade do Python permite a mudança da estrutura de um objeto ou classe em tempo de execução.

Vamos tentar usar essa função agora:

>>> obj = Classe()
>>> obj.metodo()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: funcao() takes no arguments (1 given)

Como podemos ver, ao tentar usar nosso método o interpretador gerou uma exceção, isso aconteceu porque o Python passa uma instância para o método de forma implícita e nosso método não possuí parâmetro algum…

Vamo consertar:

>>> def funcao(self):
...     print 'minha funcao', self
...
>>> Classe.metodo = funcao
>>> obj = Classe()
>>> obj.metodo()
minha funcao <__main__.Classe instance at 0xd89998>

Agora sim, depois de adicionar um parâmetro na função nosso método funcionou, podemos ver também a instância passada pelo Python.

Caso 2:

Vamos inverter a situação extraindo o método da classe e usando como uma função:

>>> class Classe:
...     def metodo(self):
...         print 'Hello', self
...
>>> funcao = Classe.metodo
>>> funcao()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unbound method metodo() must be called with Classe instance as first argument (got nothing instead)

Criamos uma classe e um método, depois extraímos o método e tentamos usar como função, novamente ocorreu um erro.

No caso 1 eu mostrei que o Python passa a instância ao método implicitamente, agora que extraímos o método isso não ocorrerá mais, nesse caso temos que passar um objeto explicitamente:

>>> obj = Classe()
>>> funcao(obj)
Hello <__main__.Classe instance at 0xd9ef80>

Conclusão:

Tente reescrever os dois casos como se o self não fosse necessário (igual ao java por exemplo), quando extraíssemos um método como faríamos com a instância passada? Ficaria um tanto confuso não acha?

Como diz o zen do python “Explicit is better than implicit”, esse trecho se aplica bem na ocasião. Não sei quais foram os reais motivos para a passagem explícita do self, mas nesse contexto ele se torna uma ótima solução.


PS 1: Desculpem se estiver um pouco confuso, realmente não pensei em qual seria a melhor maneira de falar isso.

PS 2: Essa explicação nasceu de meus pensamentos então não tem nenhuma fonte

PS 3: O self na verdade pode ser qualquer nome =)

CategoriasProgramação, Python Tags:,

8-Puzzle Problem

Esse problema consiste em uma matriz 3×3 com 8 peças, numeradas de 1 à 8 e um espaço em branco:

Esse é um trabalho para matéria de IA que ainda será entregue. Eu perdi a versão anterior do programa na formatação do computador então fiz esse correndo, por isso o programa pode estar um pouco ‘zuado’ =)

Foi implementado o algoritmo A* e a busca gulosa com duas heurísticas diferentes:

Leia mais…

Tradução do Pylons Book

Começamos o trabalho para traduzir o pylons book (eu e o nosklo). Já pegamos o source do livro, em rst, agora falta colocar no repositório e mandar ver!

Repositório: http://code.google.com/p/pylonsbook-ptbr/

Também criei uma lista de discussão: http://groups.google.com/group/pylons-brasil

Quem se interessar e quiser participar ou mesmo saber mais sobre pylons é só nos contactar /email/lista/#pylons-br/whatever/.

Google Groups
Pylons Brasil
Visit this group

Agora haja tempo – trabalho, faculdade, tradução opensuse, tradução pylons – !GO GO GO!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.