Blog do PV

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…)

Posted by paulovittor23 at 27 Janeiro 2008

Category: Java, LDAP

JDBC-LDAP Bridge Driver

Com a finalidade de facilitar a utilização do serviço de diretórios LDAP a Novell desenvolveu uma ponte JDBC-LDAP. Essa ponte permite a utilização de SQL para fazer consultas ou atualizações em uma árvore de diretórios através de aplicações Java.

O site do projeto é o http://www.openldap.org/jdbcldap/

Eu não encontrei nenhum release do projeto já compilado (se alguém encontrar me avise XD), mas os arquivos fontes podem ser baixados por qualquer cliente CVS. No meu caso utilizei o TortoiseCVS ( http://www.tortoisecvs.org/ ).

(mais…)

Posted by paulovittor23 at 19 Janeiro 2008

Category: Java, JBoss Seam

Gerando código com JBoss Seam

Neste artigo vou tentar mostrar um pouco do gerador de aplicações JEE do JBoss Seam, que após algum tempo de estudo e prática pode ajudar bastante os desenvolvedores.
Não é meu intuito aqui explicar o funcionamento do framework em si (escreverei sobre o mesmo mais pra frente), neste artigo abordarei APENAS a ferramenta de geração de código.
A geração de código sempre foi algo muito polêmico entre os desenvolvedores, alguns repudiam por completo essa prática alegando que o código gerado não é muito limpo, etc..
Por outro lado, não há como negar que praticidade em certos momentos é fundamental. Enfim, venho trabalhando com esse framework há aproximadamente 4 meses e já pude mapear alguns momentos em que a utilização do gerador de código pode colaborar ou dificultar o desenvolvimento. Geralmente, nas ditas aplicações comerciais, utilizamos banco de dados que são formados por “tabelas básicas” e “tabelas de movimentação”. Bom, tabelas básicas são aquelas onde geralmente armazenamos dados que serão apenas consultados, como por exemplo “statuspedido”, que armazenará um determinado número de status de pedidos, que serão praticamente imutáveis. Tabelas de movimentação, por sua vez, são aquelas que sofrem muitas atualizações(Create, Update, Delete) e onde geralmente relacionamos um determinado número de tabelas básicas. O ponto onde quero chegar é: o gerador de código do Seam é muito interessante quando estamos falando de tabelas báscias, onde o CRUD gerado é realmente aproveitável. (mais…)

Posted by paulovittor23 at 16 Janeiro 2008

Category: Engenharia de Software, Peopleware

Tags:,

Chapter 3: Vienna Waits For You

Spanish Theory Management

Há muito tempo atrás, historiadores formaram uma abstração sobre diferentes teorias de valor. Uma delas é a “teoria espanhola” que diz que existe um acumulo de valor finito na Terra, portanto, a base do acumulo de riquezas foi aprender a extrair o mais eficientemente possível através do solo ou das costas das pessoas. Em seguida veio a “teoria inglesa” que dizia que valor poderia ser criado através de engenhos e tecnologia.
Então a Inglaterra sofreu a revolução industrial enquanto a Espanha corria atrás da descoberta e exploração de novas terras. Eles movimentaram quantidades enormes de ouro pelo oceano, e tudo que conseguiram com esse esforço foi uma enorme inflação (muito ouro por poucas mercadorias utilizáveis).
A “teoria espanhola” do valor ainda vive, principalmente entre gerentes, de todo lugar.
Aonde quer que estejam, estão sempre falando de “produtividade”. Produtividade pode ser entendida como conceber mais em uma hora de trabalho, ou, como é mais frequentemente entendida, extrair mais por uma hora de pagamento, sendo que, existe um abismo entre as duas compreensões. Gerentes seguidores da “teoria espanhola” sonham em obter maiores níveis de produtividade através de horas-extras não remuneradas. Eles dividem todo o trabalho que é feito em uma semana por 40 horas semanais e não pelas oitenta, noventa horas que os trabalhadores se aplicam ao trabalho.
Isto não é exatamente produtividade, soa mais como “fraude”, porém é o estado da arte para muitos gerentes. Eles intimidam e persuadem suas pessoas a trabalharem por longas jornadas. Tentam impressionar as pessoas sobre o quão importante é uma data de entrega (mesmo que seja uma data totalmente arbitrária).

(mais…)