Archive for August, 2008

Mensagens JMS agendadas Just-In-Time

Monday, August 25th, 2008

Uma feature muito legal de mensagens JMS é a possibilidade de poder agendar quando uma mensagem deverá ser recebida pelo MDB. Eu não sei se isso faz parte da especificação, ou se apenas o JBoss possui isso. O exemplo que eu vou demonstrar funciona apenas para o JBoss.

Primeiro vamos a um cenário onde este agendamento é útil.

Vamos supor que a seguinte regra é solicitada: Ao tentarmos cobrar o cartão do cliente, se a operadora retornar transação negada, o sistema deve re-tentar cobrar este cartão por mais 2 dias, sendo que cada tentativa deve ser feita após 24hs.

É possível resolver este requisito usando banco de dados e as famosas flags, mas essa definitivamente não é uma solução elegante. Imagina que você precisaria ficar fazendo pooling no banco para ver quais cobranças já passaram de 24 horas para processa-las novamente. Ou seja, horrível.

Com JMS dá pra fazer algo muito melhor. Se quando a compra é feita, retornar negado, basta enviar uma mensagem JMS pra fila, agendando essa mensagem para ser processada apenas após 24 horas. Quando der essas 24hhs, o MDB lê a mensagem e chama novamente o módulo de cobrança.

Muito simples e elegante. Sem pooling, sem ficar controlando status manualmente, nem nada desse tipo.

O código para fazer isso é extremamente simples:


ObjectMessage message = session.createObjectMessage();</code></code></code>

message.setLongProperty("JMS_JBOSS_SCHEDULED_DELIVERY", (new Date().getTime() + (1000 * 60 * 60 * 24)));

Pronto, você acabou de agendar a entrega da sua mensagem para daqui a 24 horas. Essa conta maluca aí é porque a data precisa ser passada em milisegundos. :-)

Eu sou um grande fã de JMS, e essa é mais uma das caracteristicas que me fazem gostar dessa tecnologia.

[]’s

Matemática: A melhor amiga de um programador

Friday, August 15th, 2008

Neste post quero mostrar como um bom conhecimento matemático pode facilitar e muito a vida de um programador. Para isso, vou usar 3 exemplos. Vamos e eles….

O primeiro exemplo foi uma situação que passei com um ex-colega de trabalho. Ele tinha que resolver para a faculdade o problema das “Torres de Hanói”, creio que conhecido de todos que frequentam esse blog. O professor queria que fosse desenvolvido um algoritmo para dado uma quantidade de discos, todos inicialmente no pino 1, retornasse quantos movimentos seriam necessários para mover todos os discos para algum outro pino. Meu amigo me pediu para ajudar ele com esse problema. Ele tava fazendo um algoritmo, mas não estava conseguindo….porém, a solução deste problema é totalmente matemática. A formula pow(2, n) - 1 retorna exatamente o resultado esperado. Simples assim.

Outro problema é por exemplo, você quer somar todos os números de 0 a N. Como resolver isso? Simples não? Faz um for até N e vai somando numa variavel. Gauss diria que voce pode resolver isso da seguinte forma:

Soma = N * (N+1) / 2

Quem não gosta de matemática, provavelmente não liga para analise de algoritmos, então acha que dá na mesma. Mas tenta fazer isso com N igual a 1000000 com o for e compara com a solução da expressão.

Um blog que eu gosto muito e sempre acompanho é o DQSoft do Daniel Quadros (http://dqsoft.blogspot.com). O Daniel fez um post falando de um problema recente que ele teve que resolver no “Google Code Jam”. (http://dqsoft.blogspot.com/2008/08/google-code-jam-2008-triangle-areas.html)Reparem como a solução é trivial, dependendo apenas de sacadas matemáticas.

Viram só? Os exemplos não estão relacionados a coisas que usamos no nosso dia-a-dia, mas eu creio que o mais importante disso tudo é a capacidade lógica que a matemática proporciona.

[]’s

PS: A prova do problema das Torres de Hanói pode ser encontrada no livro “Matematica Concreta”

PS1: A questão da soma foi descoberta por Gauss, que em uma aula do ensino fundamental, recebeu como castigo somar até 100, e rapidamente falou 5050, surpreendendo a todos.

ICQ x MSN, Google x Cuil. Será que cabe uma reflexão?

Sunday, August 3rd, 2008

Hoje tive um momento saudosista e me veio uma vontade enorme de entrar no ICQ. Lembrei meu UIN e minha senha, abri o Pidgin, e me conectei ao ICQ depois de mais ou menos uns 5 anos eu acho. Infelizmente não tinha mais nenhum contato que estivesse online. :-(

Mas por alguns minutos fiquei olhando e lembrando com saudades dos tempos do ICQ. Aonde Internet Banda Larga era um luxo para poucos, a maioria, assim como eu, usava Dial. O ICQ bombava depois da 12:00, momento que era cobrado somente um pulso por ligação. Lembro que eu ficava contando
os minutos para a meia noite. Bons tempos! :-D

O ICQ dominava amplamente sua categoria, e quando o MSN apareceu, era motivo de piada. Eu imaginava que o MSN jamais concorreria com o ICQ…hã…mero engano. Ao longo do tempo, fui vendo todos meus contatos do ICQ migrando para o MSN. Olhava aquilo com incredulidade, não entendia o por quê, até hoje não entendo, mas o fato é que, hoje sou mais um desses que abandonou o ICQ e usa o MSN, pois se continuasse a usar o ICQ, não teria ninguem pra falar. :-)

Isso me fez pensar sobre o Cuil.com. Todos olham pra ele com um olhar de incredulidade, achando que ele jamais será páreo para o gigante Google. Nos foruns por aí tem alguns ridicularizando o Cuil. Pois é, asim como era com o ICQ x MSN…

Realmente não sei o que irá acontecer, o que eu sei é que será uma briga de gênios, e quem irá ganhar somos nós, utilizadores assiduos dos mecanismos de busca, mas cabe uma reflexão a esses que estão ridicularizando o Cuil, pois as coisas podem mudar quando a gente menos espera no mundo da informática.