Pages

Subscribe:

Ads 468x60px

segunda-feira, 22 de agosto de 2011

Artigo fluxo óptico

Mais um artigo meia boca, desta vez sobre fluxo óptico.
Neste trabalho eu comparei dois métodos para localização de fluxo óptico me sequências de imagens.
Fluxo óptico nada mais é, do que o movimento do pixel ao longo do tempo, em sequências de imagens, tais como vídeos.
Pode ser interessante para alguém.... :D

quarta-feira, 20 de julho de 2011

XStream - Salvando arquivos XML com Java

XStream é uma biblioteca simples para serializar objetos em arquivos XML, e desserializá-los em objetos Java. Ou seja, com essa biblioteca você é capaz de salvar seus objetos em arquivos XML e restaurar esse arquivos em objetos novamente.

Entre as principais vantagens de usar essa biblioteca estão:
  • É fácil de usar – Existe uma classe de alto nível que encapsula a biblioteca, com apenas uma classe você consegui salvar seus objetos em arquivos XML.
  • Desempenho – É rápido e consome pouca memória, por isso pode ser usado para objetos com muitos dados, ou em sistema que necessitem salvar muitos XML’s.
  • Não é necessário modificar classes e objetos -  Serializa campos internos, incluindo os private e final. Suporta classes internas e não públicas, e não exige que as classe possuam um construtor padrão.

Para aplicações pequenas, em que não seja necessário XML complexo, o XStream se mostra como uma excelente opção. Sua facilidade de uso torna tudo mais simples, e o desenvolvedor precisa de poucas linhas para salvar e recuperar seus objetos.

Primeiramente é necessário fazer o download do arquivo .jar da biblioteca, o endereço é http://xstream.codehaus.org/download.html. Se o código for usado como mostrado nessa postagem não é necessário incluir nenhuma outra biblioteca ao seu projeto.
O Exemplo a seguir foi adaptado do site da biblioteca. Primeiramente são criadas duas classes simples:
public class Pessoa {
  private String nome;
  private String sobreNome;
  private Fone fone;
  private Fone celular;
}

public class Fone {
  private int codigo;
  private String numero;
}

Após ter as classes que deseja serializar, e adicionar a biblioteca ao seu ClassPath, inicie um objeto XStream. Ele será responsável pela serialização e desserialização dos objetos.
XStream xstream = new XStream(new DomDriver());
//O código abaixo é opcional
xstream.alias("pessoa", Pessoa.class);
xstream.alias("telefone", Fone.class);

Agora vamos mostrar os códigos para serializar um objeto da classe Pessoa. Basta usar o objeto xstream criado:
Pessoa joao = new Pessoa(“João”, “da Silva”);
joao.setFone(new Fone(1,”1234-456”));
joao.setCelular(new Fone(2,”9999-9999”));
String xml = xstream.toXML();


Com essa “manobra” a variável xml recebe o seguinte valor:

<pessoa>
  <nome>João</nome>
  <sobrenome>da Silva</sobrenome>
  <fone>
    <codigo>1</codigo>
    <numero>1234-456</numero >
  </fone>
  <celular>
    <codigo>2</codigo>
    <numero>9999-999</numero >
  </celular>
</pessoa>


Para desserializar é tão fácil quanto serializar:
Pessoa novoJoao = (Pessoa)xstream.fromXML(xml);

É muito fácil né?!

E tem muitas utilidades! Quando desenvolvi o ecf, utilizei para restaurar itens vendidos quando o programa fechava ou havia queda de energia, ele salvava, a cada item vendido o arquivo xml da classe Cupom, e se ocorrece alguma eventualidade, ele transforma esse xml em objeto, e pronto, a aplicação ficava no mesmo 
estado em que estava quando aconteceu o problema.

Abaixo seguem alguns códigos que podem ajudar :
//Para omitir algum campo do xml
//Não salvaremos o campo celular da classe Pessoa
xstream.omitField(Pessoa.class, “celular”);
 ---------------------------------------------------
//Para salvar em uma arquivo – podemos salvar em uma OutPutStream
xstream.toXML(joao, new FileOutPutStream(“arquivo.xml”)); 
 ---------------------------------------------------
//Para recuperar de um arquivo- usando InputStream
Pessoa novoJoao;
novojoao = (Pessoa) xstream.fromXML(new FileInputStream(“arquivo.xml”));
 ---------------------------------------------------
//Para aceitar caracteres especiais
XStream stream = newXStream(new DomDriver("ISO-8859-1"));

