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



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.

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 Comentários »
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.