quarta-feira, 9 de setembro de 2009

Resultado da enquete sobre certificações Sun

Olá pessoal,

Chegamos ao resultado de mais uma enquete. Desta vez sobre certificações Sun. Segue abaixo o resultado:

resultado enquete

Pelas respostas dos visitantes do site vimos que a grande maioria (57%) ja possuem a certificação de Programador (SCJP). Logo atrás em segundo lugar, com 38% das respostas estão os visitantes que responderam que não possuem nenhuma certificação.

Em terceiro lugar com 32% estão os certificados em Desenvolvimento Web (SCWCD). Muito próximo, logo abaixo estão os visitanes com certificação Associate (SCJA) e em Componentes de Negócios (SJBCD) com respectivamente 18% e 16% das respostas.

12% dos visitantes que responderam a enquete possuem a certificação de arquiteto (SCEA) e 7% a de Web Services (SCDJWS). Por último ficaram as certificações de desenvolvedor (SCJD) e de desenvolvedor para aplicações móveis (SCMAD) empatados com aproximadamente 6% das respostas.

Nesta última votação tivemos uma participação ainda mais ativa dos visitantes. Em breve teremos novas enquetes e continuem votando.

É isto aí pessoal.

segunda-feira, 31 de agosto de 2009

Apache Native Library no Tomcat ou Jboss

Olá pessoal,

Trabalhando com melhoria de performance de aplicações a algum tempo verificamos algumas mudanças que podem ser aplicadas no servidor de aplicação e que surtem efeito na aplicação como um todo. Entre estas melhorias uma que é uma opção para aplicações que utilizam servidores como o Tomcat e o JBoss é a utilização do Apache Tomcat Native Library (APR).

O Apache Tomcat Native Library é um JNI (Java Native Interface) que provê grande parte das funcionalidades do Tomcat em código nativo ao invés de utilizar Bytecode Java. Isto na prática significa maior velocidade da aplicação, uma melhor escalabilidade e melhor integração com os serviços nativos da máquina. Por default o Tomcat não vem com o APR já compilado e aplicado a distribuição, pois isto tornaria o servidor dependente de plataforma, mas sua utilização é bastante recomendável em ambientes de produção.

Entre as vantagens de sua utilização temos acesso a funcionalidades avançadas de IO (SendFile, Epoll e OpenSSL), funcionalidades do sistema operacional (Geração aleatória de números, status do sistema, etc.) e acesso a processos nativos (Memória compartilhada, NT pipes e Sockets).

Quando o APR não está instalado vemos o seguinte log no servidor de aplicação:
The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

Para instalá-lo utilize os passos descritos em http://tomcat.apache.org/tomcat-6.0-doc/apr.html ou em http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Tomcat+Native+Library.

Assim que ele estiver instalado vemos o seguinte trecho no log do Tomcat:
INFO: Loaded APR based Apache Tomcat Native library 1.1.16.

Realizar os testes para verificar o quanto melhorou no desempenho da aplicação é um processo um pouco complicado, pois algumas operações podem ser mais beneficiada que outras. Em algumas referências vimos um ganho de até 10% na performance da aplicação em geral, mas realmente é um teste difícil de ser realizado.

Em um teste bem curto que fiz verificamos as seguintes medições apenas do tempo de startup do servidor sem e com a API nativa tive os seguintes resultados:

Tempos sem lib native:
2125 ms
2155 ms
2113 ms

Tempos com lib native:
1913 ms
1984 ms
1985 ms

Vimos então um ganho que se aproxima de 10% apenas para o startup do servidor.

É isto aí pessoal. Espero que isto ajude quem necessita otimizar a performance das aplicações.

Quaisquer problemas avisem...

quarta-feira, 26 de agosto de 2009

Implementando página de erro com JSF

Algumas pessoas estão tendo dúvidas sobre como implementar uma página de erro com JSF, e resolvi então criar este post para explicar uma maneira de implementar.

Para se realizar o redirecionamento pode se utilizar o ActionListener do JSF. Segue abaixo um exemplo de implementação da classe deste ActionListener:


/**
* Classe responsável por tratar erros inesperados do sistema.
*
* @author Samuel Delfim
*
*/
public class ExceptionHandler extends ActionListenerImpl {

@Override
public void processAction(ActionEvent event) {
// Obtem o contexto JSF
FacesContext context = FacesContext.getCurrentInstance();

try {
// Executa o método da classe Pai
super.processAction(event);

} catch (Exception e) {

// Se ocorrer um erro inesperado, exibe a mensagem abaixo
context.addMessage(null, new FacesMessage(
FacesMessage.SEVERITY_FATAL, e.getMessage(), null));


// Redireciona para a pagina com o mapeamento 'erro'
// no faces-config.
context.getApplication().getNavigationHandler().
handleNavigation(context, null, "erro");
}
}
}


Pode-se, por exemplo, na classe acima realizar tratamentos diferentes para cada tipo de exceção.

Para aplicar o Listener em uma aplicação jsf deve ser colocado o seguinte trecho dentro do arquivo faces-config.xml:


<application>
<!-- Aplicação do Listener -->
<action-listener>com.thinkworks.handler.exception.ExceptionHandler
</action-listener>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
<locale-config>
<default-locale>pt_BR</default-locale>
<supported-locale>pt_BR</supported-locale>
<supported-locale>es_AR</supported-locale>
</locale-config>
<message-bundle>com.bionexo.mensagens.Mensagens</message-bundle>
</application>


O trecho a ser copiado se refere à tag e deve ser aplicado ao view-handler específico. Neste caso, o ViewHandler utilizado é o do projeto facelets que está sendo utilizado no projeto em questão.

Também no arquivo faces-config.xml deve ser realizado o mapeamento da página de erro.
Segue abaixo um exemplo de mapeamento de página de erro:


<navigation-rule>
<navigation-case>
<from-outcome>erro</from-outcome>
<to-view-id>/pages/erro/paginaErro.xhtml</to-view-id>
</navigation-case>
</navigation-rule>


É isto aí pessoal. Espero ter ajudado...

