Caelum | Ensino e Inovação - Cursos de Java, Scrum, Ruby on Rails


Screencast: Sinatra e DataMapper

Por Anderson Leite em 24/02/10

Ruby on Rails é o framework Ruby para web mais utilizado atualmente, mas não é o único. Existem casos de aplicações web escritas em Rails, como o Gemcutter, onde outros frameworks usados em conjunto podem ser uma melhor opção para determinada parte do projeto.

sinatra Um outro framework Ruby que vem chamando muita atenção é o Sinatra, uma DSL em Ruby sobre o Rack.

Com relação a frameworks de ORM, para persistir no banco de dados, em vez do ActiveRecord podemos usar o DataMapper, que inclusive será de fácil configuração no Rails 3.

Esse screencast é um pequeno tutorial de como usar o Sinatra integrado com DataMapper para fazer um cadastro de textos no MySQL.

Sinatra e DataMapper no Vimeo da Caelum

Esse assunto é visto com mais detalhes no curso de Ruby on Rails avançado da Caelum e o código pode ser baixado no github/sinatra_datamapper.

  • Share/Bookmark

Metaprogramação em Java? O papel do APT.

Por Paulo Silveira em 08/12/09

Em 2004, com o lançamento do Java 5, muitas novidades entraram pra linguagem. As anotações são um recurso hoje fundamental, que utilizamos como metadados. O Hibernate, junto com a JPA/EJB 3.0, popularizaram muito o uso das anotações para afetar o comportamento em tempo de execução do framework em relação às suas classes anotadas.

Em linguagens dinâmicas isso vai além. O Ruby utiliza muito metadata, até mesmo para gerar acessores e modificadores de atributos em tempo de execução:

class ContaPagar
  attr_accessor :descricao, :valor, :data
end

Como poderíamos fazer um exemplo simples desse em Java? Infelizmente não é algo trivial como o uso de anotações feito pelo Hibernate/JPA, pois, mesmo usando manipulação de bytecode, não adianta gerar os getters ou setters em tempo de execução, já que não conseguiremos utilizá-los pela característica de tipagem estática da linguagem. Precisaremos usar uma abordagem em tempo de compilação.

O JAX-WS utiliza bastante de anotações para a geração de código cliente dos webservices através de duas feramentas: o wsimport para trabalhar com WSDL e o Annotation Processor Tool (APT) para trabalhar com código fonte Java. Através do APT, incluso apenas como ferramenta no Java 5, você pode criar Processadores de anotações que são acionados pelo APT e podem gerar novos códigos Java.

O Java 6 leva o APT para um outro nível: além de fazer parte da API (não apenas uma ferramenta com.sun) agora é possível que um Processor sejá executado pelo próprio compilador, sem a necessidade de executá-lo a parte. Para isso, basta que exista um jar no seu classpath que contenha o arquivo javax.annotation.processing.Processor dentro de META-INF/services, fazendo com que os processadores lá citados sejam executados a cada compilação, possivelmente gerando novo código Java.

Onde isso é útil?

Um dos aguardados recursos da JPA 2.0 no Java EE 6 é o sistema de Criteria parecido com o do Hibernate, que pode ser agora utilizado de uma maneira typesafe sem o uso de Strings. Como iremos nos referenciar à um atributo de uma classe sem String? Para uma classe, sabemos que podemos escrever NomeDaClasse.class, e um Class<NomeDaClasse> carregado pelo mesmo classloader será retornado.

Apesar de ser um dos 25 recursos mais pedidos pela comunidade, o Java não possui suporte para literais de construtores, métodos e atributos. Isso é, se quero pegar uma referência para um Method que tenho certeza absoluta que existe, preciso de qualquer forma utilizar a API de reflection e lidar com as checked exceptions e diversos passos necessários. Uma forma de contornar isso e fazer a Criteria typesafe da JPA 2.0 ser viável foi o uso do StaticMetaModel.

Imagine que para a classe ContaPagar a seguir:

