Esse final de semana estive no evento Dev In Sampa e gostei muito das palestras. Principalmente o fato de rever amigos e trocar informações com o pessoal da comunidade.
O @josevalim fez uma apresentação muito interessante sobre classificação de textos.
O @rodrigoy deu uma boa aula de design de software e técnicas importantes de desenvolvimento de software. E ressaltou que técnicas de agilidade como TDD , BDD e CI são esquecidas por muitas equipes.
@rferraz mostrou ter muitos conhecimentos em linguagens de programação e explicou como criar sua própria linguagem.
João Bueno fez uma palestra de jogos em Python e mostrou alguns demos e bastante código.
@lfcipriani fez a apresentação de uma aplicação em tempo Real que usa Ruby e XMPP para marcar pontuação de jogos de Basquete.
@fnando mostrou como testar com Jspec, um “rspec way” para javascript.
O Radamés fez uma ótima apresentação com sobre Arduino, e mesmo com os problemas nos slides mostrou muito bom humor e improviso. Ele fez a galera rir bastante.
E para finalizar o @fabiokung fez mais uma ótima apresentação sobre Cloud Computing, mostrando uns vídeos bem ingraçados de pessoas metralhando servidores porque agora a solução é Cloud!
Minha palestra foi sobre “Buscas poderosas com Solr”. Os slides estão disponíveis aqui:
Para mais informações sobre o acts_as_solr_reloaded vejam esse post aqui e esse do Diego Carrion.
Quero agradeçer mais uma vez o pessoal da Abril, a Gonow, o Diego Carrion e o Renato Elias por fornecer algunas informações do case deles no Apontador.
Dia 28 de setembro estarei palestrando no Dev in Sampa e vou falar de buscas com Solr em Ruby on Rails. As palestras estão bem legais e o evento custará 35 reais. São apenas 100 vagas, então assim que abrir a inscrição corram para confirmar presença.
Gravei um screencast com o Diego Carrion, que explicou mais detalhes nesse post. Iremos melhorar esse vídeo para aumentar a fonte, mas para não ficarem muito curiosos a gente já está liberando o link.
O Solr é um projeto open source da apache e é baseado no Lucene para engine de busca. O Solr faz buscas via XML/HTTP e API JSon e possui funcionalidades de facets, cache, replicação, uma interface de administração web, etc.
O Diego fez um fork do plugin ActsAsSolr e criou o ActsAsSolrReload, já com uma configuração para fazer buscas de geo-localização e buscas com relevância.
Estive na apresentação de Glenn Vanderburg, no QCon London 2009, que falou sobre o Estado da Arte da DSL em Ruby. A apresentação e os slides você pode conferir aqui no site da infoq.
A idéia de fazer uso de uma DSL interna originou-se aparentemente no Lisp. Em Lisp você não escreve seu programa apenas direcionado na linguagem, você também constrói a linguagem em cima do seu programa:
(task “warn if websites is not alive ”
every 3 seconds
starting now
when ( not (website-alive? “http://example.org”))
then (notify “admin@example.org”, “server down!”))
)
DSL interna também foi um objetivo de design do Haskell
keepleft (p :>: ps)
| keepleft p = case partitionFL keepleft ps of
a :> b -> p:>: a :>: b
| otherwise = case commuteWhatWeCanFL (p :> ps) of
a :> p’ :> b -> case partitionFL keepleft a of
a’ :> b’ -> a’ :> b’ +>+ p’ :>: b
Agora falando em Ruby, uma das principais características da linguagem é a expressividade. O japonês Yukihiro Matsumoto (Matz), criador da linguagem, sempre teve como objetivo fazer o ruby extremamente legível. Para atingir esse objetivo a linguagem tem o recurso conhecido como “Sintax Sugar”. A performance da linguagem não foi o objetivo inicial, e sim a clareza. Por isso o ruby é uma linguagem mais lenta. Entretanto agora com a adoção maior nos projetos de mercado direcionados a web, a preocupação com performance cresceu e o resultado disso foi o recente release da versão 1.9.1 do ruby, com resultados impressionantes de performance.
Deixando a performance de lado e voltando à DSL, em um projeto Rails você pode fazer as seguintes associações em uma classe model:
validates_length_of :login, :within => 3..40, on => :create
validates_presence_of :authority, :if => :in_leadership_role, :message => “must be authorized for leadership”
Fica claro e limpo que o modelo tem uma associação a duas coleções (favorites e roles), e validações ficam explícitas no próprio model. Outro exemplo usado na apresentação citada acima:
#Um intervalo de tempo:
3.years + 13.days + 2.hours
# Quatro meses de agora, na segunda_feira
4.months.from_now.next_week.monday
Muita coisa é possível fazer no ruby por causa do “method_missing” que existe nos objetos. Por exemplo, você pode sobrescrever esse método e incluir um código como esse:
def element(element_name, opts={})
write “<#{element_name}#{encode_opts(opts)}”
if block_given?
puts ”>#{yield}”
else
puts “/>”
end
end
E o resultado disso pode ser fazer uma manipulação simples de html:
Outro exemplo que eu adoro é o uso de Active Record do Rails. Graças ao “method_missing” podemos fazer uso de métodos que não existem, como por exemplo:
Na linha acima o Active Record vai trazer todos gerentes ordenados pelo nome.
Ruby é uma linguagem muito boa para escrever DSL internas por ser uma linguagem não-obstrusiva e permite que muitas pontuações sejam opcionais. Porém, DSL não faz o seu software magicamente melhor e devem ser usados com precauções. Nem sempre o código fica mais limpo com esse uso.
Glenn fala sobre a complexidade do software e a indicação do famoso livro de DDD do Eric Evans, e do livro The Mythical Man-Month.
Um bom design de software:
Elimine tudo que possível da complexidade acidental
Separe o resto
Outras frases muito interessantes dessa apresentação:
Linguagens são para pessoas entenderem o domínio
Coisas que são implícitas na verdade são complexidades acidentais
Aprender a linguagem ajuda a entender o domínio
Um bom design de API:
Criar uma DSL para determinada construção é poderoso
Você pode refatorar ela quando achar duplicação, complexidade, etc
DSL interna é apenas uma parte do bom design da API no Ruby
Estive no evento Rails Summit e foi espetacular. Muito parabéns para a Locaweb, o Fábio Akita e todos que se esforçaram para fazer desse evento um sucesso! Inclusive a blogosfera que ajudou a divulgar o maior evento de Rails da América Latina.
As palestras foram excepcionais e pretendo comentar sobre elas mais tarde. Portanto vou falar sobre outros acontecimentos.
Com um bando de nerds reunidos em salas lotadas, só poderia acontecer uma coisa: o surgimento de um novo projeto Open Source chamado morena_opensource. Esse projeto surgiu por causa das modelos contratadas pela Locaweb que desviavam nossas atenções. Não demorou e o pessoal começou a comitar as fotos no projeto criado no GitHub.
Outra coisa muito legal foi que estava todo mundo twittando durante as palestras e eu também twittei. E graças ao palestrante Manoel Lemos (criador do BlogBlogs e da Brasigo), tudo o que se escrevia sobre o #railssummit ficou centralizado no LiveStream do Rails Summit.
Hugo, André Faria, Akita e eu.
No final do evento fizemos um Happy Hour num restaurante Japonês, junto com alguns palestrantes internacionais, tudo em ritmo do Hino Nacional Brasileiro.
O primeiro da direira é o Fabio Akita, principal responsável pela organização do evento.
Destaque nessa foto para o Dr Nic, vestindo a camiseta da Seleção Brasileira.
Juan, eu e Akita
O Carlos Brando disponibilizou o video que o pessoal engraçado do Rails Envy fez para o Summit. Veja aqui.
O Luiz da Bluesoft comentou sobre o primeiro e segundo dia de evento.
Antes de falar sobre o Rails eu quero falar do Java, porém a intenção desse post não é causar nenhuma flame sobre essas duas tecnologias, mas apenas fazer um breve comparativo e expressar minha opinião sobre o assunto.
O Java é uma plataforma muito poderosa não só por causa da linguagem. A linguagem permite Orientação a Objetos, porém ainda são desenvolvidos muitos sistemas completamente estruturados no Java. A Java Virtual Machine (JVM) é umas das melhores coisas da plataforma, pois por causa dela uma aplicação acaba se tornando mais rápida do que se fosse desenvolvida em outras linguagens, como por exemplo a linguagem C. Isso acontece graças ao JIT que, com a ajuda dos Hotspots, tem um algoritmo poderosíssimo que transforma códigos do java em linguagem de máquina em runtime. Isso não acontece no C pois ao ser gerado o executável não dá mais para alterá-lo em tempo de execução.
Depois que o Java virou moda muitas aplicações foram migradas para Web utilizando essa linguagem da Sun. Assim como outras aplicações Web, escritas em PHP, ASP, Perl, também foram migradas. E para todas as novas aplicações, sejam elas grandes ou pequenas, a única coisa que vinha na cabeça das pessoas era fazer tudo em Java.
“Com apenas uma ferramenta para trabalho, o martelo, todos os problemas viram pregos”
Porém em meados de 2000 a 2002 o java não tinha nenhuma padronização de trabalho para a Web. Não havia padronização de framework e nem de estrutura de pastas. Apenas os velhos conhecidos WEB-INF e META-INF e só. Aconteceu que cada projeto era uma aventura difetente, e se mudasse de projeto teria que reaprender tudo de novo. Por causa dessa falta de padronização surgiram framworks como o Struts e o Hibernate. Na época o Struts até que facilitou pois é melhor do que não usar nada. Porém hoje ninguém é louco de fazer algo com Struts pois já existem frameworks MVC muito mais simples e produtivos. Já o Hibernate é um excelente projeto e continua cada vez mais evoluindo.
Hoje existe a comunidade JCP onde muitos profissionais de renome do mundo todo discutem sobre o futuro do Java. Isso é bom por um lado pois eles entram em acordo para definir o que será padronizado, porém muito processo acaba que retardando o crescimento do Java.
Comendo pelas beiradas, surgiu o Ruby on Rails. Um framework totalmente pensado para o desenvolvimento Web, através da linguagem Ruby. O Rails juntou a padronização e produtividade com a simplicidade e expressividade do Ruby. O Ruby é uma linguagem dinamicamente tipada, totalmente Orientada a Objetos e também pode ser usada como lingagem de “scripting” (não gosto muito desse termo). O Rails, ao contrário do Java, vem crescendo com uma velocidade espantosa. Quem quiser ficar por dentro desse crescimento o blog do Carlos Brando é um ótimo caminho.
Hoje em dia muitas Empresas estão adotando Metodologias Ágeis, e se tratando de Time-to-Market, o Rails sai muito na frente do Java. Por isso um time que trabalha com Rails + Git tem muito para ser verdadeiramente ágil. As empresas no Brasil que usam Rails ainda são muito poucas comparado à quantidade de empresas exterior. E por que não usar Rails na sua Empresa contando que o Rails também é Enterprise? Em Abril de 2008 e Junho de 2008, Phusion Passenger e Ruby Enterprise Edition, respectivamente, foram liberados. Phusion Passenger é um servidor de aplicação para Ruby on Rails no Apache e quando combinado ao Ruby Enterprise Edition, permitem que o servidor faça muitas técnicas de otimização e possibilitando a aplicação escalar melhor.
A linguagem Ruby pode ser usada junto ao Java utilizando o JRuby, unindo a produtividade do Ruby com todo o poder da plataforma Java. O Fábio Kung escreveu esse post e vai falar sobre JRuby on Rails no Evento Rails Summit.
E para nossa diversão o pessoal da Rails Envy fez esse screencast aqui: