quinta-feira, 26 de maio de 2011

melhor GUI toolkit para web

GWT (google web toolkit) na minha opinião é a solução mais eficiciente para implementar a camada visual de um sistema Web. Nao somente pela simplificade de criar RIA para web mas pelo fato de usar melhor o processamento na camada client, aumentando a escalabilidade do seu sistema. Pode usar facilmente o pattern MVP ao inves do MVC facilitando os testes unitarios e melhorando o reuso.

Para ser produtivo recomendo usar algum outro framework como ext-GWT ou smartGWT (antigo GWT-Ext) como uma camada adicional assim ganhara uma interface muito rica, com varios widgets muito legais, pronto para uso. Muita discussao tem em torno qual é o melhor, ext-GWT ou Smart. O Smart aparenta ser um produto mais maduro porem o ext foi desenvolvido pela mesma empresa que fez o Ext JS portanto tem credibilidade. O mais importante é nao misturar os Widgets no mesmo projeto, nem mesmo com os nativos do GWT pois tivemos alguns problemas de comportamento quando tentamos isso.

O GWT abstrai toda a complexidade da implementação Javascript client-side. Possui uma ferramenta de designer de interfaces GUI muito boa para o Eclipse. O GWT nao resolve a camada de negocio ou persistencia, para isso tem outros frameworks e patterns. Como procuro criar metodos stateless o GWT é perfeito para manter os estados no cliente sem suar muito. Um colega relatou a experiencia de transformar um sistema inteiro que estava em Struts-2 (argh!) para uma nova arquitetura usando GWT + SmartGWT, sem manter absolutamente nenhum estado no servidor e transferindo parte do processamento (validações, calculos, etc..) para a camada client. O ambiente de produção que contava com 3 servidores em cluster, operando a 60% da capacidade de processamento em determinados horarios caiu hoje para 1 unico servidor (+1 de failover) e atendendo a mesma demanda opera no maximo a 40% de capacidade. Recebeu elogios dos usuarios referente a usabilidade e tempo de resposta.

O potencial é tao grande que existe até uma implementacao do Quake-2 em GWT:

school timetable, rostering nurses, cutting stock and other planning optimization

If you have these kinds of challenges, the answer is Jboss Drools Planner. Like all JBoss product is easy to install, learn and use. The coolest thing about JBoss projects is that the code is open and anyone can verify the implementation and adapt to their needs.
Obviously I chose the long way. I prefer to download the source, compile, make a walkthrough into the source code and understand how the project is structured. I always learn new techniques and concepts in this way. After spending a few hours resolving conflicts with some libs finally the server started running a hello-world project. Some project ideas that I have can go faster with Drools. More information? Check out at Drools website - http://www.jboss.org/drools/drools-planner

quarta-feira, 25 de maio de 2011

Document classification with Naive Bayes classifier

Uma solução viavel para a classificação de documentos é o algoritmo de Naive Bayes. Classificadores Naive Bayes pode ser treinado de forma muito eficiente em um ambiente de aprendizado supervisionado.
O maior desafio foi codificar os objetos de suporte que possibilitarao o aprendizado e melhoramento continuo dos padrões, efetuando novos mapeamento sob demanda.
O objetivo deste projeto é automatizar 100% das tarefas, eliminando a necessidade de monitorar e treinar para novos padrões de documentos. Os proprios usuarios estarão trabalhando para o continuo aprendizado da rede. Por isso uma tecnica estatistica foi usada para que a classificação ocorresse analisando tendencias submetida a uma arvore de decisão com opção de rankeamento para cada usuario/conjunto de informações.
Apos estar proximo de concluir o projeto, lendo alguns artigos, encontrei algumas tecnicas mais promissoras como Gradient Boosting. Dizem que o seu projeto/produto esta obsoleto no dia que esta pronto mas desta vez ficou obsoleto antes de terminar :o(
Um outro desafio foi criar os spiders para extrair as informações dos mais diversos tipos de documentos. Por exemplo, em um sistema de contabilidade temos alguns documentos como dacon, dctf, dipj, darf, das, contratos sociais, balanços, sped, sefip, etc, etc, etc... que podem estar em diferentes formatos digitais como PDF, Doc, XLS, JPeg, Tiff, etc..
A premissa é receber os documentos, sabendo ja o ambiente de negócio, chavear para um subset de padrões extraindo os atributos para a classificação e submeter ao algoritmo.
Os documentos em PDF usei algumas libs do projeto apache, ja para o OCR o Tesseract, atualmente suportado pelo Google e acredito que é o mesmo OCR usado no GDocs. Precisei criar um dicionario para o pt-BR na versão 3.0 e nao consegui ainda ajusta-lo para um resultado satisfatório para documentos em resolução não muito boa, obrigando a scannear com 300DPI. Como 300DPI não é nada muito excessivo esta tarefa virou um `spike` de baixa prioridade. A implementação do algoritmo é trivial, existem varia bibliotecas prontas mas preferi fazer a minha própria.