@Entity
public class ContaPagar {

  @Id
  @GeneratedValue
  private int id;

  private String descricao;

  private Double valor;

  @Temporal(TemporalType.DATE)
  private Calendar data;

  @ManyToOne
  private Fornecedor fornecedor;

  private boolean pago;

  // metodos
}

Precisaríamos criar uma classe paralela, a ContaPagar_, que contém atributos estáticos que de certa forma representam os atributos persistidos da nossa entidade JPA:

@StaticMetamodel(ContaPagar.class)
public abstract class ContaPagar_ {

  public static 
    volatile SingularAttribute<ContaPagar, Integer> id;
  public static 
    volatile SingularAttribute<ContaPagar, String> descricao;
  public static 
    volatile SingularAttribute<ContaPagar, Double> valor;
  public static 
    volatile SingularAttribute<ContaPagar, Calendar> data;
  public static 
    volatile SingularAttribute<ContaPagar, Fornecedor> fornecedor;
  public static 
    volatile SingularAttribute<ContaPagar, Boolean> pago;
}

Daria um certo trabalho manter a estranha classe ContaPagar_ atualizada de acordo com toda modificação na classe ContaPagar. A solução é utilizar um gerador de código, e esse gerador é um processador do APT, que será invocado toda vez que o javac rodar (no Eclipse é necessário ativar o APT). O Hibernate 3.5-beta2 já disponibiliza esse gerador (mas com limitado suporte ao Criteria do JPA2), assim como o EclipseLink. Dessa forma podemos selecionar o atributo valor de todas as ContaPagar, com garantia de tipos através de ContaPagar_.valor:

CriteriaBuilder cb = manager.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(Double.class);
Root cpagar = cq.from(ContaPagar.class);
CriteriaQuery select =
	cq.select(cpagar.get(ContaPagar_.valor));
return this.manager.createQuery(select).getResultList();

Se isso é uma vantagem ou não, é outra discussão: alguns dizem que esse ganho de tipagem forte na Criteria não compensa a quantidade de código extra, além de que seus testes unitários pegariam erros no caso de String erradas. Diferente do que parece a primeira vista, o código não é refatorável da maneira clássica: renomear o atributo valor para valorTotal vai gerar um novo atributo ContaPagar_.valorTotal, mas quem se referenciava ao atributo com nome antigo não será refatorado, pois refatoramos o nome do modelo, e não do metamodelo. As ferramentas devem evoluir para conseguir lidar com casos como esse.

Mas seria essa metaprogramação tão poderosa quanto a do Ruby, onde métodos são inclusos na classe de acordo com o uso de metadados (como o attr_acessor)?

O Sérgio Lopes e o Nico Steppat da Caelum me apresentaram ao lombok, um processador do APT que, através de recursos da API não pública da JVM da Sun, gera código na própria classe que está sendo compilada:

meta programação com Java e APT

À esquerda um código que não possui métodos, à direita uma surpresa: o outline do Eclipse acusando a exitência de métodos no bytecode dessa classe.



Com isso podemos gerar métodos em tempo de compilação que podem ser acessados pela sua IDE, fornecendo até mesmo code completion! Isso abre caminho para recursos que se assemelham aos mixins, e com tipagem estática, e ao mesmo tempo para prejuízos parecidos com os do monkey patching. A força de uma linguagem mais dinâmica permitiu a criação do grails com recursos similares aos de ActiveRecord do rails, onde – no caso do rails – atributos do banco podem ser acessados diretamente sem requerer a declaração no modelo.

O APT abre caminho para implementações similares na plataforma Java usando a própria linguagem, alguém poderá em um futuro próximo adicionar os getters e setters necessários para seu modelo baseado na engenharia reversa de tabelas, relacionamentos e configurações, como o Rails faz, mas com algumas limitações. Há também a questão de que se isso é útil para uma linguagem como Java.

  • Share/Bookmark

Apostila de Ruby on Rails RR-71 liberada para download

