terça-feira, 30 de março de 2010

Ginga-J: interatividade em nossa TV, não perca essa oportunidade!

Java esta presente no Sistema Brasileiro de TV Digital Terrestre com Ginga-J.
Você que é desenvolvedor Java ou gostaria de ter interatividade em nossa TV, não perca essa oportunidade!
Agora chegou a hora da comunidade mostrar a força na votação da ABNT.
O Fórum do Sistema Brasileiro de TV Digital Terrestre (SBTVD), trabalhando com vários seguimentos da indústria e universidades brasileiras, criou a importante normatização para especificação da TV Digital.
Um processo que esta sendo finalizado com a votação para aprovação da norma brasileira Ginga-J na Consulta Pública da ABNT.
Passos para a votação (com base no post do Dimas Oliveira da Sun / Oracle http://dimas4u.multiply.com/journal/item/147/Vote_Ginga):

1. Acesse o link http://www.abntonline.com.br/consultanacional/default.aspx
2. Será apresentada uma lista de CB . Escolha ABNT - CEE85 - Televisão  Digital
3. O projeto da Norma 06 Vol. 4 e a errata N06 Vol. 1 serão apresentados;
4. Um cadastro de email e senha será requisitado. Com o cadastro feito, você estará apto a votar.
5. Vote com a opção "Aprovado sem restrição".

Lembrando que houve aprovação histórica do Ginga por completo (e do Ginga-J), na União Internacional de Telecomunicações (ITU-T).
O ISDB-T (Integrated Services Digital Broadcasting Terrestrial) além do Brasil o padrão já foi adotado pelo Equador, Peru, Argentina, Chile e Venezuela. Outros países como Uruguai, Honduras, El Salvador, Costa Rica, Cuba , Moçambique e África do Sul estão em negociações para adoção do padrão.

PS: Acompanhe também a lista de discussão do SouJava sobre TV Digital e a Hash #voteginga no Twitter.

Carlos Fernando Gonçalves
JUG Leader Java Noroeste
www.javanoroeste.com.br
http://twitter.com/javanoroeste
http://www.twitter.com/mercuriocfg

quarta-feira, 24 de março de 2010

2º Bate Papo do SP-GTUG - Divulgação

Pessoal,

Para aqueles que já estiveram presentes nas atividades do SP-GTUG (encontros ou bate papos na Globalcode), e para os que ainda não puderam estar presentes, teremos um novo bate papo acerca de mais duas tecnologias do Google: AdSense e Python no GAE. Este será o nosso segundo bate papo do SP-GTUG, nos mesmos moldes dos minicursos da Globalcode.

Local e data

O bate papo acontecerá no dia 27/03/10, das 10:00 às 13:00 na Globalcode. Para fazer sua inscrição e participar acesse a home da Globalcode e vá até a parte de "Minicursos Gratuitos da Semana".

Conteúdo das apresentações

Abaixo seguem as descrições passadas pelos palestrantes:

Título: "Algoritmos em Python"
Resumo: Python é uma linguagem considerada frugal, simples, sem ser simplória! Entenda como construir algoritmos ninjas com essa linguagem, adotada pela Google e pelo MIT. Veremos muito, muito código, desde algoritmos clássicos até tutoriais do Google App Engine. A palestra é baseada nos seguintes livros: Learning Python, 4rd ed, Head First Programming e Programming Google App Engine. Utilizo estes livros nas disciplinas que ministro na FATEC e vou levá-los para quem quiser dar uma olhada. Por coincidência todos foram lançados em novembro do ano passado!
Ministrada por: Fernando Masanori (http://www.google.com/profiles/fmasanori)

Título: "Google AdSense"
Um dos aplicativos do Google mais antigos, o Google AdSense permite aos editores de sites exibir anúncios relevantes ao conteúdo das páginas gerando receita aos participantes do programa. A palestra abordará tópicos relacionados às ferramentas do aplicativo, e as mais recentes mudanças implementadas pelo Google, que promete maiores receitas de publicidade com foco em pequenos anunciantes.
Ministrada por :Deise Garrido (www.imaginedaisies.com)

Projeto "Python no GAE" - SP-GTUG

Tomando como "gancho" a apresentação sobre programação Python, que será ministrada pelo "Masa", o SP-GTUG está iniciando um projeto para gerenciar as atividades do grupo. Ele está sendo escrito em Python e rodará no AppEngine. Este projeto foi iniciado pelo Robson Dantas e no momento está angariando colaboradores (!). Faça parte da lista de discussão do SP-GTUG e tenha acesso a mais informações.

Portanto...

Se você ficou interessado em aprender ou ter noções de Python, conhecer o pessoal do grupo que já programa nessa linguagem, conhecer mais sobre Python no GAE ou participar de projetos envolvendo ambos não perca a oportunidade de estar nesse bate papo de sábado!

Até lá e confirme sua presença!

Rodrigo Ribeiro
http://templariodatecnologia.wordpress.com

Conheça e faça parte do SP-GTUG!


Pessoal,

Vocês conhecem (ou não) alguma tecnologia do Google ou tem interesse em conhecer outras? Querem estar por dentro das novidades sobre Android, AdSense/AdWords, GAE, GWT, Maps e outras tecnologias do Google?

Então tomem ciência da existência do SP-GTUG (Grupo de Usuários de Tecnologia Google de São Paulo). Nesse grupo discutimos as novidades das tecnologias do Google por meio de bate-papos, encontros, apresentações, lista de discussão e projetos. Abaixo estão mais informações e esclarecimentos para que vocês se sintam "encorajados" a participar das iniciativas.

Mas, o que é o SP-GTUG e como surgiu?

A idéia para formação de um GTUG em SP partiu de algumas pessoas presentes no Google Developer Day 2009. Victor B. Vieira, André Pantalião e outros foram os idealizadores do SP-GTUG, que era de imprescindível existência para uma cidade como São Paulo, pelo seu tamanho, poder econômico e tecnológico que são indiscutíveis. Outros grandes estados do Brasil, como Minas Gerais, Santa Catarina e Rio de Janeiro já tinham seus GTUG’s formados e com uma comunidade em crescimento. São Paulo não podia ficar de fora!

Quais foram as atividades do grupo até agora?

Até o momento o grupo já organizou 3 reuniões presenciais (2 encontros para geração de discussões e idéias para o crescimento do grupo e um bate-papo com apresentações, no estilo dos minicursos da Globalcode), fora as discussões e disseminação de material técnico e links informativos pela lista de discussão. Mantemos um blog para que interessados escrevam artigos técnicos e estamos "bolando" projetos para "por a mão na massa" em algumas tecnologias do Google (programação em Python no GAE, por exemplo). Abaixo temos uma foto do pessoal presente na primeira reunião do grupo, em 15/08/09, na Globalcode.


As atividades principais então se resumem nos seguintes tópicos:

  • Encontros (pelo menos um por mês);
  • Compartilhamento de conhecimento por:
    • Apresentações;
    • Mini Cursos;
  • Produção de conteúdo:
    • Publicação de Artigos;
    • Desenvolvimento de aplicações, para servirem de exemplos.
Os reports dos eventos anteriores você encontra nos links abaixo:
Agradecemos ao apoio incondicional da Globalcode na cessão do espaço para as reuniões do grupo (todas no caso...rs) e na divulgação dos encontros que vem sendo de grande valia. Valeu Globalcode pela parceria!

Como faço para participar?

Nossos encontros e bate-papos tem em média a presença de 20 a 30 pessoas. Sabemos que existem muito mais pessoas interessadas em conhecer, participar ou contribuir em alguma tecnologia do Google.

Você é um deles? Tem interesse em participar das "causas" do nosso grupo? Então disponha-se a participar dos bate papos que estão por vir ! Assim teremos mais “especialistas” e interessados dispostos a trocar/gerar conhecimento.

A participação de mais colaboradores criando conteúdo no blog, participando das reuniões, enviando dicas na lista de discussão e criando projetos Open Source é o que levará o SP-GTUG a frente. Então, faça a sua inscrição e participe da lista de discussão do SP-GTUG. Fique por dentro das atividades e dê suas opiniões também!

Vejo vocês no grupo e até mais!

Rodrigo Ribeiro
http://templariodatecnologia.wordpress.com

CInTeQ 2010: Rex Black e testes ágeis

"De chiquilín te miraba de afuera ...", começa o tango. "Quando era moleque te olhava de fora". Essa nostalgia tangueira foi evocada quando li algumas coberturas do CInTeQ 2010, que aconteceu aqui mesmo em SP nos dias 22 e 23/03. Infelizmente, não pude comparecer. Felizmente, foi anunciada uma nova edição para o próximo ano, e farei todo o possível para participar.

Da cobertura, me chamou a atenção o foco de algumas das palestras, particularmente a do Rex Black (um dos papas do teste de software), sobre agilidade. Gostaria muito de ter assistido a palestra. Segundo a cobertura do Fabrício Ferrari, do QualidadeBR (http://bit.ly/9Tw2Ys) , ele abordou assuntos como o papel da automação, gestão dos testes no contexto de Scrum, testes exploratórios e testes baseados em risco.

É ótimo ver que, também na área de testes, os conceitos da agilidade começam a fazer parte da corrente principal dos projetos de tecnologia da informação. Talvez no Brasil ainda a gente esteja bem no início: lá fora agilidade em geral já é "mainstream".

Até pouco tempo atrás, me sentia um pregador solitário no meio do deserto, tentando mostrar como não é apenas possível, como indispensável adotar pelo menos alguns conceitos de agilidade para poder testar eficazmente. Participo de comunidades ligadas à agilidade e ao teste de software, e vejo que ainda é preciso construir pontes entre elas: as diferenças entre modelos mentais ainda são grandes.

Na comunidade ágil, da qual participo desde que esta começou a se organizar no Brasil (palestrei já no XP Brasil 2002 sobre refactoring com AOP), os profissionais de teste são percebidos em geral como muito ligados ao modelo em cascata e à gestão baseada em comando e controle, e atividades de terceirização de serviços de testes são vistas com bastante reserva: afinal, teste é visto como algo indivisível do desenvolvimento: já fazemos example-driven development, certo ?

Comecei a trabalhar com automação de testes (capture & replay em ambiente AIX/Motif) em 94, depois de fazer um curso de tópicos de teste no mestrado da FEEC/UNICAMP, com o prof. Jino (um dos pioneiros na área no Brasil). A automação estava bem nos primórdios, e mais ou menos naquela época é que começou a se configurar o mercado das ferramentas comerciais de automação de teste baseadas na interface usuário (licenças caríssimas e soluções sem dor).

Essa percepção da automação baseada apenas na interface usuário ainda é forte na comunidade de testes, mas os agilistas vêem com reservas o investimento excessivo nesse tipo de automação, assim como a gestão segregada das atividades de teste e a insistência em documentação formal.

Em contrapartida, o uso eficaz de técnicas de automação para testes de unidade, convergência entre requisitos e testes automatizados (ATDD, BDD) , dev+ops, dublês de teste e padrões de projeto para apoiar a testabilidade (dependências injetáveis, presenter-first) parecem ter um eco bem maior na comunidade ágil: alguns desses conceitos são ainda estranhos para muitos profissionais de teste.

Em suma, ainda há um longo caminho a ser percorrido para unir experiências e avançar nos testes e na agilidade, com o objetivo de ter melhor qualidade e entregar software com mais valor para o negócio. Cada vez dependemos mais de software no dia a dia, para trabalhar, para nos comunicarmos e até para garantir nossa integridade física. Tendo começado com uma letra de tango, termino parafraseando a bossa nova:

"Os pogueiros que me desculpem, mas qualidade é fundamental."

domingo, 21 de março de 2010

Aplicação web com Spring no Cloud Foundry

Um tempo atrás experimentei o mecanismo de cloud da SpringSource chamado de Cloud Foundry (CF). Para isso foi necessário criar uma conta na Amazon Web Services (AWS - infra estrutura de cloud da Amazon) e deixar o número do meu cartão de crédito.

Pude notar que o Cloud Foundry é uma ferramenta que permite a criação e configuração de uma máquina virtual (VM) na AWS com apenas alguns cliques na interface administrativa. A VM criada pelo CF é composta por um Linux da distribuição CentOS, um Apache Web Server, um SpringSource tc Server (Tomcat adaptado) e uma instância de MySQL. Já o AWS é quem hospeda a VM totalmente configurada pelo CF. Também é possível criar diferentes máquinas virtuais diretamente na interface administrativa do AWS.

Tudo começa com a criação de uma conta no AWS e a indicação de um cartão de crédito para as cobranças. Após aguardar até 24h para confirmação do número do cartão, o AWS disponibiliza o acesso à interface administrativa. Através desta interface torna-se possível criar uma VM com qualquer um dos sistemas operacionais disponíveis (CentOS, Windows, Fedora, Ubuntu, etc). Contudo, a máquina criada estará vazia mas acessível via SSH. A partir daí o desenvolvedor deve fazer upload dos softwares necessários e configurar por conta própria estas instalações dentro da VM. Mas, o que mais interessa para testar o CF da SpringSource é a criação um par de chaves digitais para autorizar o CF a acessar a conta no AWS e fazer todas as configurações necessárias, além de criar a VM com todos os softwares indicados anteriormente.

Após ter a conta no AWS e um par de chaves digitais, o próximo passo é criar uma conta no CF e fazer o upload das chaves. A partir desse momento, torna-se possível fazer o upload de um WAR contendo a aplicação web desejada. Esta aplicação pode usar ou não Spring Framework, além de qualquer outra tecnologia Java acessível a partir de um conteiner web.

Através da interface administrativa do CF é possível configurar algumas características do MySQL (se será uma instância única ou um cluster de banco de dados a ser distribuído geograficamente em VMs no AWS). Além do upload do WAR da aplicação a ser instalada automaticamente na VM criada pelo CF, a interface permite indicar o usuário, senha e esquema a serem criados no MySQL e o nome da instância no tc Server para a aplicação.

Ao ativar a VM configurada através do CF, a VM começa a rodar no AWS com um IP e nome na web atribuídos dinamicamente pelo AWS (ou um IP fixo se adquirido no AWS).

Após ter a conta disponível no AWS e no CF, em alguns minutos uma VM estará rodando e acessível através da web com todos os softwares indicados já configurados e em execução. Os maiores tempos são gastos aguardando validação do cartão de crédito pelo AWS e o upload do WAR para o CF.

Para realizar estes testes e conhecer a infra do AWS e CF, escolhi a VM mais barata que está baseada numa máquina com pouca capacidade de processamento e uso de linux (U$ 0.085 / hora para uma VM com 10GB HD, ˜2GB ram, ˜1GB swap e CPU Intel Xeon 2.66GHz). Esta configuração pode ser alterada a qualquer momento, resultando em acréscimos no valor hora.

O CF no momento suporta apenas a infra do AWS. Mas, com a aquisição da SpringSource pela VMware, em breve a infra da VMware também estará disponível. Por enquanto, o CF é beta e, por isso, ainda é gratuito. Portanto, a SpringSource não está cobrando, por enquanto, pelo uso do CF. Mas, não podemos nos iludir, ainda temos que pagar pelo tempo de uso do AWS.

A idéia do CF é legal, principalmente para quem não deseja ter trabalho ou não tem skill para uma configuração detalhada de um linux com as ferramentas indicadas. Contudo, quem domina a administração de um linux e a configuração em cluster de um MySQL, talvez não queira pagar pelo custo do CF no futuro ou deseja ter controle total sobre as otimizações.

Vejo uma vantagem no AWS e CF ao usar uma VM. Neste caso podemos instalar qualquer software e usar qualquer tecnologia plenamente. Contudo, a distribuição é limitada à clusterização de máquinas e serviços (como banco de dados ou servidor de aplicações). Já o mecanismo de cloud da Google impõe restrições na aplicação Java em favor de uma distribuição transparente da aplicação. O Google controla onde a aplicação executa, o JPA não é completamente implementado e as operações de JNDI e acesso a disco não são permitidos. Ambos os modelos são interessantes. Podemos escolher o melhor de acordo os requisitos da aplicação.



O exemplo ilustrado acima foi comentado num post no blog do Spring Brasil User Group com o título: Aplicação web completa com Spring Framework 2.5 disponível.

By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/

quinta-feira, 18 de março de 2010

Browsers para todos os gostos e um aperitivo de Selenium nas nuvens

Em 1989, foi derrubado o muro de Berlim. O ensaista Francis Fukuyama decretou o "fim da história": o capitalismo norteamericano havia vencido a guerra fria com seu sistema rival, o antes temido comunismo soviético. De fato, o sistema capitalista se tornou dominante, com a exceção de um par de cenários de reality show onde moram alguns milhões de pessoas: o Pedro Bial de um deles usa um topete midiático e o outro, que não raspa a barba há meio século, virou garoto propaganda da Adidas.

Na geopolítica, de lá pra cá, a hegemonia norteamericana sofreu abalos: vivemos em um novo mundo multipolar, onde outros atores passaram a crescer em relevância, principalmente os BRICs.

Em 2002/2003, a primeira guerra dos browsers também chegou ao fim. Com mais de 95% de participação, o Internet Explorer se tornou o único browser relevante. Os webdesigners colocavam avisos dizendo que, se você não atualizasse seu browser para IE 6, você não teria o privilégio de visitar aquele site.

Assim, para quê se preocupar com os padrões do W3C ou da ECMA ? Se não funcionava para os desajustados, eles que se ajustassem. Naquela época, acessar a web a partir do celular era uma raridade, e apenas os nerds mais radicais insistiam em usar um desktop Linux: assim como os grupúsculos de ultraesquerda que só existem em diretórios de estudantes de universidades públicas, eles se dividiam entre os partidários de cada distribuição. Para o dono da confecção que queria divulgar suas promoções na internet, ou simplesmente falar orgulhosamente para os clientes "agora temos um saitenauebe !", o fato de alguém não poder acessar a página inicial dele usando o Konqueror era irrelevante.

Hoje, a situação é bem diferente. O acesso à web por celulares e PDAs, dos quais apenas uma minoria consegue rodar IE, é corriqueiro. Computadores de mesa, laptops e netbooks comprados nas Casas Bahia já vêm com Ubuntu instalado, e Macs não são mais exclusivos de designers estilosos. Em novos dispositivos como mini-tablets (Kindle, iPad = iPhone de Itu), ainda não se sabe se haverá uma plataforma dominante. O ChromeOS também deve mexer nesse mix.

Nas estatísticas, a participação do IE já se reduziu aproximadamente à metade dos dispositivos que acessam a web, e a metade restante está bastante pulverizada. Hoje, o dono da confecção que passou a depender mais da web e não reformulou seu site IE-only desde 2002, pode estar deixando de fora metade dos seus clientes.

Quem já leu algum outro post deste blog, deve ter percebido que sou viciado em teste de software: como fazer para testar seu site com um número crescente de browsers ? Comprar diversos tipos de hardware, instalar sistemas operacionais diversos e contratar um exército de testadores manuais não parece ser uma estratégia viável para o dono da confecção.

É ai que começamos a pensar no assunto da moda: cloud. Seria possível montar uma infraestrutura com máquinas virtuais, cada uma executando um sistema operacional e um browser diferente, e poder controlá-los remotamente, executando um mesmo roteiro de testes ?

Felizmente, isso é possível. A família de ferramentas Selenium permite montar tal infraestrutura através do Selenium Grid. No site tem um passo-a-passo de como montar um conjunto de nós escravos de Selenium Grid no serviço EC2 da Amazon (http://selenium-grid.seleniumhq.org/setting_up_selenium_grid_on_ec2.html)

Outra possibilidade, talvez menos nerd, é contratar alguém que já fez isso e que oferece o teste como serviço (TaaS ?), a partir dos seus próprios scripts para Selenium, numa nuvem pública. Você paga o que o taxímetro indicar, e recebe os relatórios no conforto do seu browser. Este serviço é oferecido pela BrowserMob (http://browsermob.com). De quebra, você pode fazer testes de carga com um número grande de browsers reais, reutilizando toda a lógica dos seus testes funcionais, em vez de precisar escrever testes específicos para ferramentas como JMeter.

Se, por algum motivo, você não deseja confiar sua preciosa lógica de teste (o que provavelmente não é o caso do dono da confecção) aos cuidados de terceiros, daria para montar uma nuvem interna usando, por exemplo, o Eucalyptus nos computadores que normalmente ficariam ociosos durante a noite.

Pretendo explorar esta possibilidade nas próximas semanas e postar os resultados do experimento.
Aguardem.

Jorge Diz
http://twitter.com/jorgediz

segunda-feira, 15 de março de 2010

10 reasons why we love JSF

1. One-slide technology: it's so simple that I can explain basic JSF with one slide.
2. Easy to extend: components, listeners, render kit, Events, Controller, etc.
3. Real-world adoption: JBoss, Exadel, Oracle, IBM, ...
4. Architecture model: you can choose between more than 100 different architecture.
5. Open-mind community: using JSF you are going to meet very interesting people.
6. We are using JSF the last 5 years and we found very good market for JSF in Brazil
7. Progress: look to JSf 1.1 to JSF 1.2, JSF 1.2 to JSF 2.0. People are working really hard!
8. Many professionals now available
9. It's a standard. It's JCP. Before complain, report and help!
10. Ed Burns, spec leader, is an old Globalcode community friend!

EXTRA: My wife is specialist in JSF. She's my F1 for JSF :)

Nice job JSF community!
-Vinicius Senger

sexta-feira, 12 de março de 2010

Vídeo sobre JSF2 e ScrumToys disponível

O pessoal do JavaBahia disponibilizou na rede o vídeo gravado durante o evento LinguÁgil com a palestra JSF 2.0 e ScrumToys. Este vídeo traz a contribuição da Globalcode no evento ao falar sobre o que é JSF, as deficiências do JSF 1.2 como motivação para as melhorias no JSF 2.0 e a execução ao vivo e a cores do projeto demo ScrumToys (com direito a um bug no final!). Vale a pena conferir!

JSF 2.0 e Scrum Toys from LinguÁgil on Vimeo.

A demonstração completa do ScrumToys (sem bugs!) foi apresentada em outro post neste blog através de um vídeo disponível no youtube. Vejam em: Globalcode contribuiu pro LinguÁgil 2009 em Salvador/BA.

Instruções para baixar todo o código fonte do projeto ScrumToys estão disponíveis no post: JSF 2.0 e ScrumToys. Além de um vídeo completo ilustrando como executá-lo através do NetBeans 6.8 em: ScrumToys disponível no NetBeans 6.8.

By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/

quarta-feira, 10 de março de 2010

PrimeFaces com JSF2 no ScrumToys

O JSF traz um grupo de componentes visuais prontos, a partir da versão 2.0 com suporte a Ajax nativo! Melhor que isso é a possibilidade de customizar ou utilizar uma suíte de componentes prontos para "turbinar" o projeto com o minimo de esforço.

PrimeFaces é uma suite de componentes JSF customizados, a maioria com suporte a ajax, conta com um Kit para desenvolvimento mobile, é open source, a documentação é razoável, facíl de instalar e usar. Nesse exemplo utilizo o PrimeFaces 2.0.0, versão com suporte a JSF 2, no ScrumToys.

Conheçe o ScrumToys? ScrumToys é um Projeto Exemplo para JavaServer Faces 2.0 dentro do NetBeans 6.8, criado e mantido pelo time da Globalcode.

É interessante que você tenha o NetBeans 6.8 para fazer esse exemplo, senão tiver baixe aqui. Baixe também, aqui, o PrimeFaces e o configure no NetBeans como biblioteca para o ScrumToys. Inicialmente o PrimeFaces requer a runtime JSF, mas isso pode variar dependendo de quais componentes você utilize, mais informações leia a documentação da suite.

Vamos fazer duas customizações no ScrumToys, no mesmo ponto: a listagem de Projetos (nas páginas web: /project/show.xhtml).

É necessário configurar o PrimeFaces Resource Servlet no web.xml, conforme trecho a seguir:
  ...
  <servlet>
    <servlet-name>Resource Servlet</servlet-name>
    <servlet-class>
      org.primefaces.resource.ResourceServlet
    </servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>Resource Servlet</servlet-name>
    <url-pattern>/primefaces_resource/*</url-pattern>
  </servlet-mapping>
  ...


A primeira customização no ScrumToys é permitir ao usuário redimensionar as colunas da listagem de Projetos, para isso vamos usar o datatable e column redimensionável do PrimeFaces. Adicione o xmlns do PrimeFaces na tag html do página /project/show.xhtml para acessar os componentes, como esse exemplo:
  ...
  <html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.prime.com.tr/ui">
  ...


Agora vamos substituir o componente datatable e columns atual pelo seguinte:
  ...
  <p:dataTable value="#{projectManager.projects}" var="project"
      rendered="#{projectManager.projects.rowCount > 0}"
      id="dtProjects">
    <p:column>
      <f:facet name="header">
        <h:outputText value="#" />
      </f:facet>
      <h:outputText value="#{projectManager.projects.rowIndex + 1}" />
    </p:column>

    <p:column resizable="true">
      <f:facet name="header">
        <h:outputText value="#{i18n['project.show.table.header.name']}" />
      </f:facet>
      <h:outputText value="#{project.name}" />
    </p:column>

    <p:column resizable="true">
      <f:facet name="header">
        <h:outputText value="#{i18n['project.show.table.header.startDate']}"/>
      </f:facet>
      <h:outputText value="#{project.startDate}">
        <f:convertDateTime pattern="#{i18n['project.show.table.header.startDate.pattern']}" />
      </h:outputText>
    </p:column>

    <p:column>
      <f:facet name="header">
        <h:outputText value="#{i18n['project.show.table.header.endDate']}"/>
      </f:facet>
      <h:outputText value="#{project.endDate}">
        <f:convertDateTime pattern="#{i18n['project.show.table.header.endDate.pattern']}" />
      </h:outputText>
    </p:column>

    <p:column>
      <f:facet name="header">
        <h:outputText value="#{i18n['project.show.table.header.actions']}"/>
      </f:facet>
      <h:commandButton styleClass="botaoPostIt" action="#{projectManager.edit}"
        value="#{i18n['project.show.button.edit']}" />
      <h:commandButton styleClass="botaoPostIt" action="#{projectManager.remove}" 
        value="#{i18n['project.show.button.delete']}" />
      <h:commandButton styleClass="botaoPostIt" action="#{projectManager.showSprints}"
        value="#{i18n['project.show.button.showSprints']}" />
    </p:column>
  </p:dataTable>
  ...


Pronto, é só executar o projeto! Veja que as colunas de Nome e Data Início do Projeto podem ser redimensionadas!

A segunda customização envolve o mesmo componente, vamos habilitar ordenação na coluna do Nome do Projeto e ativar paginação via Ajax no na lista de Projetos.
Na segunda tag colunm defina a propriedade sortBy="#{project.name}", veja:
  ...
  <p:column resizable="true" sortBy="#{project.name}"><f:facet name="header">
      <h:outputText value="#{i18n['project.show.table.header.name']}" />
    </f:facet>
    <h:outputText value="#{project.name}" />
  </p:column>
  ...

No datatable ative a propriedade paginator="true" e rows="5", paginando dessa forma de 5 em 5 registros, segue o trecho de código:
  ...
  <p:dataTable value="#{projectManager.projects}" var="project"
      rendered="#{projectManager.projects.rowCount > 0}"
      id="dtProjects" paginator="true" rows="5">
  ...

Execute o projeto novamente.

Simples assim! Novas funcionalidades, sem perder ou quebrar o que está funcionando, fácil e rápido.

Desenvolvimento web baseado em componentes visuais (interface gráfica), foi o que mais me chamou a atenção no meu primeiro contato com JSF. Hoje, depois de 6 anos e alguns projetos utilizando a tecnologia, isso continua me motivando.

Explore o ScrumToys, aprenda os recursos do JavaServer Faces, teste, modifique, participe. Essa é a proposta do projeto!


Mais sobre o ScrumToys:

Mais sobre o PrimeFaces:

[]'s
Eder Magalhães
www.yaw.com.br
twitter.com/youandwe
twitter.com/edermag

terça-feira, 9 de março de 2010

7 Boas Práticas de Desenvolvimento com Spring Framework

Durante o desenvolvimento da apresentação realizada pelo colega Ricardo Jun para o TDC 2009 da Globalcode realizamos uma compilação de várias boas práticas de desenvolvimento com o Spring Framework. Baseado na experiência e pesquisas em sites na internet, estas práticas foram reunidas e selecionadas para a apresentação no TDC. Contudo, algumas boas práticas discutidas não foram tratadas completamente neste evento. Então, reuni neste post algumas destas práticas resultando nas seguintes "7 Boas Práticas de Desenvolvimento com Spring Framework":

Prática 1: Separe a interface da implementação dos componentes

Esta prática favorece a implementação de testes e o uso de mocks, favorece o uso futuro de OSGi e o Spring dm Modules. Diversos serviços gerenciados pelo Spring são aplicados aos componentes através de AOP com proxies dinâmicos.

Prática 2: Configure os componentes de negócios através de anotações e alguns serviços tecnológicos através de XML

Esta prática reduz a quantidade de XML e no futuro teremos uma JSR que permitirá alterar as anotações especificas do Spring para configuração e injeção dos componentes. Além disso, existem casos que só conseguimos configurar alguns serviços através de XML (sem contar o Java Config Module, que foi incorporado ao Spring Framework 3.0), por exemplo, .properties, Entity Manager Factory e datasources.

Prática 3: Prefira as anotações padrões (resultante de JSRs)

Estão disponíveis as anotações padrões definidas na JSR-250 (Common Annotation) e JSR-303 (Bean Validation), por exemplo. Se necessário, ao usar estas anotações, os componentes podem ser migrados ou reusados como EJBs ou em outro framework com suporte a injeção de dependências.

Prática 4: Implemente componentes "thread-safe" (singleton)

Com está prática delegue o estado conversacional para as entidades e para os escopos web. O Spring funciona melhor com componentes singleton desde a sua concepção.

Prática 5: Use o SpringSource Tool Suite ou Spring IDE

Proporciona produtividade ao editar XML, aplicar anotações e obter uma visão geral de quais componentes existem no projeto, mesmo que a configuração esteja pulverizada no classpath por causa das anotações.

Prática 6: Implemente testes usando Spring Test Framework

Simplifica o bootstrap de um ApplicationContext baseado num cenário de testes usando anotações e de maneira bem simples. Além de permitir o uso de mocks, JUnit e TestNG ao delegar boa parte do trabalho para o framework de testes do Spring e deixando no código apenas com o teste efetivamente.

Prática 7: Prefira os produtos do Spring Portfólio

Para problemas recorrentes que já são resolvidos pelos produtos do Spring Portifólio, existe a garantia de uma boa integração com o Spring Framework, além de seguir as mesmas boas práticas na definição de componentes, configuração, modelagem e aplicação de design patterns. Por exemplo, segurança use Spring Security, suporte a OSGi use Spring dm, MVC+Web+JSF+Ajax+JavaScript use Spring Web Flow, enterprise Integration patterns use Spring Integration, Spring + Flex use Spring BlazeDS Integration, Spring + Swing use Spring Rich Client, processos em batch use Spring Batch e se ainda o desenvolvedor não gosta de Java e prefere .NET use Spring .NET.

fonte: Spring Brasil User Group

By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/

segunda-feira, 8 de março de 2010

Impressione os seus amigos com o SpringSource Tool Suite

Como disse o Dr. Tool (Ricardo Jun) durante a apresentação realizada por ele no Casual Class sobre a plataforma Spring: O SpringSource Tool Suite é um Eclipse com esteroides!

Apesar da base do SpringSource Tool Suite (STS) ser o Eclipse, ele não para por aí. Os plugins 'Spring IDE', m2eclipse (suporte a Maven) e integração com o tc Server e dm Server estão presentes. Num único pacote e numa simples instalação já temos um ambiente muito produtivo para usar as anotações Spring, inspecionar a árvore de dependências entre os componentes e numa única visão saber quais os componentes anotados que estão espalhados pelo classpath da aplicação. Além de tudo isso tem o suporte a Spring Roo, Roo Shell e AspectJ. O uso de programação orientada a aspectos (AOP) via AspectJ é simplificado consideravelmente.

Se for realizar um projeto baseado na plataforma Spring, vale a pena dar atenção ao SpringSource Tool Suite e impressionar os seus amigos (e gerentes!) com a produtividade proporcionada por esta ferramenta.

O STS é gratuito e o download pode ser realizado a partir do site da SpringSource: SpringSource Tool Suite.

Confira os slides desenvolvidos pelo Ricardo Jun para a apresentação sobre STS, tc Server e dm Server no Casual Class sobre a plataforma Spring:

By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/

Roo Replay

Durante a demo de Roo no Spring Casual Class cometi um erro, ao executar o Roo Shell em um diretório diferente do que havia sido planejado. Conclusão, os artefatos do Roo foram criados onde eu não queria. Ao perceber o erro saí do Roo Shell, mudei para o diretório correto e avisei: "Vamos ter um replay dos comandos", aproveitando a oportunidade para reforçar como é realmente rápido construir software com o Roo Shell.

Do meio da platéia surgiu: "Não vai me dizer que o Roo tem um comando de replay ?". Tem sim...

http://springbrasil.ning.com/profiles/blogs/roo-replay

Neste post do Spring Brasil User Group também consta a aplicação demo utilizada durante o Casual Class.

Renato Bellia
http://notasingleshot.blogspot.com
http://twitter.com/renatobellia

sexta-feira, 5 de março de 2010

Academia do Programador no Ensino Médio

Logo após o lançamento da Academia do Programador, esta carreira foi apresentada para a Flávia Teresa de Lima, que é a Coordenadora Pedagógica do Ensino Médio da Escola Fernão Gaivota, que após verificar o pré-requisito, o conteúdo e os objetivos, ressaltou:

“Trabalhar este conteúdo ajudaria o desenvolvimento do pensamento lógico, visto que o exercício realizado na resolução de um problema computacional consiste na análise dos objetivos determinados, das ferramentas disponíveis, bem como a definição dos passos necessários para alcançar estes objetivos possibilita a reversibilidade do pensamento e o pensamento antecipatório. Habilidades que são fundamentais para a construção do conhecimento.”

Então a ideia de incluir a Academia do Programador como conteúdo integrante do Ensino Médio foi amadurecendo e foi definido que em 2010 os alunos do 2º ano do Ensino Médio teriam 2 aulas semanais dedicadas a Academia do Programador, totalizando as 80h desta carreira.

A experiência que tive na primeira aula foi interessante, pois quando apresentei o Program-ME os alunos fizeram diversas perguntas interessantes:

“Dá para acender a lâmpada do meu quarto, ao invés de acender esta lampadinha (se referindo ao LED)?”

“Funciona sem estar conectado ao computador?”


“Tem um computador em miniatura aí dentro?”


Acredito que será muito gratificante trabalhar este conteúdo com alunos que estão na faixa dos 16 anos, apresentando este mundo tecnológico ‘por dentro’ e, quem sabe, despertando o desenvolvedor ou inventor que existe dentro deles.


Fiz um post no Globalcoders (Fechando o 2º ano do Ensino Médio com chave de ouro: Programação, Arduino, Automação e Cloud Computing) ao final do ano para compartilhar um projeto realizado com a turma.

quinta-feira, 4 de março de 2010

Andando nas nuvens com a plataforma Spring

Como parte da programação do Casual Class realizado pela Globalcode sobre a plataforma Spring, o Júlio Viegas apresentou sobre como usar as ferramentas da SpringSource para colocar uma aplicação em cloud.

O Júlio falou sobre a ferramenta online Cloud Foundry da SpringSource e mostrou os passos necessários para abrir uma conta no Amazon Elastic Compute Cloud e depois subir uma aplicação web com Spring numa máquina virtual na rede via Spring Tool Suite e o Cloud Foundry.

By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/

Testes: 9° Encontro da ALATS-SP, 6/3 na Globalcode

Neste sábado, teremos a honra de receber nossos amigos da comunidade
de testes aqui no auditório da Globalcode.

A seção São Paulo da ALATS (Associação Latinoamericana de Teste de Software) promove mensalmente estas reuniões, promovendo a troca de conhecimentos dentro da comunidade. A ALATS-SP tem sido muito ativa na evangelização da importância do teste de software para a tecnologia da informação.

Esta campanha de evangelização de testes inclui a figura dos DRAs (Diretores Regionais Adjuntos), profissionais voluntários que promovem palestras, encontros e escrevem artigos na internet. Eu sou um deles.

Se você já atua em teste de software, ou deseja iniciar sua atuação na área, será uma boa oportunidade de absorver conteúdo e trocar ideias com outros profissionais.

Atenção: o evento não é gratuito, pois há uma pequena taxa para custear as despesas da ALATS, e a inscrição deve ser feita até sexta 5/3 às 16:00, exclusivamente através da URL indicada abaixo.

Inscrição, pagamento e mais informações sobre o encontro em

Segue reprodução do anúncio do evento:

---------------------------------------------


9º Encontro Mensal: X-Zone - Framework de Teste Open Source

Data: 6 de março (sábado)
Horário
: 08:30 - 12:00
Novo Local: Av. Bernardino de Campos, 327 cj. 22 – Paraíso (próximo a estação de Metro Paraíso)

Objetivo:
Aumentar o contato entre profissionais da área de Teste de Software e Garantia da Qualidade, bem como estimular a troca de conhecimentos, experiências e práticas de sucesso.


Tema do Encontro:
X-Zone


Conteúdo:

Apresentação do X-Zone e de suas funcionalidades. Trata-se de um framework de teste criado no Brasil por iniciativa do notório Alexandre Bartiê e distribuido como software de código aberto, em que profissionais e empresas podem baixar a ferramenta e utilizá-la gratuitamente, além de poder adaptá-la as suas necessidades.


Agenda:

08:30 Credenciamento e networking entre os participantes
09:00 Posse dos novos Diretores Regionais Adjuntos no mandato 2010
09:15 Claudio Schoeps - X-Zone
10:30 Coffee break e networking
11:00 Continuação da palestra
12:00 Encerramento


Palestrantes:
Cláudio de Vilhena Schoeps, graduado em Engenharia Eletrônica pela FAAP e especialização em Gestão Empresarial pela Business School São Paulo, com mais de 20 anos de atuação em desenvolvimento de sistemas, trabalhos realizados no Brasil e contratados pela Dinamarca, França e Alemanha para empresas dos setores Financeiro, Telecomunicações, entre outros. Atualmente, é responsável pela unidade de consultoria da Auditeste. Atuou como diretor das empresas Dataware, Flexsys e Simplify..


Inscrições:
- Não Associados: R$ 30,00

- Associados ALATS 15% de desconto

A participação na palestra Vale 3 PDTS para a renovação da CBTS
Reserve pelo e-mail sp@alats.org.br

terça-feira, 2 de março de 2010

15 minutos de produtividade com o Dr. Roo

Como resultado do Casual Class sobre a plataforma Spring realizado no dia 26/fev, o Renato Bellia (@renatobellia) preparou e usou os slides a seguir para falar sobre o Spring Roo.

Estes slides não estão formatados como slidecast, mas 15 minutos de gravação da apresentação foram capturados com a caneta mágica que roda Java da Livescribe e podem ser ouvidos através do painel a seguir.



Mais sobre o Spring Roo:
By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/

segunda-feira, 1 de março de 2010

Exemplo de CRUD para o AppEngine(Struts 2 + Google Guice + JPA)

E dando continuidade a série "Who wants to be a milionaire"...

Ok, então você já teve a sua idéia milionária, já deu uma lida no Google AppEngine(GAE) depois do meu último post mas agora tá faltando aquele 'empurrãozinho' para iniciar seu projeto.
Tudo bem, aqui vai um empurrão ladeira abaixo...

Vou detalhar neste post uma aplicação completa(CRUD) utilizando alguns frameworks Java(Struts 2, Google Guice, JPA) sendo hospedada no Google AppEngine(GAE).
Não vou entrar em detalhes específico de cada um dos frameworks pois precisaria de algumas dezenas de posts para isso, o intuito é somente a adaptação necessária para ser executada no GAE, e alguns comentários sobre a arquitetura do projeto.

> Struts 2
Infelizmente não é plug-and-play neste ambiente, porém para utilizar o Struts 2 no ambiente do GAE, as modificações são bem simples.
A primeira delas é em relação ao framework Ognl que para execução de Reflection acaba esbarrando em algumas problemas de segurança.
Para corrigir basta criar um ServletContextListener que desabilita tais verificações de segurança do framework.
Código aqui

A segunda limitação é referente ao framework freemarker. Ele faz uma referência a classe javax.swing.tree.TreeNode que não é permitido pelas regras de segurança do ambiente. Há duas possibilidades de solução, a comunidade responsável pelo freemarker criou um pacote com esta classe já modificada, para rodar no GAE, e outra possibilidade é sobreescrever esta classe removendo as referências.
Código aqui

> Guice
Esse sim é plug-and-play, sem modificações necessárias.

> JPA
Como devem ter notado, o GAE não possui um 'banco de dados' como conhecemos e estamos acostumados com os SGBDR. O Google desenvolveu seu próprio banco de dados, não relacional, que é conhecido por 'BigTable', e diferente dos bancos de dados relacionais que estamos acostumados, a forma de manipulação e organização do BigTable é um tanto diferente. porém a maior parte dessas partiularidades é abstraido dos desenvolvedores ao utilizarem a API de JPA, o framework Datanuclues se encarrega de fazer o trabalho pesado.
Aqui vocês podem ver mais detalhadamente.

Pronto, os três principais frameworks da aplicação, depois das customizações e configurações estão prontos para serem executados.

A aplicação de exemplo que criei é um CRUD simples, com as opções de login/adicionar/excluir/listar e além de um upload de arquivos.
O código fonte, e toda a aplicação podem ser baixados neste link.

Basta executá-lo e modificar segundo a sua aplicação.

> Upload de arquivos
Se quiserem utilizar a opção de upload do Struts 2 com a API de commons.fileupload, funciona sem problemas, porém o meu exemplo eu preferi utilizar a API de Blobstore(ainda em versão beta) disponibilizada pelo GAE.
É uma API bem prática e simples, e facilita muito a vida ao se trabalhar com arquivos.
O que você precisa fazer para trabalhar com ela, é ao fazer um upload, redirecionar o seu destino, ao invés de enviar o arquivo para um servlet/action, você envia para a API de Blobstore que já armazena o arquivo para você, lhe disponibilizando a chave de acesso para este arquivo. E com isso já elimina os diversos problemas que você teria para controlar e armazenar arquivos.
Código aqui.
[Se derem uma olhada no código da minha classe BlobstoreServlet, verão que há alguns códigos de manipulação de imagem com a API de ImageService, caso vocês queiram redimensionar, girar, cortar, etc]

Pronto, agora o que falta para você tirar a idéia do papel?

Algumas observações sobre o projeto:
==>O controle de transação e do EntityManager JPA, está sendo feito atrás do padrão Open Session In View, ou seja, a cada request é uma transação gerenciada por um ServletFilter. Assim evitamos o trabalho manual de controle de transação e principalmente as exceptions de LazyInitialization.
==>O Guice que está controlando toda a injeção de dependência, e está sendo utilizado para separar as camadas da aplicação. Assim caso você queira tirar sua aplicação do GAE e rodar em um servidor próprio, basta mudar as implementações na classe IoCBinder.
==>Para API de Blobstore funcionar em ambiente de produção, é necessário que sua aplicação esteja habilitada a cobrança.

Caso queiram conferir a aplicação rodando online:
http://strust2crud.appspot.com/ (usuário - rafael@yaw.com.br / senha - yaw)

Então é isso. Boa sorte com vossos projetos, e a cerveja pode ser Bohemia ou Original mesmo.

Rafael Nunes
http://twitter.com/rafanunes
http://blog.globalcode.com.br/search/label/Rafael
http://www.yaw.com.br
http://www.globalcode.com.br/instrutores/RafaelNunes