15 julho 2008

Prepare-se para o JustJava 2008

Dicas10 a 12 de Setembro de 2008
São Paulo - SP
Chamada de Trabalhos
http://www.sucesusp.org.br/justjava2008/

Hoje o JustJava já está em sua 7a edição. E desde 2003, o evento é um sucesso no Brasil. Veja alguns pontos altos que se pode encontrar:

  • Muitas palestras técnicas e de boa qualidade (ok, já teve algumas ruins também)
  • Muita troca de experiência e cultura de trabalho (networking!)
  • Discussões sobre um tema nas muvucas, onde tinhamos até uma cerveja para acompanhar (hoje vai ser difícil com a nova lei de transito)
  • Aprender novidades, com outros feras no assunto

Então veja abaixo, um pouco mais sobre um PR do evento e o convite para submeter palestra.

O Evento

O JustJava é um evento técnico, feito por brasileiros, para brasileiros, e apresentado por desenvolvedores, para desenvolvedores!

O objetivo do evento é mostrar o que esta está acontecendo no mercado Java no Brasil, quais são os projetos Java mais importantes, como o desenvolvedor brasileiro tem usado a tecnologia, e principalmente, incentivar a integração daqueles que fazem a tecnologia Java crescer no Brasil - os desenvolvedores.

Você não pode ficar de fora do JustJava - o Evento Java da Comunidade Brasileira, e o grande evento de Java do ano no Brasil.

O JustJava, já na sua sétima edição, é o principal evento técnico realizado pela Sociedade de Usuários Java, um dos mais ativos grupos de usuarios Java do Brasil. Na primeira edição, o JustJava foi o maior
evento de Java realizado ate então no Brasil!

Venha ser um palestrante

Se você quer apresentar uma palestra no JustJava, o momento de submissao é agora. Ate o dia 18 de julho, estaremos recebendo e avaliando as palestras para compor e montar um evento técnico de alta qualidade.

Se você tem um projeto inovador e quer mostrar suas soluções criativas para os problemas encontrados, se você quer aprofundar as discussões sobre a tecnologia Java, seja um palestrante no JustJava.

Para submeter sua palestra, preencha o formulário que se encontra no site abaixo, na opção "Chamada de Trabalhos"

http://www.sucesusp.org.br/justjava2008/

Outras informações

http://www.soujava.org.br/display/v/JustJava+2008

02 julho 2008

O segredo da Nokia

O site Gizmodo escreveu sobre um segredo que a Nokia (NOK) promete lançar na próxima Segunda-feira, dia 7 de Julho às 5 AM (provavelmente, horário local da Finlândia).

Como diz o Gizmodo, a Nokia realmente conseguiu chamar a atenção com este site. O hotsite é sinistro, bizarro e curioso. Diz a Nokia que será algo estranho e jamais visto até a data do lançamento. Parece que para acessar o conteúdo na data do lançamento, será necessário descobrir - e juntar - algumas informações a respeito da invenção da luz por Edson, o avião dos irmãos Wright e a Apollo 11.

Já assisti ao video-conceito do celular Morph, mas duvido que seja este o lançamento que eles prometem fazer, já que o video-conceito está muuuuuiiito para conceito. Mas, é a Nokia...

Segue minhas suspeitas:
  • Um skin-cellphone (parecido com o Morph, mas real)
  • Um SDK para o Symbian OS
  • Um celular com nanotecnologia (vai que eles conseguiram?!)
  • Um celular sem teclado, mas com uma patcha funcionalidade de vídeo, voz, reconhecimento de gestos e diabo-a-quatro (iPhone killer)
Ficou curioso? Acesse... ou melhor: Open at Own Risk. E diga, quais as suas suspeitas? Comente! :-)

[]'s

iPhone, problemas e clone de cachorro

Então você foi um daqueles apressados que comprou um iPhone antes mesmo de uma empresa brasileira oficialmente lançá-lo no Brasil. Legal, bacana... você desbloqueou e habilitou seu chip da TIM/Claro/Vivo/BrT ou Oi! nele. Show de bola. Apesar de mesmo você saber que o iPhone não é o melhor celular do mercado, você se encantou com a sua beleza, seus efeitos, gráficos e até a frescurinha do toque de tela. Apesar de você não ter se importado com o fato de ele não ser 3G nem com a falta de flash na câmera ou sua baixa resolução, achou ele sexy e pop, gostou da idéia de ter um celular sem teclado e poder girar no ar e ver a imagem ser orientada automaticamente. Você tanto não ligou para tantos detalhes, que também não se importou com o detalhe do preço: pagou o que tinha que pagar para trazê-lo do exterior.

