Sexta-feira, 12 de Junho de 2009

Novamente liberado para postagens

Olá galera! Por acaso verifiquei que consegui logar no blogger e quem sabe eu possa postar mais algumas coisas se isto se mantiver.
Já faz umas três semanas que estou morando em meu novo AP, este sim adquirido e não alugado aqui em POA. Finalmente minha esposa e eu poderemos construir nossa lar para vivermos tranquilamente pelos próximos 6 ou 7 anos, após isto acredito que poderemos pensar em mudarmos para um AP com área maior que os atuais 30m².
Estive incursionando nos meandros de meu cérebro e disto surgiram algumas idéias de cunho filosófico, mas que ainda não pude aprofundar nas definições. A primeira: me parece que a pergunta não deveria ser "qual o sentido da vida?", mas sim "porque somos inteligentes?", afinal vida é uma convenção. Sem inteligência jamais perguntaríamos "qual o sentido da vida?", "Deus existe?". Ainda, jamais afirmaríamos "Deus existe." ou "Deus não existe". Ah! É verdade, alguns poderiam dizer que para fazer estas perguntas, além da inteligência é necessária uma linguagem, pois sem esta não poderíamos formar frases.

Quinta-feira, 14 de Maio de 2009

Ferramento para União e Pdginação de PDFs, PdfMergeAndPaging

Estou com problemas de acesso ao blogger aqui da empresa onde trabalho e tive que recorrer a um site redirecionador para tanto, inclusive enviando minha senha em modo inseguro.
Vamos ao projeto, surgiu uma necessidade aqui na empresa de alguns departamentos que geram arquivos PDF a partir de várias aplicativos e necessitavam juntá-los e após paginá-lo para publicação na intranet e internet. Para resolver isto, um dos departamento fez a aquisição de uma licença do Adobe Acrobat Professional. Perfeito, sanou toda o seu problema, mas os demais departamentos ainda continuam sem solução.
Pensando nisto resolvi escrever um aplicativo para tentar auxiliar nesta tarefa, para tanto baseei este projeto no iText e acredito que tenha chegado a um uso razoável já.
Como hospedei este projeto no code.google, resolvi divulgá-lo a quem possa interessar http://pdfmergeandpaging.googlecode.com/files/launch.jnlp para instalação do aplicativo via Java Web Start e http://code.google.com/p/pdfmergeandpaging/ para acesso ao home do projeto.
Basicamente estou utilizando Netbeans 6.5 e as bibliotecas iText e ini4j.
Era isto por hora galera.

Quinta-feira, 30 de Abril de 2009

Jogo de Tabuleiro "War" e JBoss Seam


Boa tarde a todos, especialmente ao melhores da américa neste momento!

O que tem a ver War e JBoss Seam? Nada isoladamente, até o momento em que resolvo desenvolver uma versão deste jogo de tabuleiro em versão Web.
Na verdade eu ainda estou decidindo, enquanto desenho o mapa do jogo em SVG com o maravilhoso Inkscape, se faço a implementação em Web ou Desktop.
Se eu acabar decidindo por Web pretendo praticar JBoss Seam com Eclipse, se acaso decidir por Desktop vai ser mesmo com Netbeans.
A idéia não é implementar toda uma infraestrutura para jogos on-line e sim permitir usar o computador como tabuleiro para o jogo. Acredito que usando somente SVG com Javascript chegaria próximo do resultado que desejo, mas como é um projeto pessoal e eu quero estudar novas tecnologias, é uma boa motivação.
Ah! Esqueci de citar que pretendo usar Apache Batik para o trato com SVG. Tá difícil de encontrar boa documentação e como normalmente apelo pra fazer de qualquer jeito desde que funcione, vai acontecer de eu postar códigos aqui bem feinhos e, quem sabe, bem pouco otimizados.
Abraçõs...

Terça-feira, 28 de Abril de 2009

Ubuntu + M$ ISA Server

Boa tarde gurizada medonha!
Estava eu fuçando com o novíssimo Ubuntu 9.04 logo após instalá-lo e reparei que, embora minha conexão de rede estivesse funcionando e eu conseguisse navegar, reparei que um apt-get update que ocorria problema de autenticação no ISA Server (proxy da M$ aqui na CORSAN).
Antigamente e em meu Debian, bastava apontar para o endereço do proxy na variável de ambiente http_proxy e tudo resolvido, acesso liberado. Após 15 minutos de tentativas frustradas, resolvi apelar pro google e de lá veio a solução "ntlmaps".
Mais que depressa pus-me a baixar e instalar este serviço e então pude usar apt-get e synaptic tranquilamente.
Acontece que logo em seguida o computador virou uma carroça, corri para verificar o que tomava todo o seu processamento e lá estava o ntlmaps.
Depois de várias vezes "restartar" o serviço, catei uma alternativa e logo o google retornou-me o cntlm.
Barbadamente instalei-o e configurei no arquivo /etc/cntlm.conf usuario, senha e endereço do proxy e pronto.
Já estou a alguns minutos navegando tranquilamente sem esgasgos. Recomendo!

