quarta-feira, 30 de julho de 2008

Fotos do TDC 2008

As fotos do evento estão disponíveis no picasa web:
Aqui está uma foto com a equipe Globalcode:


E não poderia faltar o "Spring man":

terça-feira, 29 de julho de 2008

Foram muitas novidades no TDC 2008

O TDC 2008 já se foi! Definitivamente o evento foi um sucesso. A Globalcode está se tornando senior em desenvolvimento de eventos Java. No ano passado, que foi a primeira edição do evento, contou apenas com uma trilha de palestras, apenas um palestrante internacional e a maioria dos palestrantes eram instrutores da Globalcode. Este ano foi um upgrade e tanto! Três palestrantes internacionais de peso, 2 trilhas de palestras em paralelo, vários palestrantes de outras empresas e, além de tecnologia Java, falou-se muito de processos e metodologia.

Para mim foi muito proveitoso ouvi falar de:
  • Scrum;
  • Java EE 6: EJB 3.1, JSF 2.0, WebBeans, Servlets 3.0, asyncronous bean invocation e timed invocations;
  • Java SE 7: JavaFX e applets;
  • Annotations (a febre!);
  • OSGi;
  • JBoss Seam;
  • SpringSource Application Platform;
  • JBoss Rules e jBPM.
O público pôde ouvir muito sobre o futuro do Java, as novas especificações, os novos recursos e linguagens integradas ao Java, além de discutir processos e metodologias.

Aproveitei o evento e trouxe dois livros para casa: JavaServer Faces: The Complete Reference e EJB 3 In Action. Não perdi a oportunidade de fazer tietagem e consegui o autógrafo do primeiro livro com o Ed Burns e do segundo livro com o Reza Rahman. Mas perdi a oportunidade de conseguir o livro Secrets of the Rockstar Programmers que sumiu rapidamente das prateleiras da Tempo Real no evento já no início do evento. Contudo o Ed Burns deixou algumas palavras sobre este livro em palestra e numa entrevista para a Computer World Brasil: Conheça os grandes segredos dos programadores ‘rockstar’.

Contudo, fantástico mesmo foi reencontrar vários amigos, ex-colegas de trabalho e muitos ex-alunos. Pude trocar muitas figurinhas com vários deles, além de promover muito network!

Realmente o evento foi um sucesso. Pena que já acabou! Mas ainda ouviremos muito sobre o que foi discutido neste evento ... Parabéns a Globalcode!

quinta-feira, 24 de julho de 2008

Muito Java na veia com o TDC 2008

O TDC 2008 está chegando! Serão dois dias de pura adrenalina, ou seria cafeína na veia? Em todo caso, o evento contará com uma programação bem variada de tecnologia Java e duas trilhas de conteúdo em paralelo ("Java Expert Edition" e "Java Corporativo e Metodologias").

Eu estarei lá para falar sobre Spring Framework e o portfolio de produtos agregados junto com o meu colega Ricardo Jun. A palestra será no sábado (26/07) a partir das 15:15.

Vale a pena conferir. Pena que as vagas já estão esgotadas como divulgado no boletim da Globacode. Serão 550 participantes! Mas, a lista de espera existe e está crescendo. Não custa tentar!

sexta-feira, 18 de julho de 2008

Injeção de podcast em inglês no ouvido

Encontrei o post Aprendendo Inglês via Internet em um outro blog e gostei das dicas de podcast:
  • English as a Second Language Podcast - O ESL é o podcast mais bem produzido entre os indicados. Mantido por um professor americano, o ESL Pod possui centenas de edições e a cada episódio foca em um assunto diferente.
  • The Word Nerds - Um pouco mais descontraído, traz dois professores americanos discutindo dicas de inglês e outros assuntos. Cada episódio tem cerca de 45 minutos.
  • The Bob & Rob Show - Bob e Rob são dois professores de inglês, um americano e outro britânico, que vivem e lecionam no Japão. Um bom podcast para quem gosta de perceber as diferenças entre o inglês britânico e o americano.
Achei show de bola. Vale a pena conferir!
Then, enjoy!

Sobre os contextos do JBoss Seam

O primeiro passo para entender o conceito de bijeção (bijection) do JBoss Seam é compreender muito bem os contextos Web e os próprios contextos do JBoss Seam.

