Falando em Java 2007: um Sábado de Java com a Caelum

Por Sérgio Lopes em 30/05/07

Falando em java 2007

É com muita satisfação que a Caelum anuncia seu primeiro evento Falando em Java e convida todos a participarem. Será no Sábado dia 30 de Junho na FEI da Liberdade, das 9h às 16h. Será um dia de palestras bem interessantes com o tema Java e Web 2.0.

É uma oportunidade para reencontrarmos antigos alunos e conhecer novas pessoas que ainda não passaram pela Caelum. Se você já foi (ou é) aluno da Caelum, ainda ganha 50% de desconto na inscrição. E se você não fez nenhum curso com a gente mas gostaria de nos conhecer, é uma ótima oportunidade para isso.

O evento será focado no tema Web 2.0 com 5 palestras. Nosso amigo Philip Calçado virá do Rio de Janeiro para abrir o evento e falar sobre o que é Web 2.0. Fábio Kung, Guilherme Silveira, Paulo Silveira e eu (Sérgio Lopes), todos da Caelum, falaremos ainda sobre Ajax, WebServices, Tags e Lucene e JavaFX, respectivamente.

As vagas são limitadas e o preço bem acessível. Então não deixe para depois e faça já sua inscrição! Além das palestras, teremos sorteios, coffe break e bastante networking. Esperamos você!

XP, encontros e fotos

Por Paulo Silveira em 25/05/07

Desde terça feira passada temos coaching de Extreme Programming com a Mariana Bravo. É uma experiência muito rica e produtiva, em especial em relação ao planejamento e comunicação com o usuário.


Image011 Image009

Nas fotos tem Sérgio Lopes, Fábio Kung, Nico Steppat, Guilherme Silveira e eu, além da Mariana Bravo e do Guilherme Moreira que estava tirando a foto. É incrível as descobertas no meio do projeto: os cartões mal descritos que começam a ser implementados rapidamente sofrem alterações, e muitas vezes descobrimos que não era bem aquilo que o cliente queria.


Image019 Image014

E nessa quarta feira a noite nos encontramos com boa parte do grupo de XP da USP, da agilcoop: Alexandre Freire, Danilo Sato, Dairton Bassi e Julian Monteiro, além da Mariana Bravo. Dessa vez tivemos também a ilustre visita do Carlos Villela, do escritório de Londres da ThoughtWorks, que veio de férias, e fomos todos jantar. Desse grupo todo, apenas eu e o Guilherme não temos MacBooks: estamos fora de moda :).


DSC00202
Danilo, Dairton, Villela, Alex e Fábio a esquerda, Guilherme, eu, Mariana e Julian a direita.

Conversamos de diversos assuntos, desde os problemas enfrentados em grandes projetos com XP, até sobre como o google vai comer a si mesmo. Mais tarde o Carlos Villela me mandou um link interessante, mostrando as diferenças de se trabalhar em uma grande empresa como o Google e uma pequena como a Meetup! Esses encontros são sempre muito produtivos, e agrega mais valor que ler as últimas notícias dos diversos RSSs por quais passamos todos os dias. Esperamos ter mais dessas visitas na Caelum!

Strings (i)mutáveis?

Por Thadeu Russo em 21/05/07

Todos sabemos que, em Java, Strings são objetos imutáveis. Sendo assim, qualquer chamada de método em uma referência para String NÃO irá alterar o valor da referenciada. Uma sugestão aqui é uma pesquisa sobre o pattern Flyweight que é utilizado nesta classe e justifica tal imutabilidade.

Exemplo:

public class Teste {

  public static void main(String [] argsthrows Exception {
    String nome = "Thadeu de Russo e Carmo";
    nome.toUpperCase();
    System.out.println(nome);
  }
}

O output será Thadeu de Russo e Carmo.

Nos gabamos para nossos colegas quem estão no início de carreira em Java sobre tal conhecimento, que é cobrado inclusive na prova de certificação de programador. Poderiamos também criar uma função que “executasse” algumas alterações.

Algo como:


public class Teste {

  public static void main(String [] argsthrows Exception {
    String nome = "Thadeu de Russo e Carmo";
    alteraString(nome);
    System.out.println(nome);
  }
}

O output será Thadeu de Russo e Carmo.

Pelo que conhecemos, independentemente do conteúdo da função alteraString(String), nunca conseguiríamos alterar o conteúdo referenciado por nome, certo? Errado!!!!

Utilizando os recursos da API de Reflection, conseguimos facilmente realizar tal alteração. Mãos a obra!

import java.lang.reflect.Field;


public class Teste {

