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,