Recentemente participei do desenvolvimento da aplicação exemplo chamada de ScrumToys para demonstrar o maior número possível de funcionalidades do JSF 2.0. Boa parte do refactoring da arquitetura de componentes na camada de controle e modelo foi realizado por mim.
Alguns detalhes sobre as classes implementadas para suporte aos Managed Beans da aplicação ScrumToys estão disponíveis no blog da Globalcode: Um pouco sobre a arquitetura do ScrumToys.
As simplificações propostas nas classes implementadas na camada de controle serviram de referência para o desenvolvimento dos exemplos contidos no livro JavaServer Faces 2.0, The Complete Reference, escrito pelo Ed Burns, líder da especificação do JSF 2.0 no JCP, e pelo Chris Schalk, Developer Advocate no Google. Este livro implementa uma aplicação chamada Virtual Trainer ao usar a modelagem para gerenciamento do contexto de persistência e demarcação da transação via JTA através de classes base abstratas para os Managed Beans do JSF 2.0 no ScrumToys.
Um trecho do livro está disponível no Google Books e indica uma referência indireta à arquitetura proposta pelo ScrumToys.
O projeto ScrumToys foi incorporado à versão final do NetBeans 6.8 como uma demonstração de aplicação Web. O vídeo a seguir ilustra o uso do NetBeans para criar este projeto a partir de um wizard da ferramenta e permitir o acesso aos códigos de demonstração do JSF 2.0:
Em reconhecimento ao trabalho realizado, o Ed Burn faz referência à alguns desenvolvedores deste projeto no tópico Acknowledgments do livro.
Para ilustrar o funcionamento básico do Arduino preparei uma sequência de exemplos com alguns códigos, fotos e videos. Neste post apenas tratarei do primeiro exemplo que implementa um programa bem simples e representa uma unidade de código que usa uma porta digital como saída do Arduino conectado a um LED (diodo emissor de luz). O programa que será instalado no Arduino apenas acenderá e apagará este LED ininterruptamente com uma pequena pausa.
A foto ao lado ilustra os dois componentes usados neste primeiro exemplo. O LED vermelho está à esquerda e um resistor de 10k ohms está à direita. O LED tem polaridade, onde o fio metálico mais comprido é o positivo e o curto é o negativo. O resistor não tem polaridade.
Com um barramento para montar circuitos eletrônicos (protoboard) uma das pontas do resistor está ligada ao fio metálico de polaridade negativa do LED. A polaridade positiva do LED será ligada à porta digital de numero 9 do Arduino. O outro fio metálico do resistor será ligado à porta de aterramento (GND - ground).
A programação para o Arduino é realizada através da IDE implementada em Java chamada de Processing que pode ser baixada do site arduino.cc. Como ferramenta é implementada em Java, pressupõe-se ter um JRE devidamente instalado na máquina e com a variável PATH configurada para localizar este JRE. Contudo, os programas rodam dentro do microcontrolador do Arduino. Portanto, um compilador C externo a esta IDE é usado. Então, será necessário instalar o compilador avr-gcc antes de tentar escrever e compilar qualquer código para o Arduino através da IDE. Todos os passos necessários para configurar este ambiente estão disponíveis no site do Arduino.
A figura abaixo é um snapshot desta ferramenta com o código usado para controlar a porta 9 do Arduino para acender e apagar o LED.
Um programa simples para rodar no Arduino deve ter as funções "setup()" e "loop()". A primeira função será executada apenas uma vez pelo Arduino no início da execução do programa. Esta função é usada para conter instruções para inicialização. Pode inicializar variáveis ou configurar as portas do Arduino. A segunda função será executada num loop infinito. Esta será a parte principal do programa.
O código da função "setup()" ilustrada acima chama a função "pinMode(...)" que configura a porta 9 como saída digital. Com esta configuração será possível ativar esta porta para mudar o estado de ligado para desligado ou vice-versa (do estado 1 para 0 ou HIGH para LOW). A função "loop()" usa as funções "digitalWrite()" e "delay()" para mudar o estado da porta 9 e realizar uma pequena pausa para que a mudança de estado seja percebida. Como o programa roda numa velocidade aproximada de 16KHz, sem a pausa não seria possível observar o LED conectado a esta porta acender e apagar. A linha 10 deste código muda o estado da porta 9 para HIGH. Ou seja, a porta 9 passa a ter a tensão de 5 volts que representa o bit igual a 1. Em seguinda, ocorre uma pausa de 500 milissegundos antes de mudar o estado da porta para LOW (equivalente a zero volts). Daí uma nova pausa antes de voltar a acender o LED quando o Arduino executa novamente a função "loop()".
O video a seguir ilustra a execução do programa já compilado e instalado no Arduino através da IDE.
Na parte 2 (num novo post) será ilustrada uma evolução deste exemplo ao adicionar uma sequência de LEDs e um programa com loop para acender e apagar esta sequência.
Quando participei do último OpenTDC promovido pela Globalcode ouvi falar de um hardware open source chamado Arduino. Até aquele momento nunca tinha ouvido falar da idéia de open source no mundo do hardware e sim somente no mundo do software. Minha santa ignorância! Mas, durante a minha visita aos Estados Unidos para participar do JavaOne 2009 tive a oportunidade ímpar de participar de uma feira que aconteceu nos dias 30 e 31 de maio deste ano em San Mateo na California. A feira chamada de Maker Faire (um dos assuntos do próximo Casual Class da Globalcode) foi um evento dedicado a mostrar os trabalhos de diversos pequenos inventores, fazedores, geeks, nerds e artesãos de todas as áreas. Nesta feira vi a presença maciça do Arduino através de diversos projetos, kits de eletrônica, robôs e outros equipamentos feitos pelos expositores que participaram do evento. Nesta feira fiquei mais curioso ainda pelo Arduino e sobre essa idéia de hardware open source. Por consequência, acabei trazendo para casa um kit para fazer pequenos projetos e experiências com o Arduino comprado na feira. E assim começou as minhas peripércias com este hardware simples e pequeno que tem fascinado tanto o mundo dos "makers".
Estão, o que é Arduino? O Arduino é uma plataforma de hardware open source baseado em um microcontrolador com suporte a conexão via serial ou USB com o computador para receber programas. A palavra "plataforma" significa um hardware genérico o suficiente para permitir a criatividade dos desenvolvedores elaborar aplicações com interatividade com o mundo real (também chamado de "physical computing") através de alguns componentes eletrônicos como complemento.
A maior curiosidade sobre o Arduino não está na sua simplicidade, mas sim numa grande comunidade que se formou em torno desta idéia. Por ser um hardware aberto, aonde podemos baixar a lista de componentes, o diagrama esquemático e o desenho da placa de circuito e muita documentação para aqueles que desejam montar o seu próprio Arduino, esta tecnologia proporciona a democratrização do conhecimento para qualquer um usar ou contribuir. Com isso, podemos encontrar diversos projetos na rede contruídos com base no Arduino. Também podemos encontrar livros e revistas especializadas tratando do assunto, além de vários sites sobre o assunto. Alguns exemplos:
Na verdade o Arduino é bem simples. Na sua última versão, possui vários componentes simples como resistores, capacitores, diodos e um regulador de tensão. Mas a parte vital está num microcontrolador da ATmel que disponibiliza algumas portas digitais para entrada ou saída de bits e algumas portas analógicas para entrada de um sinal analógico e a respectiva conversão para um valor binário (int) no programa. O hardware do Arduino é tão simples que pode ser construído em casa após adquitir todos os componentes ou ser adquirido já ponto. A comunicação com o computador para receber os programas é realizado por porta serial ou USB do computador (depende da versão usada do Arduino). Através destas portas é possível conectar LEDs, potenciômetros, motores, sensores de luminosidade, relés ou qualquer outro dispositivo eletrônico que permita receber um bit para ativar algum equipamento externo ou simplesmente receber um sinal de um dispositivo e mandar para o programa. Com o Arduino não é difícil construir um hardware que controla alguns motores de um pequeno robô e receba os sinais de alguns sensores como um sensor ultrasônico. O sensor pode indicar a distância do robô de algum obstáculo para que o código em execução possa provocar uma reversão dos motores para evitar que o robô atinja ao alvo.
No site oficial do Arduino podemos encontra toda documentação, como programar, exemplos de código, como usa através de Windows, Linux ou Mac, além da descrição completa das várias versões do hardware. Neste site podemos fazer o download da ferramenta de desenvolvimento (IDE) para criar programas baseado na linguage "C" para instalar e rodar dentro do Arduino. Esta IDE chama-se "Processing" e está implementada em Java. Mas, como o programa, escrito em "C" e depois compilado, roda dentro do microcontrolador do Arduino, esta IDE apenas usa um compilador externo preparado para gerar códigos binários para os microcontroladores da ATmel. Também permite fazer o upload do programa compilado no computador para a memória do Arduino através da porta serial ou USB. Após o upload, o Arduino começa executar imediatamente.
A imagem a seguir ilustra um programa de exemplo que acompanha a IDE de desenvolvimento para o Arduino.
Este programa configura a porta de número 13 do Arduino como saída digital através da função "setup()". Depois, num loop infinito, o Arduino executa as instruções que estão dentro da função "loop()". Estas instruções mudam o estado da porta 13 para HIGH (bit ligado que corresponde a 5 volts nesta porta) e após uma pausa mudam o estado para LOW (bit desligado que corresponde a 0 volt nesta porta). Assim, se ligarmos um dispositivo a esta porta, ele será ligado e desligado. Por exemplo, um LED pode ser usado para visualizarmos o estado desta porta. Ou até poderíamos ter um pequeno motor ligado a esta porta com um circuito apropriado de potência.
Um passo-a-passo para fazer um exemplo bem simples com o Arduino e evoluí-lo gradativamente é apresentado na sequência de posts "Hello Arduino World":
Com o recente lançamento do site InfoQ no Brasil com artigos traduzidos para o português, alguns dasavisados acabaram acreditando.
Os 20 melhores artigos de 2008 da InfoQ em inglês foram traduzidos para o português e um deles incluiu a pegadinha de primeiro de abril realizada pelo Rod Johnson (criador do Spring Framework e CEO da SpringSource).
Vejam video abaixo.
Muitos caíram no erro pelo site não ter divulgado inicialmente que era uma piada de primeiro de abril. Mas, alguns leitores espertos perceberam o deslize e avisaram o site para correção. Links para os artigos na InfoQ:
Segue um documentário muito interessante que conta a história do surgimento dos browsers. Também fala da guerra entre a Netscape e Microsoft que determinou a morte do browser Netscape e ascensão do Internet Explorer.
Ele participou de uma palestra onde um integrante da equipe de desenvolvimento do site contou as experiências de uso do Spring. Interessante foram alguns números apresentados pelo Matt: 2 data centers (~600 máquinas), ~100 serviços (componentes), ~30-40 interfaces, ~1000 arquivos de configuração do Spring e atualmente 30 milhões de usuários com a taxa de crescimento de 1 milhão a cada 2-3 semanas! Uau! Tudo rodando num cluster de ~600 máquinas com o Tomcat! Isso mesmo, TOMCAT! Agora eles querem evoluir a solução para usar modularização através de OSGi e Spring Dynamic Modules for OSGi (que facilita tremendamente o uso de OSGi). Tudo isso para prover hotdeploy e múltiplas versões dos componentes, além da distribuição automatizada no ambiente em cluster.
Legal também foi a frase que vi no blog do pessoal do LinkedIn: LinkedIn is 99% Java but 100% Mac. Nos outros 1% estão usando C++, Ruby on Rails e Groovy/Grails.
Contudo, fiquei muito espantando quando soube que tem alguns poucos loucos querendo remover o Spring Framework de uma aplicação funcionando muito bem em produção simplesmente por ter birra do Spring e birra de frameworks. Se pelo menos estivessem substituíndo por EJB 3 ou JBoss Seam com um servidor de aplicações decente como o JBoss Application Server, aí eu aceitaria. Mas a insanidade leva a quererem usar servlets puro ou talvez Struts puro. Vai entender!
Quanto mais pesquiso sobre o Spring Framework vejo que tornou-se um padrão de fato. Não precisa ir muito longe em cliques ou páginas de resultado da busca no Google para ver muitos outros casos de sucesso de arquiteturas funcionando muito bem com o Spring Framework.
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!
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.
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
E 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!
Está circulando pela rede a um bom tempo a informação de que é possível economizar energia elétrica ao fazer buscas no Google. Será?
Alguns estão afirmando que a tela branca do Google gasta mais energia que uma tela totalmente preta. Existem até alguns malucos que estão calculando quanta energia é economizada considerando o consumo desta tela branca nos monitores e as estatísticas de uso do Google.
A empresa chamada Heap Media desenvolveu uma página de busca beaseado no Custom Search Engine do Google para proporcionar esta tão falada economia de energia. O site se chama: Blackle.
Mas não existe mágica! Encontrei alguns artigos na rede afirmado que esta economia só é possível nos monitores CRT. Já os monitores LCD o consumo de energia é o mesmo para todas as cores.
Contudo, vale um alerta de segurança! Estes sites não são do Google e nem de uma empresa do Google. Alguns destes sites permitem o usuário se autenticar no Google. Então, existe o risco destes sites capturar o seu usuário e senha do Google. Mas, a idéia parace interessante, salvo alguns cuidados!
Aqui está a minha primeira postagem neste blog! Encontrei um video no YouTube com um documentário de quase 50 minutos sobre o Google. Achei show de bola!