quinta-feira, 25 de setembro de 2008

Spock na J... Magazine

Pensou besteira, heim?

Na verdade a revista Java Magazine, de circulação nacional e dedicada à tecnologia Java, publicou na última edição (no. 61, setembro/2008) um artigo escrito por mim e pela Yara Senger (diretora educational da Globalcode) com o título Facelets: Criando templates de telas no JSF. Este artigo apresenta a tecnologia Facelets para a construção de templates de telas com o JavaServer Faces (JSF) e a definição de componentes visuais customizados a partir de arquivos XHTML para aplicações Web.

No último JustJava realizamos uma prévia deste assunto através de uma palestra que comentei aqui no post Templates de Tela JSF e TagFiles com Facelets. Neste post encontram-se os slides da apresentação para visualização online e o link para download. Mas, o artigo só nas bancas!

Then, enjoy it! Any comment, let me know!

domingo, 21 de setembro de 2008

Pencast do keynote de abertura JustJava2008

Usando a caneta mágica que roda Java, gravei o keynote de abertura do evento JustJava2008. Esta apresentação foi realizada pelo Bruno Souza (JavaMan), Yara Senger e Melissa Villela.

Durante a apresentação fiz algumas anotações no caderno e gravei o áudio usando o programa embutido na caneta chamado de "Paper Replay". O flash a seguir contem o pencast gerando pelo site de compartilhamento da Livescribe.


Clique no play para tocar ou na seta superior para full screen

Algumas fotos do evento estão disponíveis no álbum online da Globalcode.

Se desejar, deixe os seus comentários aqui neste post ou na home do pencast disponibilizado em My Livescribe Community.

quarta-feira, 17 de setembro de 2008

Cacau Show: The Dog!

Não é franquia e nem tecnologia! Mas para fugir um pouco dos posts técnicos vamos mostrar o Cacau, um labrador de 2 anos e meio de idade na cor chocolate.

Aí está o Cacau (slide) Show:

Picasa SlideshowPicasa Web AlbumsFullscreen

Este é o companheiro de caminhadas que me faz sair da frente do computador :)

Ah, esqueci de dizer porque Cacau! Cacau é o nome dele em referência à sua cor chocolate!

Visite o site do Canil Buddy Hunter.

domingo, 14 de setembro de 2008

Templates de Tela JSF e TagFiles com Facelets

O JavaServer Faces (JSF) na versão atual para o Java EE 5 tem algumas deficiências que serão resolvidas na nova especificação JSF 2.0. Aqui estão algumas deficiências encontradas no atual JSF 1.2:
  • A falta de um mecanismo de templates de telas, semelhante ao Tiles do Struts, que seja bem integrado ao JSF;
  • Definição de novos componentes de UI e custom tags a partir da composição de outros componentes e uso de JSP (XHTML no caso do Facelets) semelhante ao conceito de TagFile;
Contudo, o framework chamado Facelets foi desenvolvido e ganhou popularidade ao resolver estes problemas já na versão atual do JSF. A popularidade foi tamanha que chamou a atenção do "expert group" que deseja incorporar este mecanismo na especificação mantida pelo JCP.

Este framework implementa um novo compilador de páginas baseado em XHTML para realizar a instanciação da árvore de objetos (componentes UI) no lado do servidor para representar a tela JSF a ser renderizada em HTML para o usuário. Este mecanismo se tornará o substituto do JSP onde, por exemplo, não seria mais possível usar scriptlets.

Para ilustrar os conceitos relacionados a este fremework, a sua atual importância, o relacionamento com o JCP no JSF 2.0 e apresentar alguns exemplos, fizemos uma apresentação no JustJava2008.

Seguem abaixo os slides utilizados durante a apresentação.



Nesta apresentação falamos sobre o que é template de telas JSF, como criar um template, como criar uma tela JSF reusando um template, como configurar o Facelets numa aplicação Web e como criar componentes via TagFile (XHTML) e a respectiva custom tag. Tudo ilustrado com algumas demonstrações e trechos de código.

Os slides e a aplicação de demonstração podem ser baixados através do seguinte link: JustJava2008-Facelets.

Then, enjoy it!

sexta-feira, 12 de setembro de 2008

Integrando o futuro: Seam e Spring

Quem disse que não é possível usar o Spring Framework e o JBoss Seam juntos?

