Rodrigo Hübner

Computação e|é Diversão





Colabore com a Wikipédia sem colocar a mão no bolso!

25th June 2008

Bom, é notável eu ser um grande entusiasta do software livre e gostar de falar tanto sobre isso (quem me conhece sabe), afinal defendemos o que é bom! Mas ao contrário do que muitas pessoas pensam, projetos como a Wikipedia, Creative Commons e Python Brasil, precisam da colaboração das pessoas que a utilizam ou que estão envolvidas de alguma forma para “sobreviver”. Há várias formas de ajudar tais projetos, como indicar bugs, contribuir com o desenvolvimento (colocar a mão na massa), traduzir, etc.

Para contribuir ainda mais com projetos livres, em especial a Wikipedia, a BR-Linux e Efetividade.net decidiram criar uma campanha que irá beneficiar esses projetos e participantes que estarão ajudando a divulgar (como eu) e também projetos escolhidos pelos participantes, com o seguinte texto:

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!
…e também a pen drives, card drives, camisetas geeks, livros e mais! O BR-Linux e o Efetividade lançaram uma campanha para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e participe - quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!

…use, contribua e o mais importante, seja livre!

Posted in Software Livre | No Comments »

O “eu mesmo” em python: self

19th June 2008

As pessoas que não são tão acostumadas com a programação orientada a objetos em python, as vezes me perguntam: Por que utilizar aquele “self” antes de qualquer parâmetro em um método? Pois bem! Vou tentar responder esta pergunta tão comum e com alguns exemplos notáveis.

Primeiramente vamos definir uma classe chamada “Pessoa” e atribuir um método a ela para dar o nome a uma pessoa:

class Pessoa(object):

def set_nome(self, nome)

if nome.istitle():

self.nome = nome

else:

print “Nomes próprios possuem a primeira letra maiúscula :)”

Muito bem! Eu defini uma restrição dentro no “if” para testarmos se o nome passado como parâmetro têm a primeira letra maiúcula. Para esta classe, nós instanciamos um objeto que é usado posteriormente para acessar o método dentro da classe, assim, utilizamos o objeto seguido do nome do método dessa forma:

ciclano = Pessoa()

ciclano.set_nome(”Rodrigo”)

print ciclano.nome #Vai imprimir ‘Rodrigo’

Até aí tude bem! Mas e o self? O self é o nome do objeto a ser invocado pelo método, em outras palavras, quando fazemos ciclano.set_nome(”Rodrigo”), estamos dizendo que o método set_nome chamado pertence a classe instanciada para o objeto ciclano.

Outra forma de utilizar esta mesma classe é a seguinte:

ciclano = Pessoa()

Pessoa.set_nome(ciclano, “Rodrigo”)

print ciclano.nome #Vai imprimir ‘Rodrigo’

Perceberam a diferença? Agora eu tive que passar o objeto na qual o método set_nome pertence como primeiro parâmetro do próprio método!

Não é necessário que o primeiro parâmetro seja exatamente “self”, nos podemos dar qualquer nome a ele, mas como é interessante que tudo seja padronizado e que o nome self está nas normas de padronização PEP-8, então não iremos discutir.

Algumas linguagens utilizam o self implicitamente, mas por que em python ele é definido explicitamente? Eu achei algumas definições:

  • O self explícito faz parte do “espírito da linguagem”, como diz o Zen of Python: Explícito é melhor do que implícito;
  • A declaração explícita já virou costume entre os programadores em python;
  • Maior flexibilidade na chamada de métodos.

Se alguêm tiver mais um por favor comente :)

Existem outras razões relacionadas a herança simples e múltipla na linguagem que poderei falar na próxima. Até logo!

Posted in Python | 4 Comments »

Voltando aos primórdios da programação OO

24th May 2008

Depois de um tempo parado, queria falar sobre uma linguagem responsável por roubar meu tempo todos esses dias em um trabalho da disciplina de “Linguagens de Programação” no meu curso… Smalltalk, ou mais precisamente o ambiente Gnu-Smalltalk!

