Valdemar em 27/09/10

Devido a importância da língua inglesa na area de TI e também as oportunidades que nos aparecem por conhecer mais de uma língua, que criei uma versão em inglês do meu site, é uma forma que encontrei de praticar mais a escrita do inglês.

Como isso é uma forma de motivação para escrever, aprender e de praticar, haverão diversos erros (como em qualquer aprendizado). Então podem críticar e me corrigir, que isso faz parte e quero aprender mais e mais.

A medida que for aprendendo irei postar sites que irei encontrando a medida que for avançando nos estudos, como livemocha e BBC English(muito bom), podcast de tecnologia como javaposse e ESL podcast(recomendo) e sites de amigos que tiveram a mesma iniciativa e que me motivaram a fazê-lo como @loiane. Ela postou em seu blog um post muito legal PodCasts Gratuitos para Aprender Inglês (e outras línguas) que pode ajudar nessa iniciativa de melhorar seu inglês.

Bom, vamos ver no que vai dar esse novo projeto.

Valdemar Jr (trying to improve my english every day)

O bugtracking é uma aplicação que foi projetada para ajudar os programadores e na garantia da qualidade no desenvolvimento do software para registrar e gerenciar bugs. Muitos desses bugtracking são open source, bastante utilizados em empresas que desenvolvem software.

Um desses bugtracking é o Mantis, o bugtracker mais popular, desenvolvido em PHP que pode utilizar os banco de dados postgreSQL, mySQL ou MS SQL e possui uma lista de funcionalidades como:

  • Interface simples
  • Campos customizáveis
  • Notificação por e-mail
  • Integração com o wiki
  • Chat online
  • Autenticação via LDAP, Active Directory Integration e autenticação pelo próprio Mantis.




Para ver todas essas características e funcionalidades do Mantis é possível acessar o demo online. Mas caso queira montar em um ambiente, na sua empresa por exemplo, existe o Instant Mantis,  diferente do demo, é uma versão do Mantis incrivelmente fácil de instalar.

Para instalar o Instant Mantis, simplesmente baixe-o aqui, descompacte no HD ou pen-drive e inicie o Instant Mantis Server executando o arquivo imstart.cmd. Irá aparecer a seguinte tela:



E para parar o serviço executar o arquivo imstop.cmd.

Após o server levantado basta acessar a URL http://localhost:8008 digitando login “administrator” e senha “root” (Sem aspas).

Bom fica a dica.

Valdemar Jr (buscando registrar os bugs logo que são encontrados)

Tags: , , , , , ,

Valdemar em 14/09/10

Por acaso eu esperando um voou para voltar para Brasília, cheguei em uma daquelas bancas de livros/jornais/revistas e achei um livro com o título bastante interessante A arte da estratégia – Pense grande, comece pequeno e cresça rápido do autor Carlos Alberto Júlio.


Gostei muito da linguagem do livro, bastante simples, abordando diversos pontos de vista sobre a estratégia, ensinando técnicas como a matriz SWOT, a regra dos 6 C’s, os 4 P’s operacionais e diversas outras técnicas. Mostrando características que empreendedores devem trabalhar como ter objetivos, metas, ter visão e planejamento. Caso queria saber outras características de ser empreendedor.


“Parte vital de uma estratégia são as pessoas que irão executá-las”. Não existe uma boa estratégia se não tem pessoas para executá-las. Identificar características como: Capacidade de diagnóstico, visão, capacidade de execução e capacidade de controle, são fundamentais para formar uma equipe complementar. E além disso PIQUE (isso eu achei fantástico).


“P” -  Paixão (pelo processo, pelo produto, pelo negócio)
“I” – Iniciativa (que leva a novos produtos/serviços e novas abordagens)
“Q” – Questionamento (senso crítico)
“U” – Urgência ( o sentido de não deixar para amanhã o que pode fazer hoje)
“E” – Entusiamos ( ou melhor, a capacidade de despertá-lo em outras pessoas).


Vou citar o que Carlos Alberto Júlio, citou também no livro do Guru Stephen Covey. Segundo ele: “na era industrial, o foco estava em cada um melhorar os seus pontos fracos. Na era do conhecimento, diferentemente, o segredo é você se concentrar nos seus pontos fortes e compensar as fraquezas com os pontos fortes dos demais membros da sua equipe. É essa equipe complementar que torna o indivíduo mais produtivo.”


E assino embaixo. Agora é seguir para o próximo livro: “A arte do começo – Guy kawasaki”


Valdemar Júnior (Sempre buscando aprender mais).

Tags: , , , ,

Valdemar em 21/08/10

Essa dica foi dada pelo blog de empreendedorismo Saia do Lugar no post Características de um líder inovador: inspirar a ação.

O video foi uma apresentação realizada por Simon Sinek no famoso congresso TED. Ele mostra exemplos de sucesso e que a fórmula do sucesso não é simplesmente ter muito dinheiro, trabalhar com pessoas experientes ou ter um bom investidor para que seu negócio dê certo e sim trabalhar com pessoas inspiradoras e que te inspirem.