Os contextos do Seam são muito semelhantes aos contextos de uma aplicação Web baseado em Java EE (componentes Servlet e JSP). Os contextos são áreas de objetos onde podemos associar um nome (uma string) para identificação de um objeto ao armazená-lo neste contexto. Um analogia bem simples e grosseira seria imaginar um contexto como um Map da API de Collections do Java. Um Map permite associar uma chave (referência ou identificador) a um valor (outro objeto) para localização simples e rápida dos objetos (valor). Contudo, os contextos vão além de um simples MAP e determinam um tempo de vida para os objetos que ali são armazenados. O tempo de vida determina um escopo de existência dos objetos ao torná-los disponíveis para os Servlets e JSP's da aplicação.

Numa aplicação Web simples baseada nas tecnologias Servlet e JSP (ao usar Struts, WebWork e JSF não seria diferente) temos disponíveis os seguintes contextos para armazenar objetos: page, request, session e application.

Escopos Java EE para Web:
  • page - Objetos armazenados neste escopo tem o tempo de vida de apenas o tempo de execução (processamento) de uma página JSP no lado do servidor. Após a geração do conteúdo HTML pelo JSP no lado do servidor e o envio deste conteúdo para o browser, as referências para os objetos armazenados neste contexto são perdidos. Podemos imaginar este contexto como o escopo de um método onde declaramos váriaveis locais que são destruídas ao final da execução do método.

  • request - Objetos armazenados neste escopo tem o tempo de vida de uma requisição Web realizada por um usuário através do browser. Este escopo passa a existir no momento que o servidor atende a requisição e será destruído ao final da requisição Web quando o conteúdo gerado for enviado para o browser. Este contexto permite armazenar objetos que podem ser passados de um servlet para outro ou de um servlet para uma página JSP se ocorrer um encaminhamento (forward) de um componente para outro enquanto a requisição ainda está em processamento no lado do servidor. Podemos imaginar este contexto como o escopo determinado pela passagem de parâmetros quando um objeto invoca o método de outro objeto.

  • session - O contexto de sessão define uma área de objetos no lado do servidor para cada usuário que acessa a aplicação. Este contexto permite armazenar objetos com o mesmo nome para usuários diferentes e existe um isolamento para cada usuário não acessar objetos de outro usuário. Objetos armazenados neste contexto tem um tempo de vida maior que o tempo de vida determinado pelo contexto request e mantem os objetos no lado do servidor enquanto o usuário usar a aplicação Web. Após um período de inatividade do usuário, este contexto será destruído para eliminar somente os objetos deste usuário.

  • application - Este contexto define uma área de objetos que tem o tempo de vida da própria aplicação. Quando a aplicação Web entra no ar no servidor de aplicações o contexto application é criado e será destruído somente quando a aplicação for desligada ou o servidor de aplicações sair do ar. Objetos armazenados neste contexto serão compartilhados entre todos os usuários que acessam a aplicação. Este objetos estarão disponíveis para qualquer Servlet e JSP da aplicação Web.
O JBoss Seam define novos contextos para complementar os contextos da Web. Os contextos definidos pelo Seam são tratados como novos contextos e distintos dos contextos do Java EE Web. Contudo, alguns contextos do Seam usam internamente os mesmos contextos do Java EE Web (ou seja, podemos tratar como a mesma coisa!). O Seam disponibiliza os seguintes contextos: stateless, event, page, conversation, session, business process e application.

