By

Compilando o Python 2.6 com zlib e sqlite no Debian 5

Olá pessoal, faz um tempinho que eu havia decidido fazer um post sobre isso e acabei esquecendo, mas hoje me lembrei e não me perguntem a razão. Eu tive uma grande dor de cabeça quando tive que compilar o Python 2.6 no Debian 5 com a zlib e suporte a sqlite3. Agora ensinarei a vocês para que não passem pelo mesmo que eu passei.

Primeiramente instale os pacotes de desenvolvimento que serão necessários para que tudo seja compilado sem problemas:

 sudo apt-get install build-essential linux-headers-`uname -r` build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdbm-dev libbz2-dev libc6-dev libsqlite3-dev libdb-dev tk-dev

Agora seu sistema já está apto a compilar o Python 2.6 com zlib e sqlite3. Baixe o código fonte do Python 2.6, extraia-o e na pasta dele execute o seguinte comando para configurar:

 ./configure USE="sqlite" –with-zlib=/usr/include

Depois para compilar:

 make

E finalmente, para instalar:

 sudo make install

Qualquer dúvida ou sugestão é só comentar minha gente! :D

By

Proriedades de Objetos e Metaprogramação em Ruby

Olá pessoal. Hoje mais cedo, um amigo (Pedro Henrique) me veio perguntar criar propriedades para objetos em Ruby e então eu decidi fazer esse post para ajudar a galera que ta começando com a linguagem. Criar propriedades em Ruby não é muito complicado, mas para a primeira vez exige um pouco de pesquisa.

Vamos começar então. Primeiramente espero que você saiba definir uma classe (olha lá hein!). Criaremos uma classe Pessoa que deve receber um nome no momento da criação, por exemplo.


class Pessoa

  def initialize(nome)
    @nome = nome
  end

end

A partir dessa classe, se você criar um objeto Pessoa com qualquer nome e tentar acessar a propriedade nome você terá um NoMethodError. Existem duas maneiras de criar essa propriedade nome. Vamos começar pela mais bruta (setter e getter). Se quando você chamou a propriedade nome o Ruby disse que o método não existe, vamos criá-lo:


class Pessoa

  def initialize(nome)
    @nome = nome
  end

  def nome
    @nome
  end

end

Desta maneira você já conseguirá criar um objeto da classe Pessoa e acessar sua propriedade nome. Porém ao tentar mudá-la, novamente, será lançado NoMethodError para a função “nome=”. Então vamos criá-la.


class Pessoa

  def initialize(nome)
    @nome = nome
  end

  def nome
    @nome
  end

  def nome=(novo_nome)
    @nome = novo_nome
  end

end

Ótimo! Agora podemos acessar e modificar a propriedade nome dos objetos criados a partir da classe Pessoa. Mas essa maneira de fazer isso é bem feia e trabalhosa. Existe um “açucar sintático” que torna a criação de propriedades bem mais simples. São as funções attr_reader, attr_write e attr_accessor. A classe Pessoa poderia ser reescrita, com o mesmo funcionamento, da seguinte maneira:


class Pessoa

  attr_accessor :nome

  def initialize(nome)
    @nome = nome
  end

end

A linha 3 do código tem um funcionamento interessante. Ela transforma o símbolo passado como parâmetro para string, chama a função define_method, que define um método na classe onde ela é chamada. Ela passa então, via bloco de código, instance_variable_get, que por sua vez, recebe uma string como parâmetro e retorna o valor da variável com esse nome na instância da classe onde a função foi chamada. E para permitir a mudança as coisas não mudam muito, porém o método passa para o bloco de código uma variável, que seria o novo valor, e chama a função instance_variable_set que além da variável a ser mudada recebe o seu novo valor. Cabuloso, não?

Quanto aos outros dois métodos “mágicos”: o attr_reader, como seu nome diz, cria um método de acesso à propriedade e o attr_writer cria um método de escrita.

Ai vai uma implementação dos 3 para você entender melhor como funciona:


def new_attr_reader(attr)
  define_method("#{attr}") { instance_variable_get("@#{attr}") }
end

def new_attr_writer(attr)
  define_method("#{attr}=") { |new_value| instance_variable_set("@#{attr}", new_value) }
end

def new_attr_accessor(attr)
  new_attr_reader(attr)
  new_attr_writer(attr)
end

Isso nos mostra um pouco (?) do poder da metaprogramação em Ruby, que nos permite modificar classes em runtime e adicionar a elas: métodos, propriedades, variáveis… tudo que você pode imaginar! É código que modifica código. Praticamente 80% da facilidade, graça e poder do Ruby On Rails só pode existir graças a essa poderosa ferramenta que vale a pena ser estudada com paciência e atenção.

Bom, agora vocês já devem estar experts nisso (ou não). Até a próxima pessoal… e qualquer problema ou dúvida é só comentar! :D

By

ForkInCampos: O começo

Bom, alguns de vocês (pessoas que eu conheço fisicamente) já devem estar sabendo disso, outros não. Nessa sexta-feira passada (03/09) estava eu trabalhando normalmente quando Tarsis Azevedo, após ver um tweet do Israel sobre ForkInRio e reclamar que não tinhamos Fork em Campos dos Goytacazes, resolve me chamar para junto com ele organizar um Fork pra gente. Como eu so muito doido (e ele também) demos um jeito nisso rapidinho… e nasceu o ForkInCampos!

O que é ForkInCampos? O que é um Fork?


Calma gente, uma pergunta de cada vez. Primeiro explicarei brevemente o que é um Fork.

Fork é uma reunião de pessoas determinadas a aprender algo em comum, que assim como o Coding Dojo, prega não só o aprendizado mas também o compartilhamento do mesmo. Foi idealizado pelo pessoal do #horaextra inicialmente com o ForkInRio.

De maneira mais expressiva, o Fork é mais uma opção para encontrar seus amigos, conhecer gente nova, aprender coisas novas e ainda se divertir. Não existe pressão alguma, pessoas te cobrando… é aprendizado na essência! Apesar deste ter uma dinâmica que alguns achem meio individualista no começo, no fim verão que é bem interessante e proveitoso.

Mas eu não vou explicar aqui TUDO sobre um Fork. Para isso eu e Tarsis criamos um documento no Google Docs explicando o máximo possível sobre Fork’s e sua dinâmica.

Fodaaaaa!!111!1!! Quero participar, #comofas?


Se você tem interesse em participar, é simples! Basta participar do grupo de discussão do ForkInCampos. E enviar um email ou ficar atento aos já enviados. Caso você queira iniciar um Fork sobre qualquer assunto de seu interesse basta contatar o grupo propondo o assunto. Logo os interessados irão responder e assim vocês poderão combinar local de encontro, exercícios, compartilhar material de estudo, etc. Simples assim! Tudo fácil e acessível a todos, basta que haja comunicação que tudo se resolve.

Por que diabos vocês resolveram fazer isso cara? :/


Resolvemos fazer isso porque podemos ver através dos Coding Dojo’s que não exista uma maneira melhor de adquirir conhecimento do que conversando com outras pessoas. Juntos podemos aprender muito mais… cada um colaborando com o pouco que sabe para termos um conhecimento cada vez mais completo sobre o mais números de coisas possíveis.

Qualquer dúvida ou sugestão é só deixar um comentário gente, até a próxima! :D