Trabalhar pelo que você acredita e não trabalhar para ser rico. As pessoas que trabalham pelo que acreditam, dão o sangue, o suor e a vida pelo que acreditam, pessoas que trabalham por objetivos que não acreditam, trabalham apenas pelo contra-cheque, apenas pelo dinheiro.


(Para assistir o vídeo com legendas, clique em Subtitles e escolha a opção “Portuguese”. Link direto)



Abraços,
Valdemar Jr (Buscando a cada dia trabalhar pelo que acredito)

Valdemar em 14/03/10

scea

Foi dado o “start” para a preparação para Sun Certified Enterprise Architect (SCEA), mais um desafio a ser enfrentado(e espero que conquistado).


Terei como material de estudo o livro SCEA – GUIA DE ESTUDO – EXAME 310-051, mesmo a certificação que irei fazer sendo a mais nova que a tratada no livro, mas foi o conteúdo mais atualizado(e confiável talvez?) que encontrei e também o site Java.boot.by possuindo referências para a versão mais nova do exame (310-052).


A parte prática que farei será através do SCEA Mocks Exam da Whizlabs. Adquiri anteriormente para me preparar para o exame SCBCD e recomendo fortemente, possuindo várias questões que inclusive caíram no exame. Além de ler conteúdo de pessoas que já passaram e disponibilizam seus resumos.ca


Bom agora é estudar, aguardar o dia da prova e comemorar(ou não!).  Let’s Rock!!! ou melhor Let’s Study!!!



Tags: ,

Uma forma de mostrar que podem acontecer coisas inexplicáveis no mundo do desenvolvimento de software, que o desenvolvedor não consegue explicar.


Certa vez eu estava usando o Notepad++ (um ótimo editor, recomendo!), ele me lança a seguinte Exception:

god_damn_exception

No momento lembro que estava fazendo uma busca de um diretório que tinham vários tipos de arquivos diferentes como Java, Xml, SQL e o notepad++ encontrou milhares de referências, acontecendo essa exception.


É uma ótima forma de dizer que aconteceu algo errado.

Valdemar em 23/02/10

Mais um mini-post, agora com uma dica que pode ser bastante útil. VisualVM é uma ferramenta de monitoramento para aplicações desenvolvidas em Java.


Executado com JDK 6 mas pode monitorar aplicações desenvolvidas em aplicações JDK 1.4 ou superior, tendo uma feature de “lightweigth Profiling”, que foi a feature que mais utilizei, além de ser free, já que tem ferramentas de profiling pagas.


VisualVM foi produzido para ser utilizado por desenvolvedores de aplicações, administradores de sistemas e usuários de aplicações desenvolvidas em Java. Localizado no diretório %JAVA_HOME%\bin\jvisualvm.exe no meu caso que estou utilizando o windows.


Segue uma imagem quando executado:


VisualVM - All-in-One Java Troubleshooting Tool


Veja mais Screenshots e Screencast sobre o VisualVM. Como começar.


Bom fica a dica de uma ótima ferramenta de Profiling

Tags: , , ,

Valdemar em 21/02/10

hibernate_interceptor


Buscando uma solução para um problema, acabei achando uma coisa interessante, bastante útil e que muito projetos poderiam utilizar.


Às vezes se quer realizar alguma auditoria em tabelas antes que as operações sejam efetivadas(comitadas). Operações antes de inserts, updates, deletes, geração de logs e etc. Isso é possível implementando um Interceptor com a vantagem de não ser necessário alterar seu código.

Para um exemplo simples, iremos adicionar a entidade, as propriedades para que seja feita a auditoria.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Entity
public EntidadeAuditada implements Serializable {
 
  @Id
  @GeneratedValue (strategy = GenerationType.IDENTITY)
  Long id
 
  @Version
  Long version
 
  @Column (name = "entry_text")
  String text
 
  @Temporal (TemporalType.TIMESTAMP)Date publishedOn
 
  String createdBy
  Date createdOn
  String updatedBy
  Date updatedOn
}


Utilizando a estratégia ImprovedNamingStrategy os para nomes de atributos, que serão traduzidos de createdBy para created_by.


Para criar um interceptor é preciso implementar um Interceptor ou melhor estender EmptyInterceptor para implementar apenas os métodos que realmente interessam.


Como exemplo, utilizo para quando uma entidade for inserida(save) e deletada(delete), sejam alterados as propriedades createBy, createdOn e updatedBy, updatedOn respectivamente, conforme mostrado no código abaixo:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class EntidadeInterceptor extends EmptyInterceptor {
 
  boolean onDelete(Object entity, Serializable id, Object[] currentState,
                      Object[] previousState, String[] propertyNames,
                      Type[] types) {
    setValue(currentState, propertyNames, "updatedBy", UserUtils.getCurrentUsername());
    setValue(currentState, propertyNames, "updatedOn", new Date());
    return true;
  }
 
  boolean onSave(Object entity, Serializable id, Object[] state,
                 String[] propertyNames, Type[] types) {
    setValue(state, propertyNames, "createdBy", UserUtils.getCurrentUsername());
    setValue(state, propertyNames, "createdOn", new Date());
    return true;
  }
 
  private void setValue(Object[] currentState, String[] propertyNames,
                        String propertyToSet, Object value) {
    def index = propertyNames.toList().indexOf(propertyToSet)
    if (index >= 0) {
      currentState[index] = value
    }
  }
}