No JustJava2008 apresentei uma palestra com o resultado da integração destes dois frameworks. Nesta apresentação ilustrei os passos necessários para configurar uma aplicação Web para ter os dois frameworks funcionando em conjunto. Apresentei as características do Seam que o qualificam para o gerenciamento da camada de apresentação (View e Controller) numa arquitetura MVC na Web com Ajax e as características do Spring que o qualificam para o gerenciamento da camada model com integração com os serviços EE (transação, segurança, logging, remoting, pooling, etc). Claro que estes frameworks são mais abrangentes do que o discutido na palestra.

Na apresentação pude discutir os problemas encontrados nesta integração considerando as diferenças destes frameworks que resultam em alguns curto-circuitos. Contudo, a integração até que funciona bem! Mas, tem que ficar atento com estes curtos.

A seguir estão os slides para a comunidade. Then, enjoy it!

quinta-feira, 4 de setembro de 2008

A caneta de 1 milhão de dólares que roda Java

Brincadeirinha! Só usei este título para chamar a sua atenção para este post do blog. Contudo, nem tudo é brincadeira. Uma caneta que roda Java realmente existe, mas custa apenas USD 149,00 para a versão com 1GB de RAM e USD 199,00 para a versão com 2GB. Ou seja, não é tão cara assim!

A caneta chamada Pulse SmartPen, que foi desenvolvida pela empresa chamada Livescribe, ganhou no JavaOne 2008 o prêmio Duke's Choice Award como um dos projetos de invovação que utiliza a tecnologia Java.

Esta caneta tem um processador ARM embutido de 32 bits, 150MHz e uma JVM com suporte a Java ME e CLDC 1.1 com Media Profile. Torna-se possível escrever programas em Java e fazer o upload via USB para a memória interna da caneta.

Mas, a grande inovação da caneta não está necessariamente na capacidade de rodar Java. Além de ser um mini-computador numa caneta, ela tem uma câmera de infravermelho de alta velocidade que permite capturar tudo aquilo que o usuário escrever num papel de um caderno especial.

O caderno usado pela caneta tem impresso nas páginas um padrão de micro pontos que não se repete ao longo de uma página e ao longo de todas as páginas do caderno. Este padrão de pontos forma um sistema de endereçamento chamado DPS (Dot Positioning System) que permite a câmera de infravermelho captar a posição da caneta no caderno e o movimento realizado pelo usuário. A câmera não enxerga a tinta da caneta esferográfica que tem na ponta, mas apenas visualiza os pontos para posicionamento e registro do movimento de escrita.

Tudo aquilo que o usuário escreve é registrado na memória da caneta. Através de um programa instalado no computador é possivel transferir todas as páginas escritas para o computador e visualizar este conteúdo exatamente como foi escrito. Após a transferência do conteúdo para o computador, torna-se possível fazer o upload deste conteúdo para um site de compartilhamento da própria Livescribe em formato flash que pode ser exportado para PDF.

Mas não é só isso ... :) O recurso mais interessante é que a caneta tem um gravador de áudio embutido que permite gravar uma reunião, uma aula ou uma apresentação. Todo o áudio gravado é sincronizado com aquilo que é escrito e no momento no qual é escrito no caderno! Assim, torna-se possível depois da gravação, posicionar a caneta sobre uma palavra escrita no caderno para iniciar a reprodução do áudio gravado no momento que o texto foi escrito. O flash gerado também contem o áudio. O legal é quando o flash é reproduzido, toca o áudio e mostra o contéudo sendo escrito em sincronismo com o áudio como se fosse um filminho.

Você acha que é só isso? Que nada! Um recurso bem legal é o fone de ouvido que tem em cada fone um microfone embutido que simula os ouvidos do usuário e o seu ponto de vista. Quando este fone é colocado nos ouvidos do usuário e ligado à caneta, simula os ouvidos do usuário através do microfone e permite gravar o áudio do ponto de vista do usuário. A tecnologia de gravação do áudio é chamada de Binaural que grava a posição espacial de onde o som vem (um exemplo bem legal desta tecnologia é o áudio chamado Virtual Barber Shop, que só funciona ouvindo com um fone de ouvido estéreo). Assim, ao ouvir a reprodução do áudio, o usuário sabe de onde vem cada som ou quem fala numa reunião. Muito interessante numa sala de aula, numa discussão ou reunião onde o usuário pode identificar os participantes ao desenhar no caderno onde está cada individuo. Depois, ao ouvir o áudio, o usuário poderá saber quem é quem!

Para não ficar somente no palavriado seguem alguns videos disponiveis no YouTube com demonstrações da caneta:


The Livescribe paper-based computing platform


A Java Minute with LiveScribe, Duke Choice Award Winner


The Livescribe paper-based computing platform