quinta-feira, 25 de junho de 2009

Configurando o EhCache como cache provider JPA

Olá pessoal,

Hoje vou falar um pouco sobre o EhCache e em seguida mostrarei como configurar o ehcache como provider de cache para o JPA.

Algumas vezes precisamos criar caches para linhas de banco de dados mais acessadas. Entre os problemas para a criação de um sistema de cache temos o sincronismo, o gasto excessivo de memória, o tamanho máximo do cache, entre outros. Devido à grande quantidade de possíveis problemas, escrever um sistema de cache eficiente, seguro e com suporte a sistemas distribuídos é um grande trabalho.

Este é o trabalho do cache de segundo nível do Hibernate (Second level Cache). É possível utilizar este cache com vários providers e um dos mais utilizados é o EhCache. O EhCache é um mecanismo de cache distribuído em Java vastamente utilizado. Ente seus principais recursos temos cache de entidades, de queries, de páginas web, entre outros.

Sua ultima versão está disponível em http://ehcache.sourceforge.net/.

Para configurá-lo como provider de persistência devemos primeiramente adicionar o seguinte trecho ao arquivo persistence.xml:


<property name="cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.provider_class"
value="net.sf.ehcache.hibernate.EhCacheProvider" />
<property name="net.sf.ehcache.configurationResourceName"
value="/META-INF/ehcache.xml" />

Depois devemos criar o arquivo ehcache.xml dentro do diretório META-INF da sua aplicação e adicionar nele o seguinte conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd">
<diskStore path="java.io.tmpdir" />
<defaultCache maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="180"
overflowToDisk="true" diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU" />
</ehcache>


Um exemplo mais completo de arquivo de configuração do ehcache pode ser encontrado em http://ehcache.sourceforge.net/ehcache.xml.

Lembrem-se de adicionar o arquivo ehcache.jar dentro das bibliotecas de sua aplicação.

Depois de configurado então deverá aparecer no log do servidor algo como:


23:16:50,437 INFO [SettingsFactory] Second-level cache:
enabled
23:16:50,437 INFO [SettingsFactory] Query cache: disabled
23:16:50,437 INFO [SettingsFactory] Cache provider:
net.sf.ehcache.hibernate.EhCacheProvider


Depois disto é só começar a utilizar as anotações e o cachê de queries.

Em um próximo post falarei sobre como utilizar o cache de segundo nível com o Hibernate.

terça-feira, 16 de junho de 2009

Resultado da enquete sobre Servidores de Aplicação

Pela resposta dos visitantes vimos que o JBoss, com 16 votos, é o servidor de aplicação mais utilizado para a linguagem Java. Em segundo lugar, logo atrás na pesquisa com 8 votos vem o servidor da Sun, o Glassfish. O WebLogic da BEA e o Oracle IAS vem com respectivamente 4 e 3 votos

image

Queria agradecer todos que votaram na enquete. E continuem votando para que possamos saber a opnião de vocês sobre assuntos relacionados a desenvolvimento e arquitetura.

É isto aí pessoal. Em breve teremos mais enquetes.

terça-feira, 9 de junho de 2009

Dicas de usabilidade para sistemas de busca

Como regra geral segundo Jakob provavelmente você não precisará de um sistema de pesquisas se seu site tiver até 100 páginas. Se seu sistema tem de 100 a 1000 páginas, você precisará apenas de um sistema de busca simples. Acima de 1000 páginas é necessário realmente se investir em um bom sistema de pesquisa.

Na navegação de páginas se perceberam que embora alguns usuários tenham optado por utilizar os sistemas de busca, outros preferiram utilizar os links navegacionais. É importante então seu site prover suporte aos dois tipos de acesso, para que seu site possa ter uma grande quantidade de usuários.

Existe uma lista de razões que fazem com que o usuário tenha a expectativa de que o seu sistema de busca acerte mais do que sites como o Google ou Yahoo. Entre estas razões podemos citar:
  • Quantidade de informações em seu site é menor que a quantidade de informações de toda a web.
  • O contexto é bem conhecido. Se seu site é de carros seu sistema deve saber que um Jaguar é um carro e não um animal.
  • Você sabe quais documentos são mais antigos e os que são de maior relevância para os usuários.
  • Você tem controle sobre o vocabulário do sistema.
Segundo Jakob metade das buscas possuía menos de 14 caracteres. E 95% utilizam menos de 30 caracteres. Tamanho de 30 caracteres então é recomendado para que os usuários consigam realizar buscas eficazes em seu site.

Com relação a buscas avançadas, estas, só são recomendadas se seu nível de usuário for muito avançado, o que na maior parte das vezes não é verdade. Então a sugestão é evitá-las.

Sobre a página de resultados é importante seguir as diretrizes dos grandes sistemas de busca. Entre elas podemos citar:

  • Não há necessidade de numerar os resultados, pois todos os usuários começam a ler do alto.
  • Forme uma lista linear de uma busca com o mais recomendado na parte superior.
  • Cada resultado de uma pesquisa deve iniciar com um título clicável, seguido por resumo de 2 ou 3 linhas.
  • Se nenhum resultado for encontrado avise claramente isto ao usuário.
  • Se apenas um resultado for encontrado, não redirecione diretamente para o conteúdo, uma vez que a expectativa do usuário é ter um resultado.
É isto aí pessoal. Quaisquer problemas avisem...



terça-feira, 2 de junho de 2009

Lista de problemas de usabilidade – Parte 5

Continuando a lista de problemas potenciais de usabilidade iniciada no último post temos então:

8. Palavras inventadas – Há mais tempo na bolha da Internet vários sites criavam o seu próprio dialeto e inventavam palavras. Isto era feito com o intuito de instigar os usuários a explorar o site, mas criavam o efeito inverso que era de confundir, além de prejudicar os sistemas de busca.

9. Conteúdo ultrapassado – Informações ultrapassadas sendo dadas como atuais são problemas sérios de usabilidade e prejudicam a confiança dos usuários no site visitado.

10. Inconsistência dentro de um WebSite – Páginas na web devem ser consistentes. Áreas de sites que não se encaixam no padrão visual do restante dão uma má impressão ao usuário, além de gerar certa confusão.