E depois implementamos o método setValue para fazer realmente o “trabalho” de setar o valor(UserUtils.getCurrentUsername()) na propriedade(createdBy), por exemplo.


Para configurar o interceptor é preciso habilitá-lo no Hibernate Session, podendo ser habilitado globalmente através do SessionFactory ou para uma Session específica como no código a seguir:


1
2
3
4
5
6
7
8
9
10
// Configure interceptor globally (applies to all Sessions)
sessionFactory =
  new AnnotationConfiguration()
    .configure()
    .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)
    .setInterceptor(new EntidadeInterceptor())
    .buildSessionFactory()
 
// Enable per Session
Session session = getSessionFactory().openSession(new EntidadeInterceptor())


Se estiver utilizando o framework como Spring fica ainda mais simples de habilitar o interceptor globalmente, adicionado ao applicationContext.xml(arquivo de configuração do Spring):


1
2
3
4
5
6
7
8
 
<bean id="sessionFactory"
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="entityInterceptor">
    <bean class="net.valdemarjr.interceptors.EntidadeInterceptor"/>
  </property>
  <!-- additional Hibernate configuration properties -->
</bean>

Bom fica a dica aí, esse post tem como fonte dzone.com

Tags: ,

Valdemar em 11/02/10

A sessão mini-post serão post rápidos que farei para movimentar um pouco o blog e serão (ou pelo menos tentarei) postar dicas, boas práticas, novos frameworks e notícias de Java.


Começo essa sessão postando sobre uma dica que pode ser útil. ShutDown Hooks API é utilizado para registrar uma Thread, que não é executado imediatamente, mas quando a JVM inicia o processo de “desligamento” em uma ordem não específicada e todos os seus ShutDown Hooks registrados são executados.


Bastante útil quando se quer fechar/limpar recursos que foram previamente abertos/instanciados, como conexões de banco de dados. Para utilizar esse recurso é bastante simples:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package net.valdemarjr;
   public class ShutDownHook {
     public static void main(String[] args) {
       System.err.println("Iniciando programa");
       Runtime rt = Runtime.getRuntime();
       System.err.println("Main: adicionado shutdown hook");
       rt.addShutdownHook(new Thread() {
          public void run() {
             // In real life this might close a Connection or something.
             System.err.println("ShutDown Hook Executado!");
          }
       });
       System.err.println("Main: executando Runtime.exit(0)");
       rt.exit(0);
    }
 }


Bom fica essa pequena dica e um recurso que pode ser bastante útil.

Tags: , , ,

Valdemar em 02/02/10

testNG

TestNG é um framework inspirado no JUnit e NUnit, mas que foram adicionado novas funcionalidades que deixam o framework mais poderoso e fácil de usar. Algumas delas já foram implementadas em outros frameworks, mas as vantagens são:


- Suporte a annotation
– Configurações flexíveis
– Permite a distribuíção de testes
– Plugins para as principais IDE’s (netbeans, eclipse, IDEA…)


TestNG foi projetado para cobrir todas as categorias de testes: unidade, integração, regressão e etc, permitindo separar seu código Java dos testes a serem executados.  Podendo também especificar arbitrariamente métodos que poderão ser executados, em um momento específico dos testes, como “executar esse método antes de cada teste” ou “executar depois de todos os testes executarem”.



Outras features que gosto bastante é dependência de métodos e grupos de métodos, que garante que um grupo de testes sejam executados antes de outros. Grupos de grupos, quando você específica que um teste é de um grupo, podendo esse grupo ser inserido dentro de outro grupo maior. Os Relatórios podem ser gerados para mostrar os testes executados, o tempo gasto, status e etc. A Geração de relatório dos testes realizados que também é compatível com o JUnitReport. Veja um exemplo.


Os testes possuem 3 tipos de dados:

Parameters, são parâmetros passados para os métodos dos testes. Groups, dividido em duas partes, definição (quando você quer criar grupos que contêm outros grupos) e execução (específica o grupo de testes a serem executados). Classes, que definem quais classes farão parte do teste em execução.


Bom, existem diversas vantagens em se utilizar o TestNG, mas a lista é muito longa, então se você não conhece, faça o download e experimente! Existe um artigo fazendo uma comparação entre o JUnit e o TestNG bem interessante. Que outras vantagens você consegue identificar que são realmente úteis aos testes que o TestNG proporciona?


Fiz um projeto exemplo bem simples no Maven2 mostrando uma classe de testes e alguns annotations.

Tags: , ,