sexta-feira, 1 de julho de 2011

Artigo sobre sistema OMR para correção de Cartões de Resposta

Enquanto não cumpro minha promessa de criar postagem frequentes para meu blog, vou deixar aqui um artigo sobre meu tema de monografia.
Trabalhei com Optical Mark Recognition (grosseiramente traduzido como Reconhecimento de Marcas Ópticas).

Neste trabalho usei processamento de imagens para corrigir Cartões de Respostas (gabaritos) de imagens provenientes de um scanner.

Desenvolvi também o sistema que faz isso.

A ideia é simples. A partir de imagens digitalizadas de cartões de respostas, o sistema permite criar um modelo no qual temos as marcas contidas nessa imagem, e a partir desse modelo ele é capaz de dizer quais opções foram selecionadas por determinado candidato. Além disso os dados podem ser exportados em XML ou TXT.

Espero que possa ajudar alguém!

quarta-feira, 9 de março de 2011

TEF - Dicas para quem vai homologar

Pra quem já está prestes a homologar, tenho algumas dicas que podem ajudar:

Primeiro, e mais importante, fique tranqüilo, os certificadores não mordem, hehehe, pelo contrário, são muito gente boa e tranqüilos, se você não der muito trabalho para eles, eles também não darão pra você.

Não discuta com os certificadores, faça tudo o que eles pedirem, peça que esclareçam as coisas se não entendeu, mas evite discussões inócuas que não te levaram a lugar nenhum.

Foram muito tranqüilos comigo e me ajudaram bastante... Aproveitava o tempo entre um teste e outro pra conversar e ganhar a confiança. São super simpáticos e estão ali pra te ajudar!

A certificação da SevenPDV é mais pesada...

Além do Check List que eles fazem, fazem os roteiros da amex e da Cielo(antiga VisaNet). É difícil fazer em um dia só.

A da Software Express é mais tranqüila, é apenas o roteiro de testes, fiz em menos de 2 horas!

Comecei na Seven, mas não terminei a homologação no primeiro dia, ficou um roteiro e meio pra fazer ainda...

Mas como já havia corrigido todos os bugs no checklist da Seven, a da software Express foi feita em menos de duas horas... Sem nenhuma alteração no código! Mais tarde ainda pude terminar a homologação do Cielo e do Amex... Portanto essa é a ordem que eu aconselho, primeiro dia SevenPDV e segundo Software Express, por que na primeira deixam q você termine os testes no outro dia!

Desde que você tenha feito tudo certo, eles te darão todas as dicas para organizar seu sistema da forma que eles exigem... Uma dica importante é deixar para corrigir os erros apenas no final, vá anotando os testes do checklist que você foi reprovado e o que o homologador pedirá, e apenas corrija depois que ele verificar o último teste, isso te poupará tempo, muito tempo.

Quando eu homologuei, com um dos homologadores estava corrigindo o teste assim que eu era reprovado, aí ele saia da mesa de homologação e enrolava até voltar e eu acabei perdendo muito tempo. Com a segunda homologadora passei por todos os testes primeiro, e depois em menos de uma hora corrigi todos os erros do sistema...

Se alguém tiver mais alguma dúvida, por favor poste nos comentários que terei o maior prazer em responder...

Eu ficava muito apreensivo sobre como seria a certificação e tal, por isso estou disposto a colaborar com quem precisar...

;)

quinta-feira, 3 de março de 2011

TEF - Começando com o TEF

Pra quem precisa homologar o TEF e está mais perdido que cachorro que cai do caminhão de mudança vou dar algumas dicas! :D

Certifiquei o TEF no final do mês de janeiro de 2011, foi muita ralação pra conseguir fazer tudo que eu precisava! Fiz tudo em Java, usei várias biblioteca que pretendo falar sobre elas em outros posts!

Para começar, eu vou definir alguns termos:

ECF – Emissor de Cupons Fiscais – É a velha e boa impressora fiscal! A comunicação no meu sistema foi feita através de dll’s, implementei para as impressoras Daruma e Bematech.

TEF – Transferência Eletrônica de Fundos – É o nome dado á comunicação feita com as operadoras de cartão de crédito.

PAF – Programa Aplicativo Fiscal – É o sistema que faz a integração com o ECF. Ele é responsável por mandar os comandos para o ECF e controlar a interface com o usuário. O seu PAF deve, além de comunicar-se com a impressora, fazer a comunicação com o Gerenciador Padrão (GP), que é um sistema oferecido pelas operadoras de cartão de crédito que fará a devida comunicação com as operadoras.