11. Solicitações prematuras de informações pessoais – Se um estranho te abordasse e perguntasse a você seu nome, telefone, cpf, data de nascimento e identidade provavelmente você fugiria. Esta é a impressão que se passa quando um site pede seus dados prematuramente. A maioria dos sites agora deixa você realizar suas ações como pesquisar produtos, preços, entre outros para depois pedir suas informações pessoais, o que garante uma quantidade maior de clientes. Pedir então os dados prematuramente é um problema grave de usabilidade e deve ser evitado.

12. Vários sites – As empresas criavam vários sites para diferentes produtos e para cada um criava endereços diferentes. Isto é um problema de usabilidade, uma vez que não existia integração e a navegação não ficava unificada. Sites unificados auxiliam os usuários a realizar a navegação.

13. Páginas órfãs – Páginas órfãs são páginas que não levam a nada. Se acessar uma você não conseguirá ir a mais lugar algum. Este é um problema quase extinto, mas merece um comentário, pois quando acontece é uma falha muito séria.

É isto aí pessoal. Em breve postarei mais sobre o assunto.

image

quinta-feira, 28 de maio de 2009

Lista de problemas de usabilidade – Parte 4

Olá pessoal. Acabamos de passar os 10.000 acessos ao site desde que comecei a monitorar os acessos e queria agradecer a todos que acompanham o site. Hoje vamos continuar com a série de problemas de usabilidade começada há algum tempo.

Segundo Jackob Nielsen, treze problemas de design iniciais são menos problemáticos hoje, pois os designers aprenderam a projetar para a Web. Estes continuam a ser problemas potenciais de usabilidade, mas a maioria dos Web Designers aprendeu a utilizá-lo.

Segue abaixo a lista:

  1. Plugins de tecnologias de ponta – Os usuários tem medo de executarem algum download na Internet por medo de vírus e tem medo da instalação de novos plugins nos navegadores. Os designers tiveram o bom senso e reconheceram que não podiam forçar os usuários a utilizarem novas tecnologias e começaram a utilizar tecnologias testadas há alguns anos. Uma recomendação então é esperar pelo menos dois anos para utilizar alguma tecnologia nova no site e não forçar o usuário a atualizar qualquer coisa ao acessar seu site.
  2. Interfaces 3D com o usuário – Interfaces tridimensionais normalmente são excessivamente difíceis de se utilizar e raramente valem o esforço. O problema básico é que imagens em 3D são exibidas em uma superfície bidimensional (tela) e controladas por um dispositivo bidimensional (mouse). Os usuários passam a maior parte do tempo lutando com a interface em vez de visualizar o produto. Interfaces 3D devem então ser evitadas.
  3. Design poluído – Páginas que sobrecarregam os usuários com um conjunto grande de elementos normalmente é pouco utilizado pelos usuários. Elementos em movimento, luzes intermitentes, links pobremente estruturados e textos em excesso devem ser evitados, pois tornam a página muito carregada.
  4. Páginas Splash – Páginas Splash são páginas de abertura aparecem em alguns sites antes da verdadeira página Principal. Segundo palavras do próprio Jackob elas devem morrer, pois dão a impressão de que o site se preocupa mais com a sua própria imagem do que com a solução do problema deles.

    clip_image002Exemplo de página Splash

  5. Imagens gráficas em movimento e texto rolável – Os usuários tem cegueira a banners como dito em um post anterior e na web imagens gráficas em movimento e texto rolável são ignorados pelos usuários. Lembrem-se que na Internet se você grita mais alto dá a impressão que não tem nada de importante a dizer.
  6. Componentes de interface gráfica personalizados – Botões que não se parecem botões, barras de rolagem personalizadas que não se parecem com barras de rolagem são problemas que tornam o site mais difícil de utilizar. Evitem alterar os padrões já aprendidos pelos usuários da Web.
  7. Não expor quem está por trás das informações – O usuário deve confiar no responsável pelo site para que este possa passar a ter uma relação de confiança com o mesmo. Dados como o quem somos presente em alguns sites devem ser colocados e devem responder questões como o principal executivo, a informação correta de contato, a filosofia da empresa e o histórico e marcos.

No próximo post terminaremos a lista de problemas...

image

terça-feira, 26 de maio de 2009

Lista de problemas de usabilidade – Parte 3

Continuando a lista de problemas comuns de usabilidade e que tendem a ser menos problemático temos:

  1. Listagens de pesquisa de baixa relevância – Depois da navegação a busca é a maneira mais utilizada para acessar o conteúdo. Busca ineficaz é extremamente problemática para os usuários.
  2. Multimídia e vídeos longos – A maioria dos videoclipes devem ter duração de menos de 1 minuto para que os usuários prestem atenção neles.
  3. Layouts Congelados – Sabemos que os usuários odeiam rolagens horizontais e nós sabemos disto. Então é uma boa idéia colocar os tamanhos de sua página em porcentagem, para que seu layout se adapte a diferentes resoluções.
  4. Incompatibilidade entre diferentes plataformas – Uma recomendação geral é esperar entre cinco e seis anos depois da distribuição de uma nova versão do navegador para que você não se preocupe mais com ela. O IE7 foi introduzido em 2006, então provavelmente você terá que suportá-lo até 2012. Verifique a quantidade de usuários que utilizam sua plataforma em diferentes navegadores e verifique quais são os que valem a pena suportar.
Abaixo agora iremos mostrar uma lista de problemas que grande parte dos usuários se acostumaram a usar e perderam um pouco da sua importância segue abaixo:

  1. Clicabilidade incerta – Alguns sites costumavam oferecer figuras com links escondidos o que não indica claramente ao usuário que aquele é um link. Sempre que você tem que informar ao usuário aonde clicar você tem um problema de usabilidade.
  2. Registro – Pedir aos usuários que se registrem antes de realizar qualquer ação no site é uma falha de usabilidade. Isto é causa de negócios perdidos, uma vez que vários usuários não gostam de se registrar.
  3. URLs Complexos – URLs complexos prejudicam tanto a usabilidade quanto a otimização de ferramentas de busca. A maioria dos sites tem menos de 1 milhão de páginas e portanto funcionam bem com até 50 caracteres.
  4. Menus suspensos em cascata – No passado qualquer elemento dinâmico, já confundia o usuário, mas parece que os usuários se acostumaram com alguns elementos. Evitem menus com mais de um nível, pois alguns usuários ainda tem problemas com menus de vários níveis.
