DataTable em Java ?

Quem usa ADO.NET rotineiramente sabe o quão importante é o conjunto de objetos disponíveis pelo framework para trabalho com Datasets.  Entre os objetos existentes  meu favorito é o DataTable,  um versátil componente que mantem uma representação tabular de um conjunto de dados (uma tabela em um banco de dados, por exemplo) o qual podemos carregar e usar em modo “offline”.  

DataTable permite, dentre outras coisas, carregar seus dados a partir de um DataProvider qualquer (Oracle, MySQL, Postgree, etc)  ou diretamente a através de um arquivo XML (sem conexão com um banco de dados) o que é especialmente útil em muitas situações de programação.

E para quem programa em Java?  Como sabemos,  a API JDBC não possui algo semelhante e o “primo” mais parecido com o DataTable, funcionalmente falando,  seria o objeto ResultSet – o qual requer uma conexão ativa durante todo o tempo em que você estiver lendo ou alterando uma linha retornada.

Pois bem, recentemente ao portar um sistema desenvolvido em  .NET para Java, me deparei com a necessidade de ter algo semelhante ao DataTable – especialmente após constatar que a adaptação do modelo para o equivalente em JDBC aumentaria significativamente o número de linhas de código do sistema.   Um dos requerimentos era justamente poder carregar um Dataset e encerrar a conexão com o banco de dados imediatamente, liberando-a para outros processos concorrentes.

Com esta motivação,  criei um novo componente com algumas características-chave do DataTable  e o adicionei à biblioteca TinySQL (um “wrapper” para o JDBC que desenvolvi há alguns anos).    Para se ter uma ideia da sintaxe da coisa,   eis um pequeno trecho de código de uma das rotinas de teste do novo DataTable –  e que usa também o objeto Query de TinySQL:

public void DataTableTest(ConnectionFactory factory) throws SQLException {
// Cria uma query para obter retornar dados do banco
Query query = new Query(factory.getConnection());
// Define uma consulta em uma tabela de usuarios
query.setSQL("SELECT * FROM TSYS_USUARIO");
// Executa a query
query.open();
// Cria nosso DataTable
DataTable table = new DataTable();
// Carrega o objeto DataTable com todas as linhas retornadas pela Query
table.load(query.getResultSet());
// A query pode ser fechada logo em seguida !
query.close();
// Itera sobre cada linha e exibe o conteudo de uma coluna
for (DataRow row : table.getRows()) {
System.out.println(row.getColumn("TSYS_NOME").getValue().toString());
}
}

Como se pode perceber, o DataTable “for Java” possui aplicação semelhante ao de seu similar em .NET, incluindo os objetos DataColumn e DataRow. Esta prova de conceito inicial possui algumas limitações,  como não permitir alterar o dataset associado (algo que até faz sentido se a  intenção for usá-lo apenas no modo offline) e também não permite carregar ou salvar o conjunto de dados a partir de um arquivo XML – feature que fica para a próxima versão.

Projeto V/EFIS

 Finalmente depois de muito refactoring, cheguei a uma versão utilizável do meu projeto V/EFIS (virtual eletronic flight instrumentation system).  O objetivo do projeto (ver imagem abaixo) é criar os principais indicadores gráficos utilizados para monitorar a navegação e o desempenho de uma aeronave em ambiente de simulador  – que no meu caso é o Flightgear, um software open-source muito utilizado em pesquisa acadêmica.
Display do Projeto V/EFIS (Glass Cocckpit) em ação
Display do Projeto V/EFIS (Glass Cockpit) em ação.

 Tradicionalmente os simuladores de voo trazem um cockpit 3D renderizando tanto o cenário externo quanto os instrumentos na cabine da aeronave.   Embora esta abordagem seja adequada para fins de diversão, deixa a desejar quando queremos uma experiência mais realista. O uso de um cockpit digital fora do sistema do simulador permite criar uma experiência muito mais rica, além de racionalizar o uso dos sistemas computacionais disponíveis,  já que o simulador agora precisa apenas controlar o modelo de voo e renderizar o cenário.  O resultado final é muito mais interessante.   Iniciei o V/EFIS em 2007 e embora possa dedicar apenas algumas poucas horas por semana ao projeto,  o andamento tem sido satisfatório.  Até o presente,  foram criados os seguintes artefatos:

  • Interface com o Flightgear
  • PFD-Primary Flight Display
  • NG-Navigation Display
  • Framework e sistema de suporte a OPEN-GL