Agora você possui um iPhone que não é 3G, comprado no exterior, sem contrato com uma operadora brasileira e sem uma nota fiscal legítima de contrato com a Apple. Meus pêsames, mero mortal. Você é só mais um que compra lançamentos para querer aparecer no colégio com o último hype do mercado, ou no trabalho mostrar cada detalhe inútil que você encontra no aparelho. Passa horas no café brincando com seu iPhone à espera de algum curioso aparecer e perguntar-lhe: "Nossa! Um iPhone! O que tem nele?" e você poder mostrar-lhe a gata que limpa a tela ou a pipoca estourando para depois ser comida num patético efeito de ótica.

Agora meu amigo, você possui um iPhone que não é 3G, sem contrato e sem qualquer utilidade. Não adianta chorar na Claro ou na TIM - operadoras com maiores chances de lançar o iPhone 3G no Brasil - pois elas não vão trocar seu aparelho pelo novo. Agora meu amigo, você possui um junk gadget. Enquanto outros - mais inteligentes e pacientes - comprarão um modelo melhor, e com contrato para futuras trocas, você se pergunta: "O que farei com meu Junk iPhone?". O site MacWorld responde:
  • Calço para aquela mesa da sua avó, penca (a mesa, não a sua avó!), na sala
  • Isca para assaltantes - deixe no carro para caso um ladrão apareça. "Pode levar!!"
  • Espelho para a sua namorada retocar a maquiagem
  • Peça para gerar conversa - "Ei... isso daí é aquele iPhone antigo?!?!"
É meu amigo. Você pensou que era o esperto... Esperto é o Steve Jobs que já sabia há muito tempo que ele mesmo lançaria um 3G. Ou você acha que nos laboratórios da Nokia já não exista um skin-cellphone?

Deveriam fazer alguma coisa sobre todos os problemas
Ao invés de clonarem cachorros por ae...

Enquanto lia um artigo, o autor mencionou um outro artigo escrito em 21 de agosto de 1996. O site The Onion escreveu sobre os problemas do nosso dia-a-dia. Por que ninguém resolve as coisas mais simples da vida?! Assim que terminei de ler, atualizei meu Google Reader e li esta notícia: Cachorro que ajudou a achar vítimas do 11/09 será clonado nos EUA.

Sério... o que leva a empresa BioArts International a clonar um cachorro de 15 anos com problemas degenerativos?!
De acordo com a empresa, especialistas acreditam que sua condição pode estar ligada ao tempo que ele ficou em contato com os gases tóxicos do local do atentado.
É um problema degenerativo nas patas traseiras. Ele tem 15 anos, pelo amor de Deus!! Até parece que uma poeira iria afetar a pata de um cachorro!!

Porém, lembro-me agora de quando assisti ao filme Sicko do Michael Moore. Lá, uma pessoa (não um cachorro) do 11/9 aparece com problemas respiratórios, graças à poeira da destruição, enquanto ela resgatava sobreviventes. Mas ela custou a encontrar ajuda do governo ou de empresas/hospitais particulares. Como é dito no The Onion:
We're living in a time with super computers and underwater sea stations and million-dollar laboratories. And still, everyday when I watch the TV news shows I see all sorts of problems! [...] So many people are dying in the world. We have laser surgery, don't we? Isn't somebody using that? They put a baboon heart in a human, you know. They can make body parts out of plastic and put little camera probes in your body. Then why are there so many people dying?
É triste isso. Sério. Clonar um cachorro?! Pra quê ?!?! Por que não ajudam com as famílias pobres de New Orleans que ainda sofrem com o Katrina, ou não usam toda essa tecnologia via satélite e acabam logo com as plantações de coca na Colômbia? Ou então melhoram o transporte das cidades caóticas como São Paulo. Sério. Alguém deveria parar de resolver problemas inúteis e olhar para os verdadeiros problemas do nosso dia-a-dia - da humanidade.

E você, quais problemas no seu dia-a-dia gostaria que a Física Quântica, ou o supercomputador da IBM, ou ainda a NASA resolvesse? Comente... :-)