É isto aí pessoal. Qualquer problema avisem...

image

quinta-feira, 14 de maio de 2009

Lista de problemas de usabilidade – Parte 2

Continuando com a lista de problemas descrita por Jakob Nielsen temos então:

  • Conteúdo vago ou inútil – Quanto pior as mensagens enviadas por um site, mais os usuários tendem a negligenciar suas mensagens. Conteúdo inútil não apenas irrita as pessoas, como também é a principal causa de vendas perdidas.
  • Muito conteúdo e texto não escaneável – Blocos densos de texto causam repulsão por parte dos usuários e sugerem que o trabalho para achar o que se quer é muito árduo.

Como uma lista de problemas que tendem a ser menos problemáticos nos próximos anos, mas que ainda preocupam são:

  • Tempo de download lento - Tempo de download lento tende a ser cada vez menos preocupante pelo aumento do número de internets com banda larga, mas ainda preocupa, pois sites lentos continuam como sempre a incomodar.
  • Frames – Frames quebram várias diretrizes de usabilidade como a quebra do botão voltar e diferenças entre browsers, o que ainda o torna um problema. O que diminui sua severidade é o fato de cada vez menos sites o utilizarem.
  • Flash – Páginas flash também quebram várias diretrizes de usabilidade como o botão voltar, textos escaneáveis, quebra do botão voltar e tempos de downloads lentos. Então o flash deve ser usado com bastante parcimônia.

É isto aí pessoal. Quaisquer problemas avisem...

image

terça-feira, 12 de maio de 2009

Lista de problemas de usabilidade – Parte 1

Olá Pessoal,

Problemas de usabilidade ainda são muito comuns em sites. O que Jakob Nielsen verificou é que uma série de problemas antigos continua a acontecer constantemente em novos sites e merecem constantemente atenção.

Entre a lista de problemas sérios de usabilidade temos:

  • Lista de links que não mudam de cor quando clicados - Entre os erros mais graves listados estão os links que não mudam de cor quando são clicados. Uma boa diretriz de usabilidade é ajudar aos usuários a descobrir onde os usuários estavam, onde eles estão e aonde eles podem ir. A mudança da cor dos links facilita a entender a localização. Esta diretriz só não precisa ser seguida em sites que a mesma ação deve ser executada várias vezes, como por exemplo, em sites que são sistemas de empresas.
  • Quebrar o botão voltar – O botão voltar é o segundo recurso mais utilizado na Web e naturalmente os usuários esperam que eles funcionem como deveria. Quebrar o link voltar atrapalha a navegação e diminui a velocidade dos usuários.
  • Abrir novas janelas do navegador – Ao clicar em um link os usuários esperam que novas páginas sejam abertas na página atual. Desapontá-los é um erro de design e não impede que os usuários saiam de seu site. Tentar não perder os visitantes é uma causa perdida se os usuários realmente quiserem sair.
  • Janelas pop-up – Hoje janelas pop-up são um mal pior do que era no passado. Os usuários estão cada vez mais irritados com janelas pop-up. O simples fato de existir janelas pop-up já é uma razão para os usuários evitarem o site que as possui. A grande maioria dos usuários fecha a janela pop-up antes mesmo de a janela ter sido completamente carregada.
  • Elementos de design que parecem anúncios – Usuários normalmente têm cegueira a anúncios, o que faz com que trechos que se parecem com anúncios nem ao menos sejam vistos. Evite então cores fortes e trechos que se parecem anúncios. Normalmente os usuários não o verão.

Em breve teremos mais posts sobre o assunto.

Aguardem...

image

segunda-feira, 4 de maio de 2009

Diretriz de usabilidade de rolagem de página

Em um estudo mostrado por Jakob em seu livro de usabilidade, foi mostrado que mais de metade dos usuários de seu experimento não rolou pela página. Somente 42% dos usuários do teste viu algum conteúdo da segunda página. Apenas 14% dos usuários visualizaram  mais de duas páginas.

Segundo o autor uma conclusão que se pode tirar sobre isto é que normalmente os usuários são preguiçosos e ignorantes. Outra conclusão diferente segundo ele é que os usuários estão ocupados e há tantas informações na web que não vale a pena se aprofundar em uma página a menos que ela mostre claramente seu valor.

No estudo, 35% das páginas eram tão curtas que não era necessário rolar por elas. A recomendação então não é que as páginas precisem ser tão curtas, mesmo isto resolvendo o problema da rolagem.

Segue então algumas dicas:

  • Tente projetar páginas com menos rolagem e tente mostrar no início da página sua importância para o usuário.
  • Mostre informações suficientes na primeira parte da página para que os usuários tenham interesse em ver o que está na parte de baixo.
  • Qualquer página mais longa que 2,3 telas corre o risco de ser menosprezada, mesmo por aqueles usuários que tem interesse de rolar a página.

É isto aí pessoal. Em breve enviarei mais dicas.

image

quarta-feira, 29 de abril de 2009

Como os usuários utilizam a Web

Um detalhe interessante sobre como os usuários usam a Web é como as pessoas utilizam os sites. Em média segundo estudos de Jakob Nielsen os usuários gastam 1 minuto e 49 segundos antes de decidir abandoná-lo e partir para outro. Outro detalhe se refere ao fato dos mesmos usuários, ao decidirem realizar uma tarefa em um site específico, gastarem em média 3 minutos e 49 segundos.

Para escolher o site que usarão para realizar a tarefa específica eles vêem 3,2 sites além do site de busca e ao saírem de um site eles apenas em 12% dos casos voltaram ao mesmo site para realizar a tarefa. Isto mostra como cada vez mais a usabilidade é importante e que a disputa é cada vez maior.