The Pulse Smartpen is a Java technology-based mobile computing platform that connects the paper world and the digital world. It is a computer within a pen that captures handwriting and simultaneously records audio and synchronizes it to the writing. Anything the user hears, writes or speaks is captured, accessible and shareable. The Pulse platform consists of an integrated system of smartpen, dot paper, applications, desktop software and development tools.

Com todos esses recursos, a JVM embutida baseada no Java ME permite escrever programas que tem acesso via uma API Java implementada pela Livescribe aos recursos de DPS, o display OLED, a gravação e reprodução de áudio. Então, agora é uma questão de criatividade ao desenvolver programas em Java através do Eclipse, compilar e instalar na caneta via USB.

Especificações técnicas da caneta.

Eu não perdi a oportunidade e comprei uma pra mim já que não custa 1 milhão de dólares! Então, para ilustrar o que pode ser feito ao gravar um áudio e o que foi escrito, gerei o flash abaixo.


Clique no play ou na seta superior para full screen

Uma foto do meu caderno e da SmartPenE aí, quando vai encomendar a sua?! Não venha com a desculpa "como eu pude viver esse tempo todo sem essa caneta?". Isso pode parecer inveja :) Então, não perca tempo!

Será que existe algo parecido em .NET?

Clique no video acima para ver todo o conteúdo

Vejam apresentação sobre a caneta no evento TDC em florianópolis: A caneta Java no TDC FLoripa.
Uma outra opinião: design@Sun
Then, enjoy it!

Usar ou não DAO nos tempos do JPA?

Recentemente fui questionado sobre os design patterns a serem usados no desenvolvimento de aplicações Web com JSF e JPA. As seguintes perguntas foram feitas:
  • Pensamos em usar um Mediator para evitar acesso direto ao JPA dentro do Seam Component. Este padrão é o melhor a ser adotado?
  • Tem mais algum design pattern que devemos usar explicitamente? Já estamos utilizando DAO, para separar os métodos de acesso ao JPA.
Pensando sobre o assunto, cheguei às seguintes idéias.
Vejo que nos tempos de JPA, evitar o acesso direto ao JPA a partir da camada controller ou até mesmo da camada model (via serviços, ou melhor, façades) não é mais necessário. O uso de um mediator ou DAO para encapsular os códigos de persistência estão saindo de moda considerando que a interface desses objetos é praticamente a mesma do EntityManager. Ou seja, se adicionarmos essa camada, vemos que praticamente é uma cópia e passagem direta de chamadas de uma camada para outra sem um valor agregado significativo. Pode até ser que compense por impor uma interface de DAO com tipagem baseada nas entidades, considerando que JPA não usa generics ainda.
No tempo do JDBC, onde tínhamos infinitas linhas de código para persistência de cada entidade, o DAO ou o encapsulamento de códigos de persistência tinha uma valor enorme para o reuso e manutenibilidade. No tempo do Hibernate, o uso do DAO ainda podia ser justificado considerando que a API do Hibernate não era considerada um padrão. Então seria interessante manter o acesso ao BD encapsulado para possíveis trocas de "provider". Mas, já nesse tempo começamos a perceber que os DAOs não tinham muito código por conta do Hibernate generalizar o acesso ao DB através de reflection e dialect. Mas, agora nesses tempos de JPA a API é padrão, já encapsula a independência do provider, já oference um processo simplificado de configuração e uma API genérica para todas as entidades via reflection, além de ter o mesmo efeito do Hibernate na redução drástica de códigos nos DAO. Uma camada específica de DAO para persistência em banco de dados via JPA perde sentido. Contudo, o DAO ainda é interessante para outros meios de persistência, e até mesmo DB se JPA não for usado.
Portanto, eu recomendo usar o JPA (EntityManager) diretamente na camada controller (MBs clássicos ou seam components como MBs) ou na camada model (seam components como façades ou business services). Daí podemos nos beneficiar da simplificação proposta pelo Java EE ao promover o IoC/DI através da anotação @PersistenceContext ou da proposta do Seam ao promocer o IoC/DI através da anotação @In. Então, a dúvida agora reside em fazer ou não uma camada model para delegar a persistência da entidade a esta camada! Confesso que é uma dúvida interessante de responder e que pode ser adiada para o momento de modelagem de cada arquiterura que realizarmos.
Muitos já me questionaram sobre usar ou não DAO nesses tempos de JPA. Agora pude compartilhar um pouco do que penso sobre esse assunto ... Qualquer contra-posição, adoraria discutir ...

Uma discussão acalorada foi resumida num post do site InfoQ pelo Craig Wickesser "Has JPA Killed the DAO?" com argumentos contra e a favor do DAO com JPA.