Assim como Python, Smalltalk é uma linguagem em que tudo é objeto! Bem mais velha que Python, criada na década de 60 pelo pessoal do MIT, essa linguagem possui vários ambientes como Squeak, Gnu-Smalltalk, etc na qual é dependente, mudando um pouco sua sintaxe para cada um deles.

O proveito que tirei dessa linguagem, foi trabalhar em cima do paradigma OO de forma mais consistente e intuitiva. Sem dúvida aumentei meus conhecimentos em programação OO e uma boa prática será aplicar esses conhecimentos em outras linguagens que também carregam esse paradigma (Python :)).

A seguir, um exemplo simples da um série matemática que eu gosto, a série de fibonacci:

1º começo declarando uma classe:

Object subclass: #Fibonacci
instanceVariableNames: ”
classVariableNames: ”
poolDictionaries: ”
!

Depois documento os métodos que irei utilizar e escrevo o método chamado “calcula”:

! Fibonacci methodsFor: ’série de fibonacci’ !

calcula: n
| conj |
n < 2
ifTrue: [^n]
ifFalse: [conj := Array new: n.
____conj at: 1 put: 0.
____conj at: 2 put: 1.
____ 3 to: n do: [:i |
____ conj at: i put: ((conj at: (i - 2)) + (conj at: (i - 1)))].
____ ^conj
].
!!

Repare que cada expressão é terminada com um ponto “.”, exceto a última expressão do método que pode vir ou não um ponto.

Definimos o fim do método com uma exclamação “!”, ou se for o último método da classe como no meu exemplo, é colocado duas exclamações, a primeira finalizando o método e a segunda finalizando a classe.

O sinal de circunflexo “^” antes de um objeto, define o retorno de um valor. De acordo com o exemplo, se o parâmetro “n” for menor que 2, retorna o valor dele mesmo, senão é feito o algoritmo depositando a sequência dentro de um array declarado com o tamanho do “n” passado.

Por fim, pegamos um número passado como parâmetro no terminal e instanciamos a classe “Fibonacci” para o objeto “x”:

args := Smalltalk arguments.
x := Fibonacci new.

Com o objeto “x” instanciado, chamamos o método calcula passando como parâmetro, o número digitado pelo usuário no terminal:

(x calcula: (args at: 1) asInteger) printNl.

Agora é só salvar o código e executá-lo da seguinte forma na linha de comando (Baixe-o aqui se preferir):

gst fibonacci.st -a 7

Onde “gst” é o compilador, “fibonacci.st” é o nome do fonte, “-a” diz que queremos passar um parâmetro logo a frente e 7 é a quantidade de números da sequência que queremos imprimir.

No Ubuntu, o pacote chama-se “gnu-smalltalk”. Para instalar é só usar o aptitude ou outro gerenciador de pacotes que estão acostumados e sair brincando!

Posted in Smalltalk | 3 Comments »

Flisol 2008: Programação em Python

27th April 2008

Em primeiro lugar, quero dizer que o evento FLISOL aqui em Maringá está de parabéns! A galera apareceu em peso, vimos pessoas até de cidades mais próximas da região, muito legal mesmo!

Bom, Uma das palestras realizadas foi “Programação em Python”, em que eu fui o palestrante. Nesta palestra, além de uma pequena introdução, dizendo empresas grandes que trabalham com a linguagem, características introdutórias, etc, eu mostrei aspectos interessantes como:

  • List Comprehensions;
  • O método map();
  • Função de uma linha (lambda);
  • Geradores e Iteradores; e
  • Herança Múltipla

A palestra eu deixei disponível para fazer o download em .pdf [aqui]

Teve outras palestras interessantes como “Conhecendo e Viajando na filosofia do Software Livre” e “Nas Asas do Ubuntu 8.04″ ministradas por André Noel, “Slackware Linux” que foi uma palestra praticamente improvisada por Maycon Sambinelli que deu conta do recado falando da sua “religião” que é o Slackware.

Destaque também para a palestra de Eduardo Pezutti falando do CMS Drupal e Lucas Mazzardo Veloso com sua palestra “Administração de Ambientes Heterogêneos com Software Livre” mostrando algumas ferramentas livres para manutenção e administração de redes e computadores.

