É 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:
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
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!
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