Pages

Subscribe:

Ads 468x60px

Featured Posts

domingo, 28 de abril de 2013

Tela de notificação transparente

Esses dias estava precisando criar uma telinha pra mostrar notificações de novos email recebido.
O programa recebe emails enviados por celulares android, interpreta o XML que está neles e apresenta uma notificação no computador do cliente dizendo que ele recebeu um novo pedido.
Esse código foi muito útil:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.util.Date;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;


/**
 * Simple demo on how a translucent window
 * looks like when is used to display the system clock.
 * @author Oscar Reyes
 */
public class TranslucencyDemo extends JPanel implements ActionListener {

    private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    private final Date now = new Date();
    private final Timer timer = new Timer(1000, this);
    private final JLabel text = new JLabel();

    public TranslucencyDemo() {
        super(true);
        timer.start();
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        now.setTime(System.currentTimeMillis());
        text.setText(String.format("%s",sdf.format(now)));
    }

    public static void main(String[] args) {

        JFrame f = new JFrame();
        setTranslucency( f );
        f.setUndecorated( true );
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setBackground(new Color(0f, 0f, 0f, 1f / 3f));
        f.add(new Translucent());
        f.pack();
        f.setVisible(true);
    }
    // taken from: http://java.sun.com/developer/technicalArticles/GUI/translucent_shaped_windows/
    private static void setTranslucency( Window window){
        try {
               Class awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
               Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
               mSetWindowOpacity.invoke(null, window, Float.valueOf(0.75f));
            } catch (NoSuchMethodException ex) {
               ex.printStackTrace();
            } catch (SecurityException ex) {
               ex.printStackTrace();
            } catch (ClassNotFoundException ex) {
               ex.printStackTrace();
            } catch (IllegalAccessException ex) {
               ex.printStackTrace();
            } catch (IllegalArgumentException ex) {
               ex.printStackTrace();
            } catch (InvocationTargetException ex) {
               ex.printStackTrace();
            }
    }
}
Fonte: http://stackoverflow.com/questions/3240415/how-to-create-a-notification-in-swing

Esse exemplo mostra a data em períodos pré-determinados. Você pode condicionar essa exibição. No meu caso a condição era a chegada de um novo email.
Esse é o resultado do código:

Vc pode altera a tela, a sua localização, seus componentes, criar um Listener pra abrir seu programa quando o usuário clicar nela. Enfim, usem a criatividade :D

