Material palestra “Testando aplicações Flex com Selenium” do Flex Mania 2011

Para quem assistiu (ou não… rsrsrs) minha palestra no Flex Mania 2011, disponibilizei os slides no SlideShare e o código-fonte no GitHub. A gravação da palestra também está disponível.

Gravação da palestra:
http://experts.adobeconnect.com/p4jsu4pxctu/

Slides da palestra:

Código-fonte apresentado: 
https://github.com/victorvserta/Palestra_Selenium_Flex

Tópicos da palestra:

Ficou alguma dúvida ou tem algum comentário/crítica? Então poste um comentário aqui ou envie um tweet pra mim (@victorvserta).

PS.: Obrigado ao @guisjlender, @samuelfac@igorcosta@MarcPires e @MrAndreatta pelo feedback no Twitter após a palestra. Agradeço também a RIACycle pela organização do evento e pela oportunidade de palestrar.

Anúncios

Flex Mania 2011 é essa semana (7 a 10 de Julho)

Logotipo Flex Mania 2011

O Flex Mania 2011 é essa semana! O evento online tem como principais temas as tecnologias Adobe Flex e AIR. Serão mais de 30 palestras em 4 dias de evento (7 a 10 de Julho).

A minha palestra no evento será no sábado de manhã às 9:15 e falarei sobre testes de aplicações desenvolvidas em Flex com a ferramenta Selenium. Vou demonstrar de forma prática como utilizar essa ferramenta com Flex e como aplicar os conceitos no contexto de desenvolvimento ágil.

Se você tem alguma dúvida ou sugestão em relação ao assunto, comente aqui que eu respondo durante a palestra. 🙂

Mais detalhes sobre o evento no site http://www.flexmania.com.br

Injeção de Dependência em Java

Injeção de dependência (Depedency Injection ou apenas DI) é um design pattern utilizado para manter o acoplamento fraco entre classes ou módulos do sistema. O foco principal é fazer com que uma classe não tenha conhecimento de como instanciar um objeto de um tipo do qual é dependente.

Inject Coffee - Injeção Dependência em Java

Neste post vou apresentar as principais ferramentas utilizadas com essa finalidade em Java, mas antes uma explicação inicial sobre o assunto. Dê uma olhada no código Java abaixo:

Continue lendo ‘Injeção de Dependência em Java’

Evento ITCare-PR em Curitiba 14/05/11

Banner IT Care Paraná

Quer assistir palestras interessantes e ao mesmo tempo ajudar as vítimas das fortes chuvas que atingiram o Paraná? Este é o objetivo do evento IT Care-PR que contará com a presença de Roger Brinkley da Oracle.

Eu participarei do evento com a palestra TDD com Java, onde vou explicar os fundamentos da metodologia Test Driven Development com exemplos na linguagem Java.

Além de Java, o evento também terá palestras sobre .NET, Android, iOS (iPhone) e Scrum.

Quando: 14/05/2011
Onde: Universidade Positivo – Auditório 2 da Escola de Negócios (Bloco Amarelo)
Palestras: Clique aqui
Palestrantes: Clique aqui
Inscrição: Clique aqui
Entrada: Alimentos não-perecíveis, material de limpeza e água mineral

Simulador online de iPad

Com este simulador online é possível visualizar alguns aplicativos nativos e navegar na internet como se estivesse utilizando o iPad.

Simulador iPad Online

Simulador iPad Online

Isso facilita a vida dos desenvolvedores web que não possuem um iPad. Para visualizar um site como se estivesse utilizando o dispositivo, basta entrar no navegador e acessar a url que deseja testar.

O desenvolvedor do simulador disponibilizou o código-fonte no github: https://github.com/altryne/Ipad-Simulator

Annotation com atributo “default null” funciona?

As annotations podem ter atributos que são obrigatórios ou opcionais, sendo que os opcionais a linguagem exige que se defina um valor padrão. Para deixar um atributo que não  seja primitivo como opcional, nada mais óbvio do que definí-lo com “default null”, certo? Mas será que isso funciona?
Arroba Annotation
O exemplo abaixo apresenta como deixamos atributos da annotation com valores padrões:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface GuardarLogAlteracao {
   String value() default "";
   boolean exibirValor() default true;
}
Observe que “value” possui como valor padrão uma string vazia e “exibirValor” possui “true”. Essa annotation poderia ser utilizado como  o seguinte exemplo:
public class Usuario {
   @GuardarLogAlteracao("Nome do usuário")
   private String nome;

   @GuardarLogAlteracao(value = "Senha", exibirValor = false)
   private String senha;

   //getters e setters...
}
Para “nome” o atributo “exibirValor” será “true”. Voltando a questão principal, se adicionarmos um atributo que seja um objeto, poderíamos definí-lo como nulo por padrão como abaixo:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface GuardarLogAlteracao {
   String value() default "";
   boolean exibirValor() default true;
   Class<? extends FormatadorLog> formatador() default null;
}
Então utilizaríamos a annotation dessa forma, onde por padrão “formator” é nulo para “nome” e “senha”:
public class Usuario {
   @GuardarLogAlteracao("Nome do usuário")
   private String nome;

   @GuardarLogAlteracao(value = "Senha", exibirValor = false)
   private String senha;

   @GuardarLogAlteracao(formatador = FormatadorData.class)
   private Date dataAlteracao;

   //getters e setters...
}
Aí vem o problema: isso não compila. O erro retornado pelo compilador é “The value for annotation attribute GuardarLogAlteracao.formatador must be a class literal“.
O motivo disso é que o compilador bloqueia valores nulos para os campos das annotations para evitar o uso incorreto como “@GuardarLogAlteracao(value = null)“. Isso facilita para quem for implementar o código que tratará a annotation, pois não será necessário validar se os campos possuem valor diferente de nulo e lançar NullPointerException.  Na JSR-308 existe um texto que diz respeito a essa questão.
Para contornar essa limitação encontrei algumas pessoas que utilizaram formas altenativas (pra não chamar de “xunxo” ou “gambiarra”) como esta:
public @interface Optional {
public String value() default NULL;
   public static final NULL = "THIS IS A SPECIAL NULL VALUE" +
      "- DO NOT USE";
}
Pessoalmente eu não gosto desse tipo de solução. Minha sugestão é tentar remodelar a idéia inicial, por exemplo, separando o atributo opcional em outra annotation:
public class Usuario {
   @GuardarLogAlteracao("Nome do usuário")
   private String nome;

   @GuardarLogAlteracao(value = "Senha", exibirValor = false)
   private String senha;

   @GuardarLogAlteracao("Data de Alteração")
   @FormatadorLog(FormatadorData.class)
   private Date dataAlteracao;

   //getters e setters...
}
Apesar de ser necessário mais uma annotation, essa seria uma solução mais elegante para o problema. E você, tem outra sugestão?

Geração de XML a partir de XSD

Precisei gerar um arquivo XML de exemplo a partir de um schema (XSD) e deixo aqui uma dica rápida pra quem precisar. Será necessário o Eclipse com o pacote WTP instalado.
Adicione o arquivo XSD em um projeto, clique com o botão direito e vá em “Generate” e depois em “XML File…”. Um wizard será aberto e é só seguir as instruções para gerar o XML.

Wizard geração de XML a partir de XSD no Eclipse


No Twitter

The next version of Ubuntu is coming soon

Anúncios