Um dado muito interessante é o fato de a Homepage do site ter sido acessada primeiramente em 40% dos casos enquanto nos outros 60% os usuários acessaram os links profundos.

Com relação à página principal, os usuários gastaram em média 30 segundos para visualizá-la. Nesta página é necessário dizer muita coisa em muito pouco tempo. Entre os objetivos desta página deve-se responder as seguintes perguntas básicas:

  1. O site em que eles chegaram.
  2. Os benefícios que a empresa oferece.
  3. Algo sobre a empresa e seus produtos mais recentes.
  4. As opções para os usuários chegarem às seções mais relevantes pra eles.

Nas páginas internas, o estudo mostrou que os usuários gastam em média 55 segundos, o que mostra a vantagem de utilização de links profundos já que o usuário lê substancialmente mais informações. 3 diretrizes foram dadas por Jakob no livro para links profundos.

  1. Informe os usuários onde eles estão e como podem prosseguir para outras partes do site. Neste caso é importante o nome ou logotipo da empresa no canto superior esquerdo, um link de um único clique para a homepage e um sistema de busca no site preferivelmente no canto superior direito.
  2. Oriente o usuário quanto ao restante do site. Se o site possuir uma estrutura hierárquica utilize um “breadcrumb trail” ou “trilha de migalhas de pão” que são links que permitem que os usuários subam e desçam na hierarquia do site.
  3. Não pressuponham que o usuário seguiu um único caminho para chegar a página atual. Talvez os usuários perderam algumas informações na hierarquia.

É isto aí pessoal. Em breve postarei mais diretrizes de usabilidade mostradas no livro Usabilidade na Web.

image

segunda-feira, 27 de abril de 2009

Livro sobre usabilidade na web

Acabei de ler um livro sobre usabilidade na web escrito por um dos maiores papas da usabilidade atual. Jakob Nielsen e Hoa Loranger conseguiram reunir em um ótimo livro, grandes pecados da usabilidade em sites hoje. Com certeza um ótimo livro e extremamente importante para quem que montar um site ou sistema hoje em dia.

clip_image002

Usabilidade na Web - Projetando Websites com Qualidade

A tradução do livro é ótima e a grande quantidade de exemplos facilita a identificação das falhas nos sites. Terei de montar uma apresentação sobre o livro e postarei ao longo das próximas semanas, alguns tópicos, abordados no livro.

É isto aí pessoal...

quarta-feira, 15 de abril de 2009

Resultado da enquete sobre IDEs Java

Pela resposta dos visitantes vimos que a IDE Eclipse continua sendo a mais utilizada para o desenvolvimento Java. Em segundo lugar na pesquisa vemos que a utilização do Netbeans. Em terceiro lugar vieram empatados o WSAD e o MyEclipseIDE.

image

Nesta última votação tivemos uma participação mais ativa dos visitantes. Em breve teremos novas enquetes e continuem votando.

É isto aí pessoal.

image

domingo, 5 de abril de 2009

Interceptadores em EJB3

Acabamos de passar dos 6.000 acessos ao site desde que começamos a monitorar os acessos com o analytics e não poderia deixar de agradecer enviando um post que talvez ajude a quem quer monitorar e realizar log das operações realizadas pelas chamadas ao EJB. Neste post de hoje vamos falar sobre interceptadores em EJB3.

A especificação de EJB3 define o que seriam interceptadores que adicionam a abilidade de interceptar métodos de negócio de Session Beans e de Message Drive Beans.
Segue abaixo um exemplo de um interceptador que foi implementado com o intuito de realizar um log dos métodos de negócio chamados:

/**
* Classe interceptadora que imprime os métodos de negócio
* que estão sendo chamandos durante a execução do programa.
*
* @author samuelmd
*
*/
public class LogJPAInterceptor {

@AroundInvoke
public Object logInterceptor(InvocationContext invocation)

throws Exception {
Logger logger = Logger.getLogger(LogJPAInterceptor.class);

logger.debug(" ---------------------------- ");
logger.debug("Chamando método " + invocation.getMethod()
+ " da classe " + invocation.getTarget());

Object[] objetos = invocation.getParameters();

if (objetos != null) {
logger.debug("Métodos com os parâmetros :");
for (Object objeto : objetos) {
if (objeto != null) {
logger.debug(objeto.getClass().getName() + " : "
+ objeto.toString());
}
}
}

logger.debug(" ---------------------------- ");
return invocation.proceed();
}
}

A anotação @AroundInvoke indica para o sistema qual o método realizará a interceptação dos métodos de negócio.

Interceptadores podem ser adicionados de 3 maneiras diferentes assim como mostrados abaixo:

  • Default. Só podem ser adicionados através do descritor de implantação assim como definido abaixo:
    <assembly-descriptor>
    <!—Interceptadores default -->
    <interceptor-binding>
    <ejb-name>*</ejb-name>
    <interceptor-class>
    com.thinkworks.interceptor.LogJPAInterceptor
    </interceptor-class>
    </interceptor-binding>
    </assembly-descriptor&gt
  • Classe. Podem ser adicionados tando pelo descritor de implantação quanto pela anotação @Interceptors ({LogJPAInterceptor.class}) em cima da classe.
  • Método. Definido pela anotação @Interceptors ({LogJPAInterceptor.class}) em cima da classe.

É isto aí pessoal. Mais informações podem ser encontradas em http://docs.jboss.org/ejb3/app-server/tutorial/interceptor/interceptor.html.

Qualquer problema avisem…

image

quinta-feira, 19 de março de 2009

Implementando conversor de moeda com JSF

Algumas pessoas já devem ter passado pelo problema de criar um conversor de moedas em JSF que funcione bem para diferentes países. Segue abaixo uma sugestão de como implementar um conversor legal.

O primeiro passo é implementar a classe de conversor. Segue abaixo a classe:

public class MoedaConverter implements Converter {

@Override
public Object getAsObject(FacesContext facesContext,
UIComponent uiComponent, String value) {

FacesContext fc = FacesContext.getCurrentInstance();
Locale l = fc.getViewRoot().getLocale();

if (value != null) {
value = value.trim();
if (value.length() > 0) {
try {
return new BigDecimal(NumberFormat.
getNumberInstance(l).parse(
value).doubleValue());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
return null;
}

@Override
public String getAsString(FacesContext facesContext,
UIComponent uiComponent, Object value) {

if (value == null) {
return "";
}
if (value instanceof String) {
return (String) value;
}
try {
FacesContext fc = FacesContext.getCurrentInstance();
Locale l = fc.getViewRoot().getLocale();
NumberFormat formatador = NumberFormat.getNumberInstance(l);
formatador.setGroupingUsed(true);
return formatador.format(value);

} catch (Exception e) {
throw new ConverterException("Formato não é número.");
}
}
}

Depois deve-se adicionar o seguinte trecho no arquivo faces-config.xml:

<converter>
<converter-id>MoedaConverter</converter-id>
<converter-class>
com.converter.DoubleConverter
</converter-class>
</converter>


Para utilizá-lo agora basta utilizar da seguinte maneira:
   <h:inputText id="moeda"
label="#{msgs.campo_geral_volume_compra}"
value="#{enderecoBean.valor}">
<f:converter converterId="MoedaConverter" />
</h:inputText>
Não se esqueça que este conversor não é também máscara de javascript. Então é importante criar a máscara e adicionar no componente para facilitar a vida do usuário.

É isto aí pessoal. Qualquer problema avisem.

[]s,

quarta-feira, 11 de março de 2009

Artigos sobre gerênciamento de Processos de Negócio

Dois artigos que são bem interessantes sobre processos de negócio são “As empresas são grandes coleções de processos”  que se encontra disponível em http://www.fgvsp.br/rae/artigos/006-019.pdf e outro é “Processo, que processo?” que se encontra disponível em http://www.fgvsp.br/rae/artigos/008-019.pdf. Ambos os artigos são escritos pelo Professor do Departamento de Administração Geral e Recursos Humanos da EAESP/FGV, José Ernesto Lima Gonçalves.

O primeiro artigo (“As empresas são grandes coleções de processos”) é um texto que mostra como a idéia de processos está enraizada nas empresas e organizações atuais. O artigo tem como objetivo facilitar a compreensão do assunto e aplicações para o conceito de processos empresariais.

O artigo se mostra bem útil, pois representa uma introdução bem prática sobre alguns dos principais processos nas empresas, além de ressaltar a importância de se organizar também os processos não fabris nas empresas e descreve além disto as características dos processos empresariais e também mostra a importância dos processos na organização e como a tecnologia se liga a eles de forma a facilitar seu mapeamento e gerenciamento.

Em sua conclusão o autor cita que as empresas tem sido cada vez mais centradas em processos, apesar de várias das empresas brasileiras ainda não conhecerem e nem mapearem seus processos.

O texto é muito bem ilustrado com quadros que mostram exemplos de processos, classificações, processos característicos e categorias. O artigo é bem abrangente nos conceitos de processos, mas peca um pouco em não enfatizar nenhum dos pontos de maneira mais profunda.

O segundo artigo (“Processo, que processo?”) é uma continuação do artigo citado anteriormente e resume as diferenças entre as organizações tradicionais e as empresas estruturadas por processos.

O artigo começa enfatizando o fato das empresas em geral não saberem como se organizarem por processos e identifica algumas empresas que já possuem esforços nesta direção como a IBM, HP, entre outras e então fala sobre como a empresa pode verificar e desenhar seus processos e como em alguns casos isto pode ser bem difícil em áreas não fabris da empresa, além de mostrar que para que a empresa se organize em processos o foco da empresa deixa de ser a estrutura da empresa e passa a ser o cliente.

É mostrado então algumas comparações entre organogramas e processos, estrutura organizacional versus estrutura organizacional por processos e estruturação por processos e também uma maneira de realizar a classificação de empresas com relação à organização por processos.

Uma parte mais prática do artigo se refere a como materializar os princípios de organização por processos que passa uma visão ampla, mas bem simplista dos passos a serem seguidos para que uma empresa mude sua estrutura para se aproximar de uma organização por processos.

Numa parte final o texto mostra em um quadro muito bem feito o quanto é recomendado para a empresa se orientar a processos de acordo com alguns fatores definidos pelo autor, tais como necessidade de flexibilidade e agilidade.

O autor então conclui que o futuro vai pertencer às empresas que consigam explorar seus processos tanto fabris quanto não fabris e que consigam centrar seus esforços em seus clientes, o que para mim faz muito sentido. O texto é muito bem escrito e possui exemplos claros e quadros e ilustrações que facilitam a leitura.

Ambos os textos cumprem muito bem os objetivos propostos e passam uma visão bem abrangente dos processos atuais nas empresas e de como orientar as empresas a processos.

É isto aí pessoal. Espero que ajude e que incentive vocês a ler os artigos que são bem interessantes. Qualquer problema me avisem…

image

domingo, 8 de março de 2009

Papel do ESB dentro de uma arqutetura SOA

SOA é uma arquitetura onde é possível criar, padronizar, documentar funções genéricas únicas, utilizadas por diferentes aplicações em componentes reutilizáveis e com total interoperabilidade, de modo que possam ser compartilhados e acessados por diferentes dispositivos sob a forma de serviço, sem precisarem ser reescritos.

O papel do ESB dentro de uma arquitetura SOA é atuar como infra-estrutura para suportar os princípios de projeto SOA, virtualizando os serviços providos e tornando toda TI transparente para o negócio. Numa arquitetura SOA, o ESB fundamentalmente atua no papel de prover independência de linguagem, transparência de protocolo e localização, independência de formato de dados, independência de plataforma e um modelo de comunicação transparente para que seja possível atingir um baixo acoplamento entre os serviços componentes da arquitetura.

Segue abaixo um exemplo de um ESB:

image

O ESB também tem o papel de prover infra-estrutura para gerenciamento adequado da arquitetura em grande escala. Um ESB serve então como  infra-estrutura de uma arquitetura SOA, lidando com o roteamento, transformação e mediação entre produtores e fornecedores de serviços, sejam eles internos ou externos à organização.

É isto aí pessoal. Qualquer problema avisem.

image

terça-feira, 3 de março de 2009

Funcionalidades de um ESB

Um dos objetivos deste post é dar uma breve explicação sobre as principais funcionalidades de um ESB que são o roteamento a transformação e a mediação.

Os envolvidos numa comunicação através do ESB não precisam compartilhar o mesmo protocolo de comunicação ou formato de mensagem, pois fica a cargo do ESB realizar as transformações necessárias nas mensagens trocadas. Isto acontece através do serviço de transformação do ESB. Por exemplo, uma mensagem com 10 campos enviada através de SOAP pode ser recebida pela outra ponta como uma mensagem JMS com 4 campos removidos.

O serviço de mediação no ESB compreende todo o workflow de mensagens envolvido para realizar uma determinada "interação" entre os participantes. Os participantes não entram em contato um com o outro, e sim, toda comunicação é mediada pelo ESB. Mediações complexas podem também ser formada a partir do encadeamento de outras mediações. Por exemplo, qualquer mensagem enviada de um componente para outro requer a mediação do ESB.

O serviço de roteamento de um ESB oferece uma infra-estrutura de comunicação e localização comum que pode ser utilizada para conectar serviços sem que os desenvolvedores precisem realizar uma lógica de conectividade complexa. Por exemplo, uma requisição a um serviço é realizada ao ESB por um componente sem que este conheça a localização física do serviço desejado, nem mesmo por qual caminho a solicitação será trafegada até chegar ao seu destino.

Um produto de mercado ESB se chama Websphere Message Broker. Esta é uma solução IBM para implementar um EAI robusto baseado em mensagens e serve para conectividade entre aplicações, mediações entre fornecedores e clientes e criação de um barramento de serviços.

Entre as principais funcionalidades temos o roteamento, transporte e mediação, suporte a pilha WebServices, integração com transportes do WebSphere MQ e repositório de mensagens persistentes.

Entre os mecanismos e protocolos suportados temos JCA, WebServices, Mensagens MQ, TCP/IP, Hats. Pode através de algum destes protocolos comunicar com Mainframe CICs entre outros.

O produto também permite virtualizar o acesso aos serviços e os disponibilizar de forma simples o acesso a aplicações heterogêneas. Suporta também como transporte http e SOAP, suporte a aplicações de tempo real, envio de mensagens, entre outros,

A arquitetura de referência se baseia em 4 elementos centrais:

· A modelagem e a simulação de novos processos de negócio. A ferramenta chave é o Websphere Businnes Modeler. Este produto permite que se modele o processo de negócio e utilize os serviços disponibilizados nas camadas inferiores.

· Desenvolvimento de novos serviços e processos – As ferramentas chave são o Rational RAD e o Websphere Integration Developer.

· A execução de processos - A ferramenta chave é o WPS (Process Server). O WPS requer um ESB para operar (WESB ou ESMB).

· A monitoração de processos com o WebSphere Business Monitor.

É isto aí pessoal. Espero que esta introdução sobre ESB ajude quem está começando.

image

domingo, 1 de março de 2009

Considerações do texto: The Web Services Debate e .Net vs. J2EE

A utilização de Web Services permite a comunicação e a interoperabilidade entre várias diferentes linguagens de programação. Sua utilização requer a cooperação entre as facções JEE e .NET. A tecnologia ainda não é madura o suficiente, mas basicamente é um servidor que escuta e responde SOAP, geralmente utilizando http. Na prática Web Services suporta WSDL para descrever suas interfaces, e podem também ser ouvidas em um registro UDDI.

A utilização de Web Services permite uma comunicação fácil entre várias plataformas de desenvolvimento, o que coloca fogo na discussão sobre qual plataforma de desenvolvimento é melhor. Particularmente nos artigos a comparação se concentra nas plataformas .NET e J2EE.

Uma vez que Web Services não é uma tecnologia que depende nem de J2EE e nem de .NET, é somente baseado em SOAP, XML e outros tecnologias independentes, a decisão de utilizar uma das duas tecnologias é somente uma questão de em que ambiente de desenvolvimento será realizado o deploy dos Web Services.

Segundo os defensores do J2EE a plataforma é mais madura, mais robusta, mais flexível e mais testada. Cerca de 55 a 70% dos deploys dos Web Services foram feitos utilizando a plataforma J2EE. Além disto, possui suporte de uma vasta quantidade de vendedores tais como SAP, IBM, BEA, Oracle, entre outros. Também segundo os defensores da tecnologia J2EE a plataforma é portável ou seja, possui a facilidade de ser escrita em algum lugar e poder rodar em qualquer lugar.

Segundo os defensores do .NET, esta plataforma é mais simples, mais barato para executar o deploy, mais barato de executar manutenção, possui melhor performance e custo de solução menor. Segundo também os defensores da tecnologia são necessárias menos linhas de código, o que aumenta a rapidez de desenvolvimento.

Web Services é realmente uma tecnologia que tende a ser muito importante para o desenvolvimento de aplicações no futuro e há espaço no mercado para o convívio tanto de aplicações J2EE quanto de aplicações .NET. Cabe a empresa a escolha da tecnologia que mais se aplica ao projeto a ser desenvolvido.

É isto aí pessoal. Qualquer problema me avisem.

image

Modelagem de processo de negócios com BizAgi

Olá pessoal,

Uma ferramenta que achei bem interessante para a modelagem de processo de negócios é a BizAgi Process Modeler. A ferramenta é bem simples de usar e possui bastante funcionalidades. Um exemplo de utilização se encontra em http://www.bizagi.com/eng/downloads/BPMNbyExample.pdf?token=1.4.1.0.

Para exemplificar a utilização da ferramenta resolvi modelar o processo de aprovação de posts do portal do arquiteto. Segue abaixo o modelo:

Com a ferramenta é possível modelar processos, subprocessos e é bem simples de se realizar a modelagem. Uma breve explicação sobre a ferramenta pode ser encontrado em http://www.baixaki.com.br/download/bizagi-process-modeler.htm.

É isto aí pessoal. Espero que ajude quem quer modelar os processos de negócio.

sábado, 14 de fevereiro de 2009

Considerações sobre o desenvolvimento com JSF

Olá pessoal,

Neste post de hoje quis falar um pouco sobre o que estou achando do desenvolvimento com JSF. Para o desenvolvimento com JSF estamos utilizando a distribuição RichFaces com Facelets. A meu ver o desenvolvimento ficou bem produtivo e bem orientado mesmo a componentes.

Criamos componentes para quase tudo com Facelets o que tornou a implementação ainda mais simples. Um exemplo de componente criado com Facelets é mostrado aqui. A utilização de ajax com o a4j (componente do RichFaces) é simples, elegante e torna a usabilidade das páginas muito legal.

Uma grande reclamação é sobre a curva de aprendizagem, mas particularmente não achei o fim do mundo. O que mais achei difícil no começo é decidir sobre quais componentes utilizar em dadas situações, uma vez que existem vários componentes, mas uma vez utilizado é bem tranquilo.

O modelo orientado a eventos tem facilitado muito a minha vida e abre um leque maior de opções sobre como desenvolver novas funcionalidades. A quantidade de componentes prontos do RichFaces também me facinou e um exemplo de utilização pode ser visto aqui. Na minha opnião JSF tornou realmente o desenvolvimento mais simples e tende a se tornar mesmo um padrão da industria.

É isto aí pessoal. Qualquer problema me avisem...


quinta-feira, 5 de fevereiro de 2009

Criando componentes com JSF e Facelets

Olá pessoal,

Muita gente tem falado sobre a dificuldade de implementar componentes usando JSF. Resolvi então montar um pequeno tutorial sobre como criar componentes utilizando Facelets e JSF. Para o exemplo utilizei JSF com RichFaces e Facelets.

Para este exemplo estou considerando que seu projeto JSF já está configurado utilizando as tecnologias descritas acima.

A primeira coisa a ser feita é adicionar o seguinte trecho no arquivo web.xml.
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/WEB-INF/facelets/facelets.taglib.xml</param-value>
</context-param>

Depois de definido no arquivo web.xml deve-se então criar o arquivo "facelets.taglib" assim como mostrado abaixo.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<facelet-taglib>
<namespace>http://facelets.bionexo.com</namespace>
<tag>
<tag-name>inputText</tag-name>
<source>../../taglibs/inputText.xhtml</source>
</tag>
</facelet-taglib>

Criamos então o arquivo inputText.xhtml assim como descrito abaixo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
xmlns:rich="http://richfaces.org/rich">
<ui:composition>

<c:if test="${empty required}">
<c:set var="required" value="false" />
</c:if>

<c:if test="${empty rendered}">
<c:set var="rendered" value="true" />
</c:if>

<c:if test="${not empty label}">
<c:choose>
<c:when test="${required}">
<h:outputLabel value="${label} *:" for="${id}"
rendered="${rendered}" />
</c:when>
<c:otherwise>
<h:outputLabel value="${label}:" for="${id}"
rendered="${rendered}" />
</c:otherwise>
</c:choose>
</c:if>

<h:panelGroup>
<h:inputText id="${id}" value="${value}" onkeypress="${onkeypress}"
onkeyup="${onkeyup}" onblur="${onblur}" required="${required}"
maxlength="${maxlength}" rendered="${rendered}"
readonly="${readonly}" disabled="${disabled}" />

<rich:message id="mensagem${id}" for="${id}" style="color:darkred;"
rendered="${(required or message) and rendered}" />
</h:panelGroup>
</ui:composition>
</html>

Note que utilizamos acima a taglib c para setar os valores default para as propriedades utilizadas no componente.

Para utilizar o componente então é simples. Basta primeiro importar a taglib que acabamos de criar com adicionando o seguinte trecho no início do nosso arquivo xhtml

xmlns:comp="http://facelets.bionexo.com"

E aonde queremos utilizar simplesmente chamamos o componente, assim como mostrado abaixo:

<comp:inputText id="razaoSocial"
label="#{msgs.campo_geral_razao_social}"
value="#{empresaBean.objetoPesquisa.dadosEmpresa.razaoSocial}"
maxlength="100" />
É isto aí pessoal. Boa sorte com os novos componentes e qualquer dúvida perguntem.

quinta-feira, 29 de janeiro de 2009

Dicas para a prova SCBCD 5.0 (CX-310-091)

Olá pessoal,

Ontem fiz a prova SCBCD para EJB 3 e felizmente fui aprovado. Segue abaixo algumas percepções sobre a prova e um guia de estudo para quem tem interesse na prova.

A prova realmente não é fácil e como todas as provas da Sun tem bastante pegadinhas. Como livro lí o Enterprise JavaBeans 3.0 (Editora O'Reilly) que realmente é muito bom, apesar de não ser focado na prova em si. O livro é bom inclusive para quem não tem interesse na prova.

Um outro otimo livro para estudo é o Mastering Enterprise JavaBeans 3.0 que se encontra neste link no site ServerSide.com.

Encontrei boas dicas no site http://faq.javaranch.com/java/ScbcdLinks#scbcd50 que acho que também devem ser lidas. Outro bom site que possui um resumo da prova é http://java.boot.by/scbcd5-guide/ e também é leitura obrigatória.

No mais é estudar muito e fazer alguns simulados. Segue abaixo uma lista de simulados que utilizei:
Utilizei apenas as versões demo, mas os mocks são ótimas opções para quem está estudando para as provas.

É isto aí pessoal. Espero que ajude.

quarta-feira, 28 de janeiro de 2009

Resultado da pesquisa sobre JSF

Olá pessoal,

Para não perdermos os resiltados das pesquisas realizadas resolvi criar um marcador para este tópico e colocar a imagem do resultado. Sobre a pesquisa sobre qual distribuição jsf é mais utilizada segue o resultado abaixo:














É isto aí pessoal. Em breve entrarão mais pesquisas.

[]s,