Quarta-feira, 1 de Abril de 2009

Eclipse Ganymede + JBoss Seam

Eis que acredito ter atingido o meu ápice em termos de utilização do maravilhoso framework Mentawai, muito embora esteja longe de ter utilizado todos os seus recursos. Digo isto porque minha capacidade em Java, J2EE, na verdade em desenvolvimento e projeto de softwares em geral, é bem limitada e isto que sou Analista de Sistemas graduado em Bacharelado em Sistemas de Informação.
Bem, mas não vem ao caso ficar denegrindo assim, veementemente minhas capacidades.
UM comportamento, sim, um único comportamento que na verdade é um suporte ao Mentawai está fazendo com que eu procure um framework alternativo e eis que explico o comportamento e o porquê desta procura.
Precisava de um campo em um formulário web simples que permitisse somente a entrada de números com casas decimais, prontamente recorri ao fórum e às excelentes páginas de apresentação do Mentawai e encontrei o que precisava, o inputMoney. Perfeito, rapidamente estava podendo digitar somente números com vírgulas naquele campo. O problema foi o comportamento deste componente. É comum e isto já está gravado no DNA de todo cidadão que usa interfaces gráficas esperar que uma vez um texto selecionado receba a entrada de algum caracter, seja via teclado, área de transferência, etc, este seja substituído por esta nova entrada, mas o inputMoney (que na verdade é um regido por javascript) simplesmente ignora a seleção e tudo que digito é acrescentado ao conteúdo original e isto é no mínimo irritante, pois o cidadão tem que primeiro atentar ao fato de apagar todo o conteúdo para depois digitar o novo, sem contar que as casas decimais deve ser entradas obrigatoriamente, ou seja, se preciso do valor 15 para um campo com duas casas decimais tenho que entrar 1500. Simplesmente não gostei nem um pouco disto e como disse acima, sou limitado (de agora em diante esqueçam isto por favor), restou-me pedir ajuda encarecidamente no fórum, mas como o pessoal eu sei que realmente é ocupado e fez um belo trabalho em nos disponibilizar este magnífico framework, eu já esperava que ficaria sem resposta.
Não pessoal, não estou reclamando de má vontade ou algo parecido por parte dos desenvolvedores do Mentawai e muito menos estou sendo irônico, pois sei que o inputMoney na verdade é um "plus" do projeto.
Pois bem, muito embora o Saoj tenha escrito que o Mentawai faz tudo que o JBoss Seam faz e de forma mais compacta e direta, foi justamente esta comparação que aguçou meus sentidos a estudar o JBoss Seam, pois nem ao menos sabia qual era seu propósito até aquele momento. Pelo que pude entender, superficialmente, tem a intenção de fazer a ligação do JSF com os demais framework normalmente utilizados em J2EE (EJB 3.0, JPA, Hibernate, Ajax) facilitando ou automatizando esta integração e diminuindo consideravelmente a quantidade de arquivos e/de configurações necessários.
É isto que sei até o momento e o que mais vou relatar agora é como instalar e configurar o JBoss Seam 2.1.1-GA com Eclipse Ganymede, tomando por base o ótimo post do nosso amigo Sílvio Netto.

Então vamos lá (e considerando que já tenhas o JDK 6 instalado)!
Criemos um diretório que será nossa base, por exemplo, c:\DevelopEnv e lá descompactemos (estou usando como ambiente no momento um Windows XP 32bits):

Eclipse Ganymede;
JBoss 5.0.1.GA-jdk6;
JBoss Seam 2.1.1.GA;
JBoss Tools All 3.0.0.GA;

Atente para que o JBoss Tools seja descompactado dentro da pasta onde foi descompactado o Eclipse, pois ele é um conjunto de plugins para este.

A partir de agora vou fazer um copy-paste do post do Sílvio, alterando somente o que mudou daquele ambiente para este:

1 - Configurar o Eclipse
Alterar a perspectiva para Seam.
Window → Open Perspective → Other → Seam.

2 – Configurar o JBoss AS
Window → Preferences → Server → Runtime Environments → Add
JBoss Community → JBoss 5.0 Runtime
Altere o home directory para: C:\DevelopEnv\jboss-5.0.1.GA
Configuration: default.

3 – Configurar a visualização do servidor
JBoss Server View → Clicar com o direito → New Server
JBoss AS 5.0 → Next → Next → Finish

4 – Configurar Conectividade
Window → Preferences → Data Management → Connectivity → Driver Definitions → Add
HSQLDB JDBC Driver 1.8
Jar List → Driver File(s) → Add Jar/Zip:
hsqldb.jar → Remove Jar/Zip
Add Jar/Zip C:\DevelopEnv\jboss-5.0.1.GA\common\lib\hsqldb.jar
OK

5 – Criar um projeto
File → New → Seam Web Project
Name: agenda
Configurations: Dynamic Web Project with Seam 2.0
Next → Next → Next
Seam runtime: Add
Home Folder: C:\DevelopEnv\jboss-seam-2.1.1.GA
Deploy as: WAR
Database Type: HSQL
Connection profile: → New...→ HSQLDB → Finish
Finish

