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


Lançado Rails 3 – e apostila atualizada para download

Por David Paniz em 02/09/10

Depois de dois anos de trabalho da junção do Merb com o Rails, saiu nesse fim de semana a versão final do Rails 3. E, para comemorar, a Caelum acaba de liberar a apostila atualizada do curso RR-71 Ruby On Rails 3 para download.

Rails 3

Entre as principais novidades, temos a nova API de query do ActiveRecord (ARel), a nova sintaxe para definição de rotas, o unobstrusive JavaScript para desacoplamento do prototype como biblioteca padrão, além de melhorias no ActionController e ActionMailer. Mas a principal mudança nessa nova versão é seu agnosticismo, agora é possível substituir partes do Rails por outros frameworks de sua preferencia sem precisar sofrer como antigamente e quem escreve essas outras opções não precisa mais fazer hacks e código de difícil manutenção, tornando o Rails um verdadeiro ecossistema.

Por exemplo, o ARel nos provê uma nova maneira de montarmos as queries através de uma DSL mais elegante que os finders do Rails 2, e também possibilita adicionarmos filtros extras a uma query já existente como no exemplo abaixo:

juridicas = Cliente.where(:tipo => "PJ").order("nome")
inativos = juridicas.where(:ativo => false)

Para a nova definição de rotas, o Rails 3 traz diversas melhorias de sintaxe, entre elas, na declaração das rotas nomeadas:

match 'cadastro', :controller => 'usuarios', :action => 'new'
# se acessar /cadastro vai para a action 'new' no usuarios_controller, mas não cria os helpers

match 'cadastro', :controller => 'usuarios', :action => 'new', :as => 'rota_cadastro'
# se acessar /cadastro vai para a action 'new' no usuarios_controller, mas agora ganhamos os
# helper_methods rota_cadastro_path e rota_cadastro_url

Se você ainda não conhece Rails, e quer começar já por essa nova versão, baixe agora a apostila do curso RR-71 de Ruby on Rails, que foi reformulada durante esses últimos meses acompanhando todas as mudanças no framework. Está liberada a versão da apostila beta. Envie seus comentários e sugestões!

  • Share/Bookmark

Últimos aprendizados e inovações na Caelum

Por Anderson Leite em 27/05/10

Inovação é parte fundamental da missão da Caelum. E, como uma empresa de treinamentos, Ensinar e Aprender são nosso dia a dia. Muitos nos perguntam o que devem estudar no seu tempo livre, onde devem investir. A Caelum tem seguido várias linhas e iniciativas que eu gostaria de apresentar nesse post.

De tempos em tempos, temos na Caelum um tech day interno onde cada um apresenta o que tem estudado e aplicado nos projetos e nas aulas. O último encontro aconteceu nesse mês de maio e trouxe muitas novidades com testes, métodos ágeis, web, linguagens dinâmicas, estruturas de dados, cloud e mais.

Guilherme Silveira falou sobre SOA versus REST, recapitulando REST e fazendo comparações com o objetivo de ajudar nas escolhas de quando usar ou não as tecnologias. Mostrou um pouco de seus últimos experimentos com hypermedia e code on demand.

O Lucas Cavalcanti e o Caires Vinicius apresentaram a palestra Shoulda stay or shoulda go?, mostrando pontos positivos e negativos da utilização do Shoulda em um projeto Ruby on Rails que passaram enquanto estavam em um projeto de consultoria da Caelum. Ainda em Rails, David Paniz e Pedro Matiello apresentaram Aerotrem: Colocando sua app Rails no ar. Eles mostraram como manter, de maneira fácil, várias VMs ruby na mesma máquina. Foram além e fizeram o HAProxy balanceando dois servidores Web, além de mostrar como fazer o deploy sua aplicação no cloud da Amazon via o Heroku.

O Paulo Silveira apresentou Tudo que você sempre precisou saber sobre Hash e um pouco mais. Paulo mostrou como funciona um Hash, mostrou algumas implementações em Java e como funções de hash ruins podem impactar sua tabela além de um truque que o Yahoo! usou para melhorar seu filtro de Spam.

Sérgio Lopes e Alberto Souza apresentaram técnicas para deixar mais rápido o carregamento das páginas Web, seguindo as diretrizes do YSlow do Yahoo!. Mostraram algumas das métricas usadas e truques para atingi-las com ferramentas Java e usando recursos do Google AppEngine. Ainda com relação à Web client-side, eu – Anderson Leite -, Pedro Mariano e Caires Vinicius falamos sobre as novidades do HTML 5. Alguns browsers já possuem implementações do draft atual e muitas mudanças estão sendo consideradas para essa nova versão. Entre ela as tags audio e video, a nova API Geolocation, novas tags semânticas, novos input types, cache e web storage, e a tag canvas para desenho 2d. Veja um demo de canvas e a nova JS API:

A Cecilia Fernandes apresentou Do Scrum ao Lean, com os próximos passos a serem tomados para uma equipe ir do Scrum ao Lean, vantagens, desvantagens e um exercício prático para enxergar a diferença entre a produção empurrada e puxada, alem da variação sem especialização do conhecimento.

Além de todas essas palestras no nosso Tech Day, muitos outros temas têm feito parte do dia a dia de estudo e inovação da Caelum. Estamos apostando fortemente no Android para o mercado Java Mobile, nas novidades do Java EE 6 para simplificar o Java corporativo (como JPA2 e JSF2) e em novas iniciativas em cloud computing e NoSQL.

E você? O que tem estudado ultimamente? Quais são suas apostas?

  • Share/Bookmark

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



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