Exemplo Spring JMS: envio de e-mail assíncrono

Ao desenvolver nossos sistemas, nos deparamos as vezes com um problema: alguma funcionalidade é muito pesada em termos de processamento e não precisa necessariamente ser feita de forma sincronizada com o resto da lógica de negócio, por exemplo, envio de e-mails, envio de SMS, etc.

Nestes casos, para diminuir o tempo que o usuário espera pela resposta do sistema, é conveniente tornar assíncrono o processamento destas tarefas em relação ao resto da lógica. Uma estratégia comumente usada é utilizar filas de mensagens. Nestes casos a lógica principal de negócio em vez de chamar a rotina que envia o e-mail, só chama uma rotina que insere uma mensagem na fila específica de envio de e-mails. Enquanto isso, temos uma rotina “consumidora” desta fila, desatrealada da lógica principal, que “consumirá” as mensagens, tratando-as de forma adequada conforme sua disponibilidade, de forma assíncrona ao resto da aplicação.

Spring provê um framework que abstrai e simplifica o uso da API JMS (Java Message Service). Particularmente para este post, utilizaremos este mecanismo do Spring em conjunto com o suporte do Spring para POJOs dirigidos a mensagens (um modo de receber mensagens que se parece com beans orientado a mensagens Message-Driven BeansMDBs da especificação EJB). mas, que ao contrário do MDB nos permite utilizar um servidor web comum, como Tomcat, por exemplo.

Continuar lendo

Mel na chupeta: dados de estados x cidades do Brasil

Muitos sistemas necessitam de informações sobre estados e cidades, mas ao buscar estas informações, se percebe muitos dados incorretos e uma falta de padronização dos nomes.

Mas o site do IBGE (Instituto Brasileiro de Geografia e Estatística) possui uma grande gama de dados disponibilizados publicamente, inclusive a lista de cidades por estado, mas não encontrei nenhuma forma de conseguir baixar os dados já facilmente para meu uso, tendo que baixar o documento com a lista de cidades para cada estado e tratar estes dados.

Portanto, para facilitar minha vida, exportei para um formato CSV e subi para a minha base.

Disponibilizo aqui os dados para download.

Continuar lendo

A técnica de Pomodoro no desenvolvimento de software

Técnica de PomodoroQuem nunca chegou no fim do dia e percebeu que o dia não rendeu nada em trabalho útil? Onde foram parar as 8 horas (ou mais) de trabalho?

Geralmente as pessoas tendem a esquecer os minutos gastos no twitter, o tempo lendo notícias no uol, os e-mails respondidos, telefonemas atendidos, perguntas de colegas respondidas, ajudas a secretária para scanear um documento, etc, etc.

Pode não parecer, mas estas “pequenas” interrupções consomem muito tempo que não é gasto efetivamente no trabalho.

E se o trabalho não é feito, surgem os atrasos no projeto (que podem acabar sendo percebidos só no final do prazo em projetos mal administrados), necessidades de horas extras e junto vem o stress e a famigerada “ansiedade do tempo  abstrato”.

O livro “The Pomodro Technique” (veja link para download grátis abaixo no post), define dois tipos de percepção de tempo:

1– “Becoming”: A idéia abstrata de tempo, que nasce do hábito de medir tempo (horas, minutos, etc) e a idéia de estar ficando tarde, a sensação do projeto atrasando, o tempo escoando continuamente sem ter terminado aquela parte do sistema. Esta é a percepção ruim (guarde na memória esta).

2– “Sucessão de Eventos”: uma idéia mais concreta do tempo, a idéia de que uma tarefa sucede a outra: “primeiro eu vou escovar os dentes, depois vou tomar banho, após vou dormir”. Crianças desenvolvem primeiro esta idéia de tempo, antes de desenvolver a idéia abstrata.

A técnica de Pomodoro visa diminuir essa ansiedade de tempo abstrato e aumentar foco, concentração e, consequentemente, a produtividade nas tarefas a serem feitas.

Continuar lendo