Escopos do JBoss Seam:
  • stateless - Contexto para armazenar a referência para objetos stateless (ex. session stateless EJB). Tecnicamente não é um contexto já que cada busca ou chamada a método num objeto resulta numa nova referência para o bean. Este bean é gerenciado pelo pool de beans do EJB Container.
  • event - Este contexto é equivalente ao contexto request da Web. Recebe outro nome porque é utilizado em outras situações além de requisições Web como, por exemplo, invocação RMI ou invocação via Seam Remoting aos componentes Seam. Este contexto está associado ao ciclo de vida JSF. Durante o processamento do ciclo de vida os objetos associados estarão disponíveis e serão eliminados somente ao final do ciclo de vida JSF. Inclusive este contexto tem o tempo de vida de uma requisição Ajax realizada pelas bibliotecas de componentes visuais JSF com suporte a Ajax.
  • page - Este contexto permite armazenar objetos que são criados numa tela JSF e estão disponíveis para esta tela. Este contexto pode ser comparado com o contexto page da Web. Contudo, um objeto armazenado neste contexto estará diponível somente para a tela JSF correspondente que o instanciou a partir de algum listener de evento. Como a documentação sugere, este contexto é útil em alguns componentes visuais como, por exemplo, numa lista clicável de opções que precisa de um objeto com valores específicos para esta lista e tela JSF. Objetos neste contexto estarão disponíveis mesmo em sucessivas requisições Ajax a partir de componentes visuais a partir do browser.
  • conversation - Aqui está o verdadeiro diferencial do JBoss Seam que agrega valor no desenvolvimento de aplicações Web com JSF. Este contexto permite armazenar objetos que terão um tempo de vida maior que uma requisição (event) e menor que uma sessão (session). Com este contexto se torna possível definir um escopo para objetos que são usados para implementar um fluxo de telas que realizam um "caso de uso" ou "história de usuário". Num Seam Component é possível anotar o início da conversação num método e anotar outro para demarcar o fim da conversação. O curioso deste contexto é que permite abrir várias janelas de browser para uma mesma tela JSF e cada janela representar uma conversação diferente (contexto diferente de objetos) para execução simultânea do mesmo caso de uso. Cada janela é um contexto separado que não influência um outro contexto aberto.
  • session - Este contexto é equivalente ao contexto Web de mesmo nome. Este contexto define um escopo para manter objetos como, por exemplo, o usuário logado ou outros objetos a serem compatilhados entre várias conversações (escopo de conversação), Além de objetos globais do usuário que acessa a aplicação.
  • business process - Define um contexto para objetos que são associados a um processo de negócio gerenciado pelo jBPM. Objetos armazenados neste contexto pertencem a um processo e podem ser compatilhados entre vários usuários que acessam o mesmo processo de negócio. Só faz sentido usar este escopo se a máquina de processos implementada pelo jBPM estiver em uso numa aplicação Web em conjunto com o Seam.
  • application - Este contexto é equivalente ao contexto Web de mesmo nome. Objetos armazenados neste contexto estarão disponíveis para todas as converssações e usuários que acessam a aplicação. Este contexto é útil ao armazenar objetos com conteúdo que não mudam com freqüência para compatilhar para toda aplicação como, por exemplo, configurações ou meta informações. Muitos objetos internos do próprio Seam são armazenados neste contexto.
Os contextos indicados acima definem namespaces, já que uma string é usada para dar nome ao objeto armazenado. Como cada contexto é isolado, torna-se possível usar o mesmo nome em contextos diferentes. Os nomes para os objetos armazenados nestes contextos são chamados de context variable. Numa tela JSF, ao usar uma expression language (EL) para associar um componente visual a um objeto (seam component) armazenado num destes contextos, o Seam realiza a busca do objeto a partir do nome indicado na expressão numa ordem de prioridade (event -> page -> conversation -> session -> business process -> application). Por exemplo, ao usar a EL #{usuario.nome} resultará numa busca pelo objeto associado ao nome "usuario" nos contextos na ordem indica e irá parar a busca ao encontrar a primeira ocorrência. Também é possível indicar programaticamente (dentro de um método do Managed Bean ou Seam Component) qual contexto deve obter o objeto sem realizar uma busca nos vários contextos.

quarta-feira, 9 de julho de 2008

Inglês na ponta dos ouvidos

Uma excelente maneira de melhorar o ouvido para o inglês é acompanhar os artigos do site VOA News Special English. Este site é dedicado a publicar notícias para as pessoas que não tem o inglês como a primeira língua ou que estão aprendendo. Contudo, o que torna este site interessante são algumas características peculiares:
  • As notícias estão disponíveis em áudio (mp3 e real audio);
  • Sempre tem a transcrição do áudio (texto em inglês);
  • Os narradores falam a uma velocidade de 2/3 da conversação normal;
  • Todas as notícias utilizam um vocabulário restrito em até 1.500 palavras;
  • Todas as notícias tentam usar sentenças com uma única idéia em cada uma;
  • Um artigo novo com transcrição e áudio é publicado com frequência quase diária.