Rodrigo Hübner

Bom, obrigado a quem compareceu e espero que tenham gostado!

Posted in Eventos, Python | No Comments »

Instalando Plone 3 no Ubuntu

17th April 2008

Este tutorial ensinará você a instalar o gerenciador de conteúdo Plone versão 3 em seu computador usando Ubuntu 7.10.

- É necessário instalar o Zope 2.10.4 ou superior (No repositório release do Ubuntu 7.10 é encontrado a versão 2.10.4 do Zope) e algumas dependências de módulos python. Abra o terminal e instale usando o aptitude como administrador:

$ sudo aptitude install zope2.10

$ sudo aptitude install python-elementtree python-imaging

- Crie uma nova instância do Zope para gerenciar seus projetos que também é necessário para a adição do Plone 3. Vamos entrar no diretório onde se encontra o script para gerar uma nova instância e executá-la:

$ cd /usr/lib/zope2.10/bin/

$ sudo ./mkzopeinstance.py

Informe o diretório que será criado (O padrão é “/var/lib/zope2.10/instance/”), o login e a senha/confirmação de administrador que você irá escolher (no meu caso será tudo “admin”):

Directory: /var/lib/zope2.10/instance/

Se a instância for criada corretamente na pasta “/var/lib/zope2.10/instance/”, será criado alguns arquivos e pastas como “Products” e “lib” que serão substituídas futuramente na adição do Plone 3.

- Faça o download da ultima versão do Plone 3 aqui e faça o seguinte no terminal:

Entre na sua pasta pessoal onde você fez o download do pacote e descompacte.

$ cd ~/

$ tar -zxvf Plone-3.0.6.tar.gz

$ cd Plone-3.0.6

Substitua as pastas “Products” e “lib” na pasta em que você criou a instância Zope.

$ cp lib/ /var/lib/zope2.10/instance/ -Rf

$ cp Products/ /var/lib/zope2.10/instance/ -Rf

- Agora é só iniciar o Zope e testar criando um novo Plone Site de teste:

Primeiro verifique a porta que está configurada o Zope em local server no arquivo “/var/lib/zope2.10/instance/etc/zope.conf”

linha 28: %define HTTPPORT 9673

Se quiser deixar configurado para essa mesma porta não mexa no arquivo, caso contrário indique a porta que deseja configurar em localhost e salve o arquivo.

Inicie o servidor:

$ cd /var/lib/zope2.10/instance/bin

$ sudo ./zopectl start

Abra o navegador e teste o funcionamento do zope em “localhost:9673″. Se a página ” Zope Quick Start” abrir a instalação do zope foi correta! Falta agora testar o plone criando um novo Plone Site acessando “localhost:9673/manage” (o login e senha foi o que você definiu na criação da instância zope). Na página de administração do Zope que chamamos de ZMI existe uma combobox para inserir novas aplicações. Escolha Plone Site conforme a figura seguinte:

Irá abrir um formulário para você inserir o id (nome curto de acesso para o portal), Title (Título para o portal), um campo para descrição e um ultimo que você irá indicar qual template usar inicialmente (não precisa escolher nenhuma se quiser!). Clique no botão “Add Plone Site” e em seguida seguida poderá acessá-lo em “localhost:9673/<nome_id>

Se a página de “Boas Vindas” do plone abrir, a instalação foi feita com sucesso!

Posted in Plone, Tutoriais | No Comments »

Boas Vindas

11th April 2008

Depois de muito tempo resistindo aos prazeres da media, hoje estou lançando um blog! Mas é por um bom motivo… Quero expor meus trabalhos e principalmente disseminar o software livre, contribuindo com essa comunidade que está sempre presente e que transmite realmente o que é a computação!

De início estou fazendo a publicidade de um evento que acontece em diversos países da América Latina chamado FLISOL e dessa vez estou contribuindo com o evento aqui em Maringá - PR (minha cidade) que participará do evento pela 4ª vez no dia 26 de Abril. Mais informações no site do evento.

Bom! Por enquanto é isso… Até logo!

Posted in Eventos | No Comments »