Atualmente estou desenvolvendo os gauges para o ECAM (Electronic Centralised Aircraft Monitor) que ainda está em fase inicial de projeto.  Todo o sistema é escrito em C++ (com Visual Studio) e um framework para dar suporte à renderização com OpenGL também está sendo criado. Em futuros posts, darei mais informações sobre o V/EFIS e sobre o resultado dos voos que fiz utilizando o sistema.

NF-e de Abril: Missão Cumprida !

Fazer um software complexo como a NF-e ser implantado no prazo e funcionar bem não deveria ser motivo de comemoração, afinal este é o nosso trabalho e somos pagos para isto. Porém,  é difícil conter a satisfação quando as coisas funcionam tão bem

É assim que nossa equipe tem se referido à implantação da NF-e para os clientes obrigados em Abril de 2009.  Conseguimos treinar os usuários antes da implantação, demos palestras sobre o assunto e parte da equipe que não tinha participado da implantação de NF-e em Dezembro/2008 absorveu muito bem os processos e a tecnologia.   Mais importante ainda,  o período de pós-implantação está sendo “um tédio” de tranquilo, como observou bem um de nossos colegas.

Enfim,  não vou sair por aí soltando foguetes mas estou ciente de que o dever foi cumprido.  Qual o segredo ? não há segredo, a não ser aquela velha fórmula que mistura planejamento mais trabalho duro.

Que venha Setembro !

Participou da Palestra Sobre NF-e ?

Desejo agradecer a todos que tem participado das palestras sobre Nota Fiscal Eletrônica  promovidas pela Próton Sistemas e que tem demonstrado interesse em conhecer melhor este novo paradigma de interação entre os contribuintes e o Fisco.   Temos recebido retornos bastante encorajadores de que esta iniciativa de multiplicar o conhecimento sobre o assunto foi realmente acertada – graças à visão da diretoria da Próton Sistemas.

Como trata-se de uma disciplina complexa,  tomei a inciativa de abrir este espaço à comunidade apenas para sanar dúvidas de interesse geral sobre o assunto.   Aqui, todos podem postar coisas do tipo “Posso colocar o logotipo de minha empresa no DANFE?”, ou “O que é formulário de contingência?”.   

Se desejarem tirar dúvidas muito específicas sobre determinada empresa, então o melhor a fazer é entrar em contato via email mesmo, divulgado na palestra.  Combinado?  Aguardo seus comentários e perguntas.

Gx3D

Há alguns anos tenho aprendido que criar games como um hobby é um ótimo exercício para manter as habilidades de desenvolvimento em dia (ainda mais, quando se tem três filhos pequenos que são “experts” no assunto).  De fato, poucas tarefas de programação são tão exigentes quando desenvolver um game moderno em 3D.  Porém tal esforço é compensado com um leque de conhecimento multi-disciplinar que inclui programação orientada a objetos, padrões de projeto, design gráfico, modelagem 3D, inteligência artificial e física de movimento. 

044

O screenshot acima é uma prova de conceito para um dos projetos que tenho em andamento, que não tem nada a ver com a indústria do entretenimento digital.  Trata-se do Gx3D um framework feito em C++ que encapsula muitas das complexidades encontradas no desenvolvimento de uma aplicação 3D.  Pretendo utilizá-lo em outro projeto experimental, o WMS-3D,  um software que permite a um gestor de armazém (CD) viajar virtualmente  entre os endereços de um depósito e realizar ações – como contagem de uma posição pallet sem que para isto precise estar lá fisicamente.  Mais sobre este projeto em futuros posts.