Outro projeto interessante para o mesmo fim é o Twinkle: http://www.swingfx.ch/twinkle
Deem uma olhada. Mas ele não pode ser usado com propósitos comerciais :(
Mas é muito bom e fácil de usar! Vejam aqui: http://blog.swingfx.ch/

Espero que seja útil!

terça-feira, 24 de abril de 2012

OLAP, seus principais tipos, vantagens e desvantagens


Mudando um pouco o meu foco e compartilhando algumas informações sobre meus últimos estudos. Vou comparar os principais tipos de OLAP: MOLAP, ROLAP E HOLAP.
Espero que ajude a quem precisa :D

OLAP (OnLine Analytical  Processing ou Processamento analítico em tempo real) é um software cuja tecnologia de construção permite analisar e visualizar dados corporativos de forma rápida, consistente e interativa.  É em geral baseado em dados históricos e utilizado para tomada de decisão .

Existem basicamente dois tipo de OLAP, o MOLAP(Multidimensional OnLine Analytical Processing) e ROLAP(Relational OnLine Analytical Processing), e ainda uma solução híbrida que combina as características dos dois primeiros, o HOLAP (Hybrid Online Analytical Processing).
Veja as principais características, vantagens e desvantagens dessas abordagens:

MOLAP – É a forma mais comum de OLAP, nesse modelo os dados são armazenados em cubos multimensionais, e não em estruturas relacionais, como os tradicionais bancos de dados. Em geral, os formatos de armazenamento são proprietário, ou seja, cada empresa que desenvolve uma solução, desenvolve seu próprio formato de dados.
Vantagens:
·         Excelente desempenho. Cubos MOLAP são feitos para recuperação rápida dos dados, e é excelente para operações de slice and dicing.
·         Pode realizar operações complexas: Todos os cálculos foram pré-processados quando o cubo foi criado, por isso cálculos complexos são realizáveis e retornam o resultado rapidamente.
Desvantagens:
·         Limitações na quantidade de dados que ele pode lidar: Já que todos os cálculos são realizados no momento em que o cubo é criado, não é possível colocar uma grande quantidade de dados no cubo. Isso não quer dizer que o cubo não pode ser criado a partir de um grande número de dados, pelo contrário. Entretanto,  devem ser inseridas no cubos apenas informações sumarizadas.
·         Investimento adicional: a tecnologia baseada em cubos é, em geral, proprietária, e não está disponível na empresa, por isso precisa ser contratada, exigindo investimento

ROLAP - Esta metodologia baseia-se em manipular os dados armazenados no banco de dados relacional para dar a aparência de funcionalidade slice and dice do OLAP tradicional. Em essência, cada ação de slice and dice é equivalente a adicionar um "WHERE" na instrução SQL. O que significa que essa forma de OLAP usa o formato tradicional dos bancos relacionais para simular uma estrutura multidimensional, que é o grande objetivo do OLAP.
Vantagens:
·         Pode lidar com grande quantidade de dados: a limitação do tamanho dos dados no ROLAP não depende do ROLAP em sim, mas sim do tamanho da base em que executa as operações.
·         Pode utilizar funções inerentes aos bancos de dados relacionais: em geral, os bancos de dados relacionais já vêm com uma gama de funcionalidades. Tecnologias ROLAP que estão no topo de bases relacionais, podem usufruir dessas funcionalidades.
Desvantagens:
·         Desempenho pode ser ruim: Já que cada relatório ROLAP pode necessitar de uma, ou várias, consultas SQL, isso pode tornar o desempenho baixo, já que uma base de dados grande pode fazer com que o tempo das consultas também seja grande.
·         Investimento adicional: a tecnologia baseada em cubos é, em geral, proprietária, e não está disponível na empresa, por isso precisa ser contratada, exigindo investimento

HOLAP – Combina o melhor da tecnologia multidimensional com o melhor da relacional. Pode usar estratégias ROLAP quando é requerida sumarização e MOLAP quando um nível de detalhamento maior for o objetivo.
Existem muitas controvérsias nas definições desses sistemas. Pois os próprios fabricantes não têm um padrão para designá-los. Mas, por alto, o princípio é esse :D

Referências:

sábado, 29 de outubro de 2011

Monografia sobre Optical Mark Recognition

Como muita gente se interessou pelo meu artigo sobre reconhecimento de marcas digitais, resolvi publicar minha monografia sobre este assunto.
O artigo foi extraído da monografia, Não é lá grandes coisas, hehehe, mas dá para ter uma ideia melhor do que foi desenvolvido, como o sistema foi modelado e como as marcas são extraídas das imagens.

Também tem algumas ideias sobre Padrões de Projetos, um dos assuntos mais interessante que estudei nos últimos tempos...


Espero que ajude... :D

segunda-feira, 3 de outubro de 2011

Java - Travando o Teclado

Galera, segue um código para travar o teclado e o mouse do computador utilizando a biblioteca JNative.


O código é bem simples:
Depois de fazer o download, basta adicionar a biblioteca ao classpath do seu projeto, e colocar o código da figura acima.
Para liberar o teclado, você pode usar o mesmo código, apenas troque "Blk" por 0 (zero): blockInput.setParameter(0,0);

Esse método pode ser bem útil pra quem está trabalhando com TEF, e precisa travar o teclado e o mouse quando a aplicação faz alguma impressão.

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!