  public static void main(String [] argsthrows Exception {
    String nome = "Thadeu de Russo e Carmo";
    alteraString(nome);
    System.out.println(nome);
  }
  
  public static void alteraString(String nomethrows Exception {
    Field value = String.class.getDeclaredField("value"); //1
    value.setAccessible(true); //2
    char [] charsDaString = (char []) value.get(nome); // 3
    charsDaString[0‘t’;
    charsDaString[1‘H’;
    charsDaString[2‘A’;
    charsDaString[3‘D’;
    charsDaString[4‘E’;
    
  }
}

Uow!!!! Mágica? Vamos ao que esta acontecendo nas linhas numeradas.

linha 1 - Estamos pegando uma referencia para um objeto do tipo java.lang.reflect.Field para o atributo “value” da classe String.
linha 2 - Este é um campo privado (basta olhar o fonte da classe String) e para conseguirmos acesso a ele, temos que “nos dar acesso”. (Olha o encapsulamento indo para o buraco!!)
linha 3 - Na instancia que eu tenho (nome), eu desejo pegar o field value (que é o array onde os caracteres são armazenados).

Nas demais linhas nós simplesmente trocamos os valores dos caracteres. O que será que teremos impresso? Ta-da!! "tHADEu de Russo e Carmo". Opa, algo diferente do que haviamos afirmado mais acima. Vale afirmar que fazer tal modificação em uma String é uma péssima idéia, dado o pool de Strings: alguém pode estar compartilhando essa String com você, e enxergará essa alteração sem ter previsto tal acontecimento!

O que fizemos no código acima foi, simplemente brincar com a API de Reflection. API esta que permite coisas como injeção de dependência como no EJB3, vRaptor, JBoss Seam, etc. Aqueles que já trabalharam com os velhos applets devem estar pensando: “Achei uma falha de segurança no Java!”. Isso não é verdade pois dentro do método setAccessible(boolean) da classe Field, existe uma validação junto ao SecurityManager.

Vale atentar ao fato de que é possível alterar tais propriedades no arquivo java.policy que fica sob a pasta %JAVA_HOME%\jre\lib\security.

Finalizando, aqueles que não conheciam ou não sabiam o poder da API de Reflection, viram que com um simples código, conseguimos “mutar” uma String, imaginem com um pouco mais de código o que não é possível de se fazer.

Screencast - Primeiros Passos para a JPA

Por Fabio Kung em 15/05/07

Já tem um bom tempo que lançar uma série de screencasts é um assunto recorrente dentro da Caelum. Já houve algumas pequenas tentativas, mas ao contrário do que parece, não é uma tarefa nada fácil.

O primeiro screencast da Caelum vem em dois sabores. Flash vídeo (.flv) é a mesma tecnologia usada pelo YouTube e pelo Google Video e pode ser assistido pelo navegador, porém a qualidade é reduzida.

Também está disponível o original, no formato Quicktime Movie (.mov) de alta qualidade e consequentemente com quase o dobro do tamanho. Para reproduzi-lo pode ser usado o Quicktime Player da Apple ou os livres VideoLAN (VLC) e MPlayer.

O vídeo é introdutório, sobre a Java Persistence API (JPA), para quem ainda não teve a oportunidade de testar a tecnologia. É um passo a passo que vai desde o início, mostrando como fazer o download das bibliotecas necessárias, montar um projeto no eclipse, preparar o banco de dados (MySQL), mapear uma classe em tabela, salvar entidades, carregar entidades e customizar os padrões adotados pela tecnologia (nomes e tamanho de colunas, por exemplo).

Como implementações da JPA entram em cena tanto o Hibernate quanto o Oracle Toplink.

Para esse primeiro screencast, o feedback fica por sua conta! Só é possível haver a continuidade com outros vídeos mais avançados, mais simples, com diferentes abordagens, ou abordando outros tópicos, se isto for realmente agregar algo à comunidade. Esse é o primeiro vídeo produzido e com certeza ainda há muito o que melhorar.

Precisamos do seu conselho! Que tal: “as fontes estão pequenas”, “seria melhor se tivesse voz” ou “está muito longo”?

Em tempo: já temos ciência destes problemas, mas como já citado, fazer um screencast não é nada fácil. Para o próximo estaremos com tudo isso (mais o que for sugerido) melhorado!

Primeiros passos para a Java Persistence API - duração: 36 min

Flash Video (.flv): 52 MB, 960×600
Original, Quicktime Movie (.mov): 96 MB, 960×600

Apostila gratuita de VRaptor, Hibernate e AJAX

Por Sérgio Lopes em 08/05/07

A Caelum acaba de abrir para uso geral mais uma apostila que faz parte dos nossos cursos. É a apostila do FJ::28 - Desenvolvimento ágil para a Web 2.0 com VRaptor, Hibernate e AJAX. É um curso de 20h onde o objetivo é desenvolver uma aplicação Web completa no menor tempo possível, usando ferramentas de alta produtividade.

Usamos o Hibernate para acesso a banco de dados, inclusive com vários relacionamentos; VRaptor como controlador MVC; e AJAX integrando VRaptor com JQuery. A aplicação desenvolvida é uma Loja Virtual de Mp3s (demo em breve!) com sistema administrativo para cadastro dos produtos, cadastro de usuários, sistema de login com roles e a página de compra que é mostrada pra o usuário (e que usa Ajax para criar uma interface interativa).

Essa é a primeira versão da apostila, então aguardamos comentários e sugestões de todos! Diga o que achou e no que ela podia ser melhor.

A apostila pode ser baixada gratuitamente na página do curso assim como o material necessário para iniciar o projeto.