Dev In Sampa – Retrospectiva

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 @guilhermecaelum e @adrianoalmeida7 falaram da importância de conhecer bem o protocolo HTTP e seus verbos.

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.

Outros posts sobre o assunto:
http://blog.plataformatec.com.br/2009/11/classificacao-de-textos-no-dev-in-sampa-2009/
http://www.rubyinside.com.br/cobertura-do-dev-in-sampa-2009-2536

Vídeos estão disponíveis aqui:
http://agaelebe.blip.tv/

Fotos do Evento:
http://www.flickr.com/photos/devinsampa

Dev in Sampa


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.

Plugin ActsAsSolrReload para o Rails

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.

Confiram o screencast nesse link

O Estado da arte da DSL em Ruby

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:

has_many :favorites, :conditions => {:state => ‘public’}

has_many :roles, :through => :projects, :uniq => true

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:

xml.html {
  xml.head{
    xml.title(“History”)
  }
  xml.body{
    xml.h1(“Header”)
    xml.p(“paragraph”)
  }
}
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:

Funcionario.find_by_nome_and_cargo( "Fulano", "Gerente")

E ainda fazer uso de Named Scopes:
Funcionario.gerente.pelo_nome

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



Publicado em linguagens, QCon, rails. Tags: , . Leave a Comment »

Rails Summit – Eu Fui!

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.

Para ver mais fotos clique aqui.

Foi muito bom encontrar ou conhecer o pessoal no evento. Segue alguns nomes:

Anderson Vaz, André FariaBruno CarvalhoBruno PedrosoCarl YoungBloodCarlos BrandoDanilo SatoElomar FrançaFábio AkitaFábio KungGeorge GuimaraesGuilherme ChapiewskiHenrique BastosHugoJuan BernabóLeandro SilvaLuiz Faias JrMauricio LealPhillip CalçadoRafael LimaRenato WilliRodrigo YoshimaTony FabeenVinicius Teles.

Publicado em eventos, rails. 1 Comment »

Comendo pelas Beiradas (Rails)

Rails Summit Latin America

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:

Publicado em rails. Tags: , , . 2 Comments »