Archive for Fevereiro, 2008

Posted by paulovittor23 at 10 Fevereiro 2008

Category: Engenharia de Software, Peopleware

Chapter 4: Quality – If time permits

O caráter humano é dominado por um pequeno número de instintos básicos: sobrevivência, auto-estima, reprodução, território, entre outros. Estes são fixados diretamente nos “firmwares” de nossos cérebros. Nós podemos considerar estes instintos friamente, sem nenhuma paixão (como estamos fazendo agora), mas quando você os sente, sempre há paixão envolvida. Apenas um pequeno desafio a um desses valores pode ser perturbador.
Qualquer emoção forte em nós despertada é um sinal de que um dos instintos do cérebro foi ameaçado. Um gerente novato pode acreditar que trabalho pode ser realizado sem que as emoções das pessoas sejam envolvidas, mas se você possui alguma experiência como gerente você aprendeu o oposto. Nosso trabalho nos dá plena oportunidade de exercitar as emoções.

(mais…)

Posted by paulovittor23 at 6 Fevereiro 2008

Category: Java

Process.waitFor(), corrigindo o deadlock no Windows

Há um tempo atrás eu estava desenvolvendo uma mini biblioteca para trabalhar a execução de comandos no SO de uma forma mais amigável, uma espécie de DSL. Criada a biblioteca realizei alguns testes em ambiente Linux. Tudo funcionamento dentro do planejado, hora de utilizá-la…

Bom, na primeira real utilização da biblioteca, em ambiente Win32 executei um “ipconfig /all”, e para minha surpresa, após todos os testes que havia realizado o comando simplesmente não respondeu.

Voltei ao Linux, mudei o comando para “ifconfig” e o comando executou sem problemas…

Comecei a debugar a biblioteca afim de descobrir o que estava causando o congelamento na execução do comando no SO… Após alguns minutos, cheguei finalmente ao método “waitFor()” da classe “Process”… pela definição esse método faz com que a thread corrente espere, caso necessário, até o processo representado pelo objeto Process terminar.

A questão é que o método “Runtime.exec()” (que devolve a instância do processo criado) cria um pipe para a saída padrão e quando um processo filho escreve uma quantidade grande de dados neste pipe, de modo a deixar o buffer cheio, o pipe é bloqueado pelo Windows até que o processo pai leia esse buffer. Logo, caso o processo pai nunca leia a saída padrão do processo filho teremos um deadlock.

(mais…)

Posted by paulovittor23 at 1 Fevereiro 2008

Category: Java

Pegando o Mac Address antes e depois do Mustang (Java 6)

Recentemente tive a necessidade de automatizar o preenchimento de um arquivo de configurações. Nesse arquivo, um dos valores que eram preenchidos era o Mac Address.
Logo me veio na cabeça a necessidade de executar o “ipconfig /all” (win) / “ifconfig” (linux) / “?” (mac)… capturar a saída, tratar o retorno, etc. Sem falar nas dificuldades de se fazer um parser independente do SO, do idioma do SO, ou seja, muitas variáveis que ao qualquer descuido fariam o parser falhar. =/
Bom, uma das novidades do Mustang é que a classe “java.net.NetworkInterface” traz um novo método para pegar o Mac Address de forma transparente. O método se chama “getHardwareAddress”. A seguir vou mostrar um exemplo de como pegar o Mac Address antes e depois do Java 6. Acredito que vá ficar claro a simplicidade e confiabilidade do novo método.

(mais…)