(O passo de anexar a aplicação agenda ao servidor pra mim não foi necessário)

6 – Iniciar o JBoss
Clique com o direito em JBoss 5.0 Server → Start

4 – Acessar o sistema
Abra um browser e digite: http://localhost:8080/agenda

Era isto gurizada.

Quarta-feira, 18 de Março de 2009

HTML: select (drop down) em cascata com MentaAjax

Finalmente acredito ter chegado a uma boa solução para controle de 3 campos select (drop down ou mesmo combobox) em cascatas. Para melhor ilustração aí vai o cenário da estrutura de dados. Tenho um catálogo de materiais, cada item deste catálogo faz parte de um subgrupo, cada subgrupo faz parte de um grupo e cada grupo faz parte de uma classe. Preciso selecionar o subgrupo a que pertence um item do catálogo e para tanto faz-se necessário: primeiro a seleção da classe, feita esta seleção o select com as grupos é preenchido; segundo faz-se a seleção do grupo e com isto o select dos subgrupos é preenchido para seleção final.
Estou desenvolvendo este catálogo em Java com mentawai para MVC. Tentei utilizar um cenário igual em que o cascateamento é feito com País, Estado e Cidade, desenvolvimento e relatado no fórum do mentawai, mas não obtive o resultado que desejava. Na verdade eu queria que ao ser feita uma nova seleção de classe, automaticamente os select com grupos e subgrupos fosse preenchidos automaticamente, sendo que o select dos grupos conteria os grupos da classe selecionada e o select dos subgrupos conteria os subgrupos do primeiro grupo da classe selecionada.
Chega de enrolação e vamos ao código!
Primeiro as configurações das actions no ApplicationManager:


action("/manager/FormMateriais", FormMateriais.class).on(SUCCESS, fwd("/manager/formMaterial.page"));
action("/manager/FormMateriais", FormMateriais.class, "add").on(SUCCESS, fwd("/manager/FormMateriais.mtw"));
action("/manager/FormMateriais", FormMateriais.class, "preencheComboGrupo").ajaxOk(new JSONGenericRenderer());
action("/manager/FormMateriais", FormMateriais.class, "preencheComboSubGrupo").ajaxOk(new JSONGenericRenderer());




Ao ser chamada URL /manager/FormMateriais.mtw, esta preenche a output com as classe, os grupos da primeira classe e os subgrupos do primeiro grupo da primeira classe. Como estou utilizando a tag html do mentawai (mtw:select) esta preenche automaticamente os select classe, grupo e subgrupo com os Maps da output.



@Override
public String execute() throws Exception {
Connection conn = (Connection) input.getValue("conn");

ClasseDAO classeDAO = new ClasseDAO(conn);
GrupoDAO grupoDAO = new GrupoDAO(conn);
SubGrupoDAO subGrupoDAO = new SubGrupoDAO(conn);

output.setValue("classe", classeDAO.getMap(classeDAO.list()));
output.setValue("grupo", grupoDAO.getMap(grupoDAO.list(classeDAO.list().get(0).getId())));
output.setValue("subgrupo", subGrupoDAO.getMap(subGrupoDAO.list(grupoDAO.list(classeDAO.list().get(0).getId()).get(0).getSeq())));
return SUCCESS;
}



Por fim, meu JSP com alguns recursos de Ajax disponibilizados pelo mentawai, permitem o preenchimento dinâmico dos selects grupo e subgrupo a cada evento onclick das selects classe e grupo.








< script type="text/javascript">
function getList(transport) {
var response = new mtw.response(transport);
response.replaceOptions("grupo");
}

function getList1(transport) {
var response = new mtw.response(transport);
response.replaceOptions("subgrupo");
}

function doRequest() {
var req = new mtw.request();
req.setUrl("FormMateriais.preencheComboGrupo.mtw");
req.addParameter("idClasse", $('classe').value);
mtw.removeOptions("grupo");
req.onSuccess(getList);
req.send();

doRequest1();
}

function doRequest1() {
var req1 = new mtw.request();
req1.setUrl("FormMateriais.preencheComboSubGrupo.mtw");
req1.addParameter("idClasse", $('classe').value);
req1.addParameter("idGrupo", $('grupo').value);
mtw.removeOptions("subgrupo");
req1.onSuccess(getList1);
req1.send();
}
< /script>




Bom, ainda não consegui resolver o problema de fazer os preenchimentos automáticos dos selects grupo e subgrupo para outros eventos que não o onclick, na verdade isto é um problema comigo ou com o mentawai, pois não consigo definir dois eventos diferentes nas tags mtw:select, assim resolvi usar onclick em detrimento a onchange ou mesmo onblur.

Era isto por enquanto. Abraços amigos.

Sexta-feira, 13 de Março de 2009

FISL 10


Buenas gurizada, já foi dada a largada para realização do FISL 10, este maravilhodo evento que ocorre todo ano aqui em Porto Alegre, desde 2000, e que nos permite compartilhar o sentimento único que cada usuário e promotor de software livre sente. Venham todos, tenho certeza que vai ser um evento memorável!