Ah... já decidiu o que fazer com o seu iPhone? Problemão esse, não?! :-P

[]'s

30 junho 2008

Cache do Wicket em Cluster: entenda o processo


Muita gente quando descobre que o Wicket guarda tudo na sessão do usuário, rapidamente lança duas perguntas de grande peso:

  1. Guardar tudo no HttpSession não estourará a memória do servidor?
  2. Não ficará lenta a replicação destes objetos entre os nodes de um Cluster?
Para começar, é verdade sim, que o Wicket guarda tudo... tudo... na sessão do usuário. O objeto HttpSession é alimentado a cada click do usuário com as instâncias das páginas (e toooodas as suas versões anteriores - Suporte Backbutton), assim como os dados destas páginas, de formulários, estados de componentes (visível, escondido, selecionado, etc) e tantas outras informações forem necessárias. Mas, não se preocupe. Assim como o Garbage Collector se encarrega de cuidar da memória da VM, o Wicket (>= 1.3) se encarrega de cuidar da sua "memória". Para isso, existe o DiskPageStore.

Antes de continuar, explicarei agora os motivos que levam o Wicket a funcionar desta forma (enxer a memória). Se você já sabe, então pule dois parágrafos. :-)

O Wicket armazena na HttpSession as instâncias da página primeiramente para que quando você, desenvolvedor, construir uma página ou um componente, sinta-se num ambiente verdadeiramente Orientado a Objetos. Diferentemente dos frameworks action-based, aqui é possível manter referências de objetos, variáveis locais e de instância, declaradas sem qualquer problema pois quando o usuário clicar, o objeto que receberá o evento, é o mesmo que foi criado no início. Ótimo não? Sem dúvida! Não precisa-se saber de "parâmetro do request" ou qualquer outra tranqueira Web. É Swing-like, Java puro, POJOs e até parece desktop de verdade.

Pois bem, com os objetos na HttpSession, foi possível implementar algo ainda mais bacana: suporte ao backbutton do browser. Cada vez que o usuário submete alguma coisa a um componente, o estado deste componente é guardado na Session, como uma versão. É como se fosse feito um snapshot. Se o usuário clicar em voltar, e submeter alguma coisa novamente, o Wicket tem como saber que alguma coisa ali está diferente e poderá evitar problemas como submissão duplicada de registro, ou atualização indevida de dados já existentes. Maravilha!

E então você pensa: "que ótimo, Wicket me dá várias funcionalidades a troco de uma sessão de 15Megabytes por usuário". É verdade que se não houver um cuidado, a sessão pode explodir sim. Aqui vão algumas regras então para minimizar os riscos de uma HttpSession Shrek:
Como funciona o SecondLevelCacheSessionStore?
Agora, a parte que nos interessa: Wicket's Garbage Collector!

O "lixo" que o Wicket precisa remover é basicamente, versões antigas das páginas/componentes criados pela navegação do usuário no site. É possível, mas pouco provável, que o usuário clique num Voltar e tente fazer algo. Por isso o framework elimina versões muito antigas (o padrão é manter somente as últimas 5 em deployment mode). Mas e se o desenvolvedor quiser armazenar mais versões, sem comprometer a memória do servidor, e conseqüentemente proteger sua aplicação de ataques Denial of Service? Para isso serve o SecondLevelCacheSessionStore.

Sua utilização depende do arquiteto do sistema em definir no Application do Wicket, que o framework deve utilizá-lo. Porém, antes de apresentar o código, vamos entender como os objetos são persistidos. A persistência é feita por algum objeto que implementa a interface IPageStore. Este objeto será responsável por persistir - storePage() - seja em banco de dados, arquivo flat ou qualquer outro meio, os objetos que o framework considerar não mais necessários na sessão, ou quando o usuário precisa ver algum dado mantido em versão anterior de algum componente - getPage().

A implementação padrão para a interface IPageStore, é a classe DiskPageStore. Nela, ocorre o processo de serializar as páginas e toda a árvore de objetos ali contida, para posteriormente salvar no disco do servidor. Problema de memória gigante resolvido! Mas... pera. Você possui um cluster? Hmm... Será que o Wicket vai funcionar sem problemas ali? Se ele arquivar as páginas no disco de um servidor, o que acontecerá em outro nó do cluster?!

