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.

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

Code Bubbles: Uma IDE inovadora

Sendo você um desenvolvedor que utiliza um simples editor de texto ou uma IDE gráfica com milhares de botões e janelas, sabe que às vezes é confuso ficar navegando e trabalhando com vários arquivos abertos apenas para utilizar uma parte do código deles.
Pensando nisso, pesquisadores da Brown University e da University of Central Florida estão desenvolvendo um projeto chamado Code Bubbles. A idéia dessa IDE baseada no Eclipse é, ao invés de abrir arquivos inteiros, visualizar fragmentos de código como “bolhas” que se relacionam.
Veja o vídeo que é mais fácil de entender:
Achei uma visão bem inovadora e diferente das atuais IDEs. Se realmente ajuda no desenvolvimento, só podemos saber na prática.
No site do projeto dá para se registrar para ser notificado quando a versão beta for lançada.

Temas de cores no Eclipse

Uns dias atrás, cansado do “fundo branco”, resolvi trocar as cores do editor do Eclipse. Imaginei que eu iria encontrar combinações de cores pré-configuradas, mas para minha surpresa eu teria que definir uma a uma na mão.

Pesquisando um pouco na internet encontrei essa solução. Apesar de não se tratar de um suporte “nativo” a temas, é bem simples.

O Eclipse salva as cores do editor nesses 2 arquivos localizados em .metadata/.plugins/org.eclipse.core.runtime/.settings dentro do seu workspace:

  • org.eclipse.jdt.ui.prefs
  • org.eclipse.ui.editors.prefs

Basta substituir esses arquivos pelos do “tema” que você deseja utilizar. Naquele link que encontrei sobre isso, tem algumas combinações de cores muito legais:

Baixar temas

Baixar temas

Se você gosta de programar com “fundo preto”, é só escolher um desses temas e usar no seu Eclipse. Apenas lembre-se de fazer o backup dos arquivos originais.

Google Go: Primeiros passos e exemplos

Semana passada o Google anunciou que disponibilizou uma nova linguagem de programação chamada Go. Como sempre, cada novo lançamento do Google vem recheado de comentários “O Google vai dominar o mundo” e “O Google será a nova Microsoft”.

Logotipo Go

Fiquei curioso e resolvi fazer alguns testes nessa nova linguagem. Aqui eu apresento o passo-a-passo do que fiz para instalar e implementar 3 exemplos (hello world, programação concorrente e servidor web).

Continue lendo ‘Google Go: Primeiros passos e exemplos’


The next version of Ubuntu is coming soon