Pra quem está começando o TEF agora, tenho uma notícia ruim... Vai dar muito trabalho... hehe, são muito detalhes e muito pouca documentação.

Vai depender muito da linguagem que está pensando em utilizar. A que tem mais material na internet é o Delphi, de longe... Java eu não achei material quase nenhum, então pesquisa os conceitos e me virava pra implementar, desde JNI e XML até Threads e Swing. Foi uma experiência excelente, que me fez aprender muito, mas me tirou muitas noites de sono...

Ao longo dos próximos dias pretendo dar algumas dicas pra quem está começando a homologar, e pra quem está prestes a enfrentar os temíveis homologadores... :D

segunda-feira, 28 de junho de 2010

Plugin Netbeans 6.8 e Ice Faces

Galera está disponível no site da icesoft plugin do IceFaces para NetBeans 6.8 e 6.9!
Forum Icefaces

Ainda não testei! Quando testar posto aqui os resultados!


O download pode ser feito aqui!

Até a versão 6.0 o plugin do icefaces era uma mão na roda! Fazia quase tudo pro desenvolvedor! Vamos ver essas novas versões!

JSF - Desenvolvendo componentes personalizados com IceFaces e Facelets - parte 2

Pessoal, promessa é dívida né!
Demorei mto pra postar a segunda parte, tive problemas com trabalho, família e Trabalho de conclusão de curso que tomou todo o meu tempo!

Já temos o JSF 2.0, que simplifica e padroniza a criação de componentes, mas mesmo assim vou falar como fiz aqui, ainda pode ser útil pra muita gente. Então pra não deixa ninguém na mão:


Vamos criar um componente bem simples, bobo mesmo, mas ótimo pra dar uma idéia do que deve ser configurado:
Primeiramento o componente que vamos criar será uma label com um texto:
Ah, mas não implementaremos comportamento, não agora, ela será um caixa estática.
Poderemos utilizar essa caixa onde quisermos no sistema, pra isso bastará fazermos o seguinte:

Pense nas possibilidades! Esse é um exemplo bobo, mas quando implementei minha caixa de pesquisa vi o quanto a criação desse componentes é poderosa!

Primeiro vou mostrar a estrutura de arquivos que vamos precisar:


caixa.xhtml - Esse é o arquivo onde ficará o nosso compontente.
facelets.taglib.xml - Esse arquivo vai definir nossa biblioteca de componentes.
web.xml - Nesse arquivo vamos colocar o parâmetro pra contar pro Facelets onde está a biblioteca de componentes.

Vamos começar pelo web.xml, nele devemos adicionar entre as tags e , o seguinte código:

Parâmetro que determina a localização do descritor das tags dos componentes Facelets
facelets.LIBRARIES
/WEB-INF/facelets/facelets.taglib.xml

Com isso estamos criando um parâmetro de contexto para definir a biblioteca de tagLibs do facelets.


Com isso o Facelets será capaz de saber que o arquivo de biblioteca de componente está na pasta especificada em .

Agora veja a estrutura do arquivo facelets.tablib.xml:

Abaixo descreverei as tags:
- É a tag raiz, que especifica que esse arquivo é uma tablib, dentro dela podemos colocar quantas tags precisarmos.
- É um nome de referência para essa taglig, quando formos usarmos essa taglib em uma página informaremos esse namespace no xmlns.
- Define uma tag, podemos ter quantas tags quisermos.
- O nome que essa tag terá.
- O caminho do arquivo que corresponde à essa tag.


Bom, após criarmos esses dois arquivos nossa aplicação já está apta para usar taglibs, só falta criarmos o próprio componente que corresponderá a tag que queremos.
O código da caixa de pesquisa seria bem simples, isso será feito no arquivo caixa.xhtml que ficará da seguinte forma:

Agora na página que você deseja atilizar seu componente basta fazer a seguinte chamada no xmlns chamando o namespace do seu taglib:


e usar a tag de acordo com o que colocou no xmlns dessa forma, passando os atributos que podem ser utilizados pela tag:
O resultado no navegador é o seguinte:

São grandes as possibilidades para essa solução!
Podemos a partir dela criar componentes complexos com lógica inserida em classes que facilitarão muito o desenvolvimento e a modularização do seu sistema!

Postarei um componente mais complexo, agora que já sabem com criar um simples fica tudo mais fácil!
Até o próximo!


"As pessoas podem duvidar do que você diz, mas elas acreditarão no que você faz. "
[Lewis Cass]