Wicket em ambiente Clusterizado
A grande sacada...

Serialização é um processo complicado e lento. Não falei antes, mas é importante lembrar que todos os objetos que ficarem na HttpSession, devem implementar Serializable. Isto é importantíssimo; se houver um não serializável, o Wicket vai gritar no log. Agora, se tudo correr bem, os objetos serão serializados e persistidos no disco pelo objeto DiskPageStore, estando o aplicativo Wicket em cluster ou não.

Num ambiente Cluster regular - que segue os padrões das configurações simples e funcionais (ex: Tomcat em Cluster) - o framework inteligentemente coloca as páginas já serializadas no processo de replicação, para que quando o objeto HttpSession chegar no outro nó, não há perda de processamento em realizar a tarefa de serialização duas vezes. As páginas também não são de-serializadas; vão direto para o DiskPageStore que as armazena para uso futuro, se necessário. Este mecanismo é o que garante a performance do framework neste tipo de deploy.

Espero poder ter desmistificado agora a idéia de que Wicket estoura com a memória dos servidores, nem tão pouco que não suporta ambientes clusterizados.

Hands-On: Configurar a aplicação para utilizar SecondLevelCacheSessionStore
Mão na massa...

Para encerrar, veja como é simples configurar o SecondLevelCache com o DiskPageStore:
public class MyApp extends WebApplication {
   @Override
   protected ISessionStore newSessionStore() {
      return new SecondLevelCacheSessionStore(this, new DiskPageStore());
   }
}
E agora, que tal? É fácil ou não é?! :-D

PS: o Anjo Negro ataca novamente... desta vez, com gol de letra!

[]'s!

25 junho 2008

URLs simples no Wicket e o novo Eclipse

Uma das coisas bacanas no Wicket é a possibilidade (extremamente simples) de definir URLs RESTful, ou apenas "URLs simples" para as páginas do sistema.

No artigo Wicket Creating RESTful URLs é possível ver como o framework provê de forma bem objetiva, na API, esta funcionalidade. Mas, resumindo: se você quer definir URLs mais amigáveis, diferentemente dos padrões do framework, que são mais ou menos assim:
http://www.example.com/wui/?wicket:bookmarkablePage=%3Anl.stuq.demo.SomePage
É possível deixá-las assim:
  • http://example.com/users/
  • http://example.com/users/{user}
A facilidade de desenvolver, em puro Java, com este framework é o que faz a diferença dentre tantos frameworks Web. O padrão ZeXCo, ou apenas... Zero-XML-Configuration, mais uma vez mostra-se eficáz.
  public WicketApplication() {
Class pageClass = ProductDetailPage.class;
String[] params = new String[]{"id"};
MixedParamUrlCodingStrategy productURLS = new MixedParamUrlCodingStrategy("products", pageClass, params);
mount(productURLS);
...
Isto é o suficiente para acessar a página desta forma: http://example.com/products/23. Onde: "products" indica a página e "23" é o id passado via parâmetro para a classe. Agora, como interceptar este parâmetro? No construtor da página é preciso receber o objeto PageParameters:
  public ProductDetailPage(PageParameters params) {
String id = params.getString("id");
Product product = productService.loadById(id);
setModel(new CompoundPropertyModel(product));
...
}
Pronto! Agora as URLs estão beeeeem bonitinhas... :-P


E para terminar o post, recebi o e-mail agora sobre o anúncio do lançamento do Eclipse Ganymede (nome meio ... gay, não? - mas para os curiosos, Ganymede é uma lua de Júpiter). O pacote oferece um release único e integrado de 23 projetos da Eclipse Foundation.

Há também um concurso para os melhores blogs que postarem sobre o Ganymede; não adianta ser apenas um comentário; o que eles querem mesmo são reviews bem detalhadas... eu to fora! Mas se você quiser participar, acesse a página Ganymede Around The World.

É isso. Agora, é fazer o download do Eclipse Ganymede, do Apache Wicket 1.4m2 e desenvolver aplicações Web com maior produtividade, qualidade e diversão! :D

[]'s
Contato

Email:bruno.borges(at)gmail.com

LinkedIn: www.linkedin.com/in/brunocborges
Twitter: www.twitter.com/brunoborges
Comprei e Não Vou
Rio de Janeiro, RJ Brasil
Oracle
São Paulo, SP Brasil