Por Anderson Leite em 02/12/09

ruby on rails rr-71Muito aconteceu envolvendo Rails em 2009, e agora temos até Tribunais de Justiça e grandes empresas adotando-o no Brasil. Considerar o Ruby on Rails para um projeto significa estar aberto a novos paradigmas e fornecer novas opções ao desenvolvimento de software, analisando sempre os trade-offs entre as diferentes plataformas para cada problema. E há ainda a opção de rodar tudo isso sobre a Java Virtual Machine.

Há mais de dois anos criamos nosso curso de Rails, e agora, depois de passado algum tempo desde sua terceira reformulação, estamos disponibilizando o material utilizado para toda a comunidade, seguindo a tradição da Caelum em compartilhar conhecimento. Você pode fazer o download dela já! São quase 150 páginas para te auxiliar no aprendizado do Rails.

A apostila cobre itens de Ruby desde o básico da linguagem até meta programação, conhecimentos necessários para utilizar o Rails, onde estudamos partes importantes como Active Record, rotas, Ajax, paginação e integração com Java.

ruby on rails Esse ano mostrou também um fortalecimento das comunidades de Ruby e de Rails no Brasil.  O GURU-SP organizou seu primeiro evento, o Ruby e Rails no mundo real, além de outros encontros entre os membros. O nordeste também está bem ativo na comunidade organizando eventos como Oxente Rails e Ceará on Rails. Isso tudo sem falar em mais uma edição do Rails Summit Latin America com personalidades importantes como Chad Fowler, David Chelimsky, Gregg Pollack e muitos outros. Uma comunidade vibrante, a quem só podemos agradecer.

Além dessa apostila, você pode fazer download de diversas outras na página de apostilas da Caelum. Não deixe de conhecer os cursos de rails da Caelum, inclusive o avançado RR-75.

  • Share/Bookmark

Screencast Ruby on Rails: Introdução a RSpec e Cucumber

Por Anderson Leite em 15/10/09

screencast Ruby on Rails: Introdução a RSpec e Cucumber

TDD e BDD são assuntos amplamente difundidos entre a comunidade ágil, especialmente entre quem usa Ruby on Rails. Aproveitando o fim do Rails Summit, gravamos este screencast sobre o assunto que é amplamente discutido no nosso novo curso RR-75 sobre Rails avançado, junto com buscas textuais, integração com Web Services, escalabilidade, etc.

Esse vídeo introdutório sobre RSpec e Cucumber é voltado para quem já conhece Ruby on Rails e quer evoluir seus conhecimentos em direção a estas boas práticas do mercado.

Outros eventos sobre Ruby on Rails vem por aí: em Novembro a Caelum realizará o CaelumDay no Rio de Janeiro com palestra sobre o assunto e também está apoiando o Ceará on Rails, dia 7 de novembro.

O screencast tem 12 minutos de duração e você pode assiti-lo aqui ou no vimeo. Recomenda-se colocar no fullscreen, pois há código. Também é possível fazer o download do vídeo (32 mb) para uma visualização em alta resolução.

  • Share/Bookmark

A Trinca de Ases do programador Rails

Por Anderson Leite em 25/08/09

O que era uma aposta está virando cada vez mais realidade. Ruby on Rails, que já era muito forte lá fora, atualmente está fazendo bastante barulho em terras brasileiras. Uma série de artigos em revistas, inúmeros posts em blogs, diversas empresas adotando e vagas de empregos pipocando nos sites especializados. Nosso núcleo de Ruby on Rails na Caelum (composta essencialmente de bilingues javeiros) tem recebido cada vez mais demanda tanto nos projetos internos quanto em consultoria, sem falar nas turmas que vem lotando tanto na unidade de São Paulo quanto no Rio de Janeiro (veremos em Brasília!). Esses foram motivadores da criação da nossa nova Formação Rails.

