Oxente Rails 2010

August 11th, 2010 David Paniz No comments

É com muito orgulho e satisfação que vou escrever sobre minha participação nesse evento maravilhoso! Antes de falar sobre minha palestra quero deixar aqui meus sinceros agradecimentos ao pessoal da organização. Esse evento foi provavelmente o melhor evento do ano até agora.

Infelizmente eu e o Adriano Almeida tivemos um tempo bem limitado pra falar sobre um assunto tão amplo, mas acredito que alcançamos nosso objetivo e fizemos quem estava presente se questionar sobre as escolhas de tecnologia para persistência. Durante nossos 30 min falamos sobre o que é NOSQL, comentamos sobre a estrutura de alguns tipos de banco de dados não relacionais e finalmente apresentamos o Neo4j como uma implementação de Graph Database. Terminamos mostrando como integrar com rails através do Binding JRuby ou através da API REST utilizando o Restfulie para isso.
Slides da apresentação:

Categories: Uncategorized Tags:

Ruby + Rails no Mundo Real 2010 – Eu fui

June 4th, 2010 David Paniz No comments

Assim como no post do Rails Summit 2009 eu ia começar o post com uma resenha do evento, mas acho que os posts do Marcelo Castellani e do Rodrigo Ribeiro já atacaram todos os pontos e não tenho mais nada a acrescentar a não ser os meus parabéns e meus agradecimentos a todos os envolvidos.
Fotos do evento podem ser vistas no album do GURU-SP

Sobre a minha palestra com o Leonardo Bessa, infelizmente demos uma atrasadinha na primeira metade da palestra e não conseguimos falar de tudo o que queríamos, mas pelo feedback que tivemos acredito que os presentes gostaram e aprenderam. O que não deu tempo de falar no dia com certeza vai virar post aqui no futuro. Para os que não puderam ir, felizmente o pessoal da organização gravou o evento e o vídeo da nossa apresentação pode ser visto aqui:

Para aqueles que foram ou apenas viram o vídeo, aqui estão os slides da palestra:

E aqui o código gerado durante a apresentação:

class Picapau
  def voa
    "voando..."
  end
  def anda
    "andando..."
  end
end

woody = Picapau.new
amigo = Picapau.new
#
# woody.voa
# amigo.voa
# woody.anda
# amigo.anda
#
# def woody.hehehe
#   p "hehehe-hehehe-hehehehehe"
#
# end
#
# woody.hehehe
#
# # amigo.hehehe
#
#
# p woody.class
# p amigo.class

# p woody.class == amigo.class

class Object
    def singleton_class
      # p self
      class << self
        # p self
      self
      end
    end
end

# p woody.singleton_class
# p amigo.singleton_class
# p amigo.singleton_class == woody.singleton_class
# 

# class Picapau
#   alias :metodo_voa :voa
#   def voa(param='')
#     result = metodo_voa(param)
#     p "Chamando metodo voa com #{param.inspect} retornou #{result.inspect}"
#     result
#   end
# end

#
# class Picapau
#   def self.log(metodo)
#     metodo_velho = self.instance_method(metodo)
#     define_method(metodo) do |*arg|
#       result =  metodo_velho.bind(self).call(arg)
#       p "Chamando metodo voa com #{arg.inspect} retornou #{result.inspect}"
#     end
#   end
#   log :voa
# end

#
# class Picapau
#   def self.log(*metodos)
#     metodos.each do |metodo|
#       metodo_velho = self.instance_method(metodo)
#       define_method(metodo) do |*arg|
#         result =  metodo_velho.bind(self).call(arg)
#         p "Chamando metodo voa com #{arg.inspect} retornou #{result.inspect}"
#       end
#     end
#   end
#   log :voa, :anda
# end

module Logger

  def log(*nome_do_metodos)
     nome_do_metodos.each do |nome_do_metodo|
       metodo_velho = self.instance_method(nome_do_metodo)

       define_method(nome_do_metodo) do
         result = metodo_velho.bind(self).call
         p "Chamando metodo #{nome_do_metodo} e retornou #{result}"
         result
       end
     end
   end
end

module Andador
  def anda2
    p "novo metodo que anda"
  end
end

class Picapau
  extend Logger
  include Andador
  log :voa, :anda
end

woody.voa
woody.anda
woody2 = Picapau.new
woody2.anda2
Categories: Palestras / Apresentações, Rails, Ruby Tags:

Ainda estou vivo

April 22nd, 2010 David Paniz No comments

Pois é pessoal, estou há alguns meses sem dar as caras por aqui, mas não estava parado! Antes de mais nada me desculpem pela sumida, mas como já falei, andei trabalhando, e muito, nesses meses que não escrevi aqui. Durante esses meses escrevi para o infoq.br sobre o lançamento do Flex 4. Esse mesmo artigo com a revisão dos meus amigos Cecilia Fernandes e Luiz Fernando Oliveira Corte Real, ambos autores do Vida Geek, foi o primeiro post da infoq.br a ser publicado na infoq internacional desde que a Caelum cuida do portal.
Ainda sobre Flex, no último mês escrevi um post sobre teste de unidade em ActionScript no blog da Caelum e tivemos uma grande surpresa, que nos deixou muito orgulhosos, ao receber um comentário do criador do FlexUnit no post!
Além desses textos publicados, nos meses de dezembro e janeiro finalizei o meu TCC da pós-graduação e finalmente estou oficialmente formado!
No começo do mês eu e minha esposa arrumamos um cachorro pro nosso apartamento também. Aparentemente não é nada de mais, mas o filhotinho consome muito mais tempo do que imaginei.

Sobre o futuro, no dia 29 de maio estarei palestrando junto com o Leonardo Bessa no Ruby + Rails no mundo Real. Vamos falar, novamente, sobre Metaprogramação em ruby, mas dessa vez temos 1h e com certeza vamos ainda mais fundo nesse assunto.
Já tenho alguns posts em draft e em breve devo voltar a média de pelo menos 1 post por mês.
Até o próximo post!

Categories: Uncategorized Tags:

coalesce – o nvl do hibernate

December 21st, 2009 David Paniz 1 comment

Mais uma dica rápida e dessa vez não é sobre o git!
Uma funcionalidade relativamente bastante usada, principalmente em relatórios, é substituir dados nulos por algum valor padrão. Por exemplo, dada a seguinte tabela (Usuario) quero um select que liste os nomes dessa maneira: “David Paniz”, “Anonimo”.

Id Nome
1 ‘David Paniz’
2 null

Cada banco tem sua solução para esse problema. No oracle usamos a função nvl

select nvl(nome, 'Anonimo') from User

No mysql temos a ifnull

select ifnull(nome, 'Anonimo') from User

Para resolver o problema no Hibernate temos a função coalesce no hql

//Isso é HQL
select coalesce(nome, 'Anonimo') from User