Torna-se possível definir uma meta de ouvir uma ou duas notícias por dia e várias vezes. Com um programa de estudo diário será possível:
  • Ler a transcrição sem o acompanhamento do áudio;
  • Ouvir o áudio (mp3, por exemplo) sem ler a transcrição junto;
  • Por fim, ouvir o áudio e acompanhar com a transcrição.
Mas se ainda não for suficiente, o site VOA News Special English também disponibiliza um programa diário de meia hora com um resumo das notícias e com as mesmas características citadas acima. Basta experimentar: RealAudio Stream ou MP3

Porém, se você ainda não se sentir satisfeito, tem o site VOA News com um programa de rádio 24 horas com notícias e discussões em inglês na velocidade normal. Parece a rádio CBN aqui do Brasil. Para experimentar basta acessar: Listen Live Listen Live

Para esquentar de verdade o ouvido tem a dica de podcast do CNET chamado de Buzz Out Loud (BOL). Com programas diários de 30min a 1 hora, o inglês é puxado e falam muito sobre tecnologia. Vale a pena conferir:




Bom divertimento!

Acompanhem estes sites via RSS: BOL, VOA News Special English e VOA News.

sexta-feira, 4 de julho de 2008

Seam Contexts Ilustrado

Preparei a ilustração ao lado para tentar representar os contextos do JBoss Seam. Em estudo recente comecei a compreender melhor estes contextos e a diferença entre Context Variable e Instance Variable. O primeiro tipo de variável representa uma referência para um objeto a partir de um contexto com um nome definido (como os pontos A, B e C na ilustração). O segundo tipo representa um atributo dentro de um Seam Component (como os pontos D e E na ilustração). A partir deste entendimento começou a ficar claro para mim o conceito de Bijeção, ou melhor, a diferença entre injection e outjection. Mas a explicação dessa diferença deixarei para outro post!

quinta-feira, 3 de julho de 2008

Apagão na Internet de São Paulo

Voialá ... Agora temos internet novamente. Incrível, este foi o maior apagão da internet no Brasil. Foram mais de 24h fora do ar! Eu estava tentando blogar ontem a noite e o link saiu do ar. Fiquei muito p... da vida. E hoje vi que não era simplesmente a minha conexão.

Impressionante como somos muito dependentes desta tecnologia. Foram vários setores públicos (polícia, bombeiros, lotéricas, poupa tempo, além de usuários domésticos e empresariais). Como esta rede é frágil. Realmente impressionante!

Vejam um vídeo do globo.com

quarta-feira, 2 de julho de 2008

Blade Runner: O livro vs o filme

Finalmente tomei coragem e li o livro "Blade Runner, O caçador de Andróides". Este livro foi a inspiração para o filme de mesmo nome dirigido por Riddley Scott e estrelado por Harrison Ford. O nome original do livro é "Do Androids Dream of Electric Sheep?". Mas, com o sucesso do filme as novas edições do livro foram renomeadas.

Este livro foi um caso atípico para as minhas estatísticas. Geralmente o filme nunca supera o livro. Contudo, neste caso o livro apresenta uma história um pouco diferente do que foi apresentada nas telas. O filme está anos-luz na frente do livro. Mesmo assim, vale a pena ler o livro.

O livro mostra alguns aspectos do personagem principal interpretado por Harrison Ford. Rick Deckard é casado no livro e vive as mesmas paranóias da população de uma maneira geral. Tem a mesma necessidade de possuir um animal como símbolo de status, mesmo que seja um animal artificial. Começa a demonstrar empatia pelos andróides e se envolve com a andróide Rachael. Um ponto curioso no livro é a tentativa de confundir o Deckard com a idéia de que ele poderia ser um androide também e que ele não seria capaz de distinguir (uma das mesmas idéias presentes em Matrix!).

Já o filme mostra um policial solitário e que foge com a andróide Rachael como sua amante. Inclusive, o filme sugere que o Deckard realmente é um andróide e ele não sabia. Simplesmente fantástico.

O Spock não é só tecnologia, mas sci-fi também! :)

Esses fãs me cansam!

Fotos do OpenTDC

A turma da Globalcode disponibilizou as fotos do evento OpenTDC: http://picasaweb.google.com.br/comunidade.globalcode/OpenTDC2008
Eu apareço em algumas! :)