No começo do ano o Fábio Kung disse que 2009 seria o ano do Ruby on Rails no Brasil, e ao que tudo indica isso vem se tornando realidade. Rails é um framework poderoso e mesmo que você não pense em trocar de linguagem agora, vale muito a pena conhece-lo. Ele vem influenciando a forma de desenvolver software para a web em várias linguagens, repetindo os conceitos inovadores do Rails.

Ao realizar cursos conosco, ou até mesmo antes, muitos nos perguntam: Por quais livros devo continuar meus estudos? Existem muitos bons livros sobre Rails, principalmente em inglês. No Brasil, há quase 3 anos atrás, o Fabio Akita foi pioneiro e lançou o primeiro livro de Rails brasileiro, chamado Repensando a Web com Rails. Um pouco antes, Eustáquio Rangel (TAQ) havia lançado seu livro Ruby. Conhecendo a Linguagem. Recentemente, Rodrigo Urubatan lançou seu livro, que já cobre a versão mais nova de Rails. Lá fora existem diversos bons livros como Design Patterns in Ruby, Rails Recipes, Programming Ruby e o ainda em beta The RSpec Book: Behaviour Driven Development with RSpec, Cucumber, and Friends. Repare que eles abordam bastante de TDD, BDD e da linguagem Ruby em si, que são fundamentais para o bom programador Rails.

São muitas possibilidades para começar a ler, então escolhemos aqui três livros que consideramos excelentes para a sua formação:

Agile web development with rails Agile Web Development with Rails

Um livro excelente pra começar já colocando a mão na massa. O livro é dividido em duas partes. A primeira parte é um tutorial passo a passo, passando pelas partes importantes como MVC, ActiveRecord, Routes, ERB, etc.Ruby on Rails se encaixa perfeitamente na filosofia de métodos ágeis e o livro segue nessa linha, criando um projeto a partir de iterações e mudanças de escopo ao logo do projeto. A segunda parte serve tanto como refêrencia quanto material de estudo das partes citadas no início do livro. Procure pela terceira edição que cobre a versão mais atual do Rails.

Ruby for RailsRuby for Rails

Depois de aprendido sobre Ruby on Rails, você naturalmente sentirá a necessidade de aprimorar suas qualidades
no código Ruby. Rails é o framework e Ruby é a linguagem de programação que você escreverá código, portanto
em algum momento você precisará fazer coisas complexas que necessitarão conhecimento mais aprofundado da linguagem. O livro Ruby for Rails foca nesse ponto ensinando as características principais da linguagem, o que significa trabalhar com uma linguagem de tipagem dinâmica, como usar estruturas de controle, módulos, escopos de variáveis entre outros.

The Rails WayThe Rails Way

Depois de adquirido um bom conhecimento de como Ruby on Rails funciona, o melhor é se aprofundar no framework seguindo a expêriencia que experts já passaram. O livro The Rails Way escrito por Obie Fernandez, um dos principais programadores do Ruby on Rails, apresenta diversas situações para programadores que querem alavancar seus conhecimentos em Rails. O livro cobre partes avançadas de ActiveRecord, Ajax e Rest.

Ruby on Rails vem se tornando cada vez mais realidade, e é umá ótima ferramenta para projetos web, além de poder aproveitar da plataforma Java através do JRuby. Se Ruby on Rails vai tomar algum significativo espaço hoje ocupado por Java ou C# não sabemos, mas não é essa a preocupação a que você deve se ater. Ruby on Rails veio para ser uma alternativa forte, simples e agradável de desenvolver software web, e hoje já é realidade.

  • Share/Bookmark



Caelum | Ensino e Inovação
São Paulo: Rua Vergueiro, 3185, cj. 87, próximo ao Metrô Vila Mariana   |   Tel. (11) 5571-2751
Rio de Janeiro: Rua Senador Dantas, 80, cj. 307/308 - Centro   |   Tel. (21) 2220-4156 ou 2297-0033
Brasília: SCS Qd. 8 Bl. B-50, Sala 521 - Ed. Venâncio 2000   |   Tel. (61) 3039-4222