CONNEPI

28 11 2007

Nesse momento estou escrevendo um post de João Pessoa, onde estou participando de (mais) um evento do CEFET-PE, o CONNEPI (II Congresso de Pesquisa e Inovação da Rede Norte Nordeste de Educação Tecnológica) que é um dos eventos de troca de informações entre os cefets do norte nordeste sobre as pesquisas e projetos de extensão que estão em desenvolvimento.

Conseguimos aqui aprovar o carrossel de cores, que foi um trabalho feito em sala de aula, e que evoluiu de forma interessante. Já é o segundo evento que conseguimos submeter e conseguir a aprovação do trabalho! O último que ainda resta tentar é um congresso no rio de Janeiro (isso ainda tem um longo período de espera…)

O Congresso tah andando bem,  mas é complicado pois tem trabalhos demais e de muitas áreas.  Não é somente um evento de informática, mas um evento de todas as áreas de pesquisa e extensão dos CEFETs (futuramente IFETs), o que torna o evento bem inchado, mas com uma possibilidade imensa de troca de experiências com outras disciplinas e com pessoas que trabalham em projetos próximos dos nossos.

Nos trabalhos das pessoas, tem Transformadas de Wavelets, Rede de sensores sem fio, um paranóico que acha que pode monitorar o momento em que ele leva uma gaia com um detector de movimento com alertas via SMS,  trabalhos de conscientização ambiental do uso de agrotóxicos, segurança em ambientes de radiologia e radioterapia… Muito trabalho legal desenvolvido pelos cursos superiores e técnicos dos cefets.

Meu trabalho será apresentado amanhã. O projeto do carrossel de cores é aberto, código livre e quem se interessar por continuar seu desenvolvimento, com novos features, bug fixes, explicações sobre como e onde usar bem, está mais que convidado a enviar e-mail pra mim e a visitar a página do projeto aqui.





O Poder do Feijão!!!

7 04 2007

Pois é! O feijãozinho é poderoso mesmo!!!

Num projeto do período passado (na verdade um antigo projeto de pesquisa) estava implementando um joguinho em java. Um grande problema que enfrentamos era o fato da Java2D ser algo que não parecia dar muito certo em se tratando de OO. Resultado, ficamos com um código extremamente acoplado, com algumas classes que claramente não precisariam existir.

Uma coisa que parecia contribuir diretamente para isso era o fato de não conseguir um tipo de classe que pudesse se “auto-desenhar”. Pois hoje encontrei a solução pra isso, (pena que o período terminou) e de fato entendi, porque a Java2D foi feita com o intuito de dar suporte a código estilo script (aliás,… deve ficar muito legal o uso dela com Jython, mas isso será assunto pra outro post =P). A solução responde pelo nome: JavaBeans!

JavaBeans na verdade são nada menos que um padrão de codificação, que torna classes como “componentes” que facilitam o trabalho com ferramentas RAD. Na verdade a idéia de existirem os beans, foi baseada nessas ferramentas. Os beans precisam respeitar as seguintes características:

  1. Serem objetos passíveis de Serialização (basta que implementem Serializable)
  2. Possuirem métodos get e set suficientes para acessar e modificar todas os seus atributos (que nas ferramentas RAD ganham o nome de propriedades)
  3. Terem suas propriedades encapsuladas.


Então para fazer um exemplo, vamos implementar um bean pra um LED, que fica vermelho quando desligado e verde quando ligado. Este bean poderia ser muito bem utilizado em softwares que fazer tarefas custosas e ficam muito tempo executando alguma tarefa em background. O segue o código:

package gui.led;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.Serializable;

    public class Led extends Component implements Serializable {

    private static final long serialVersionUID = 7355872533852927256L;
    private boolean on = false;

    public Led() {
        turnOff();
        setSize(getPreferredSize());
        setBackground(Color.LIGHT_GRAY);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Dimension d = getSize();
        g.drawOval(0, 0, d.width -1 , d.height -1);
        if (isOn()){
            g.setColor(Color.GREEN);
        } else {
            g.setColor(Color.RED);
        }
        g.fillOval(2, 2, d.width -4 , d.height -4);
    }

    public Dimension getMinimumSize(){
        return new Dimension(10,10);
    }

    public Dimension getPreferredSize(){
        return new Dimension(15,15);
    }

    public boolean isOn() {
        return on;
    }

    public void setOn(boolean on) {
        this.on = on;
        repaint();
    }

    public void turnOn(){
        setOn(true);
    }
    public void turnOff(){
        setOn(false);
    }
}

veja que o legal desse bean é que ele sabe como se pintar na tela! Isso é possível porque ele é uma classe filha de Component, o que é outra possibilidade de criação de JavaBeans, tornando-os extremamente ricos em funcionalidade. Para testar o led, use o seguinte código:

package gui.led;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Beans;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class LedTest extends JFrame {
    private static final long serialVersionUID = 2433551141174922287L;

    private Led led;

    private JButton bLiga, bDesliga;

    public LedTest() {
        super("LedTest");
        try {
            led = (Led) Beans.instantiate(null, "gui.led.Led");
        } catch (Exception e) {
            e.printStackTrace();
        }
        bDesliga = new JButton("Desliga");
        bDesliga.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                led.turnOff();
                System.out.println("Desligando...");
            }
        });
        bLiga = new JButton("Liga");
        bLiga.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                led.turnOn();
                System.out.println("Ligando...");
            }
        });
        JPanel p = new JPanel();
        p.add(led);
        p.add(bLiga);

        p.add(bDesliga);

        setContentPane(p);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
    }

    public static void main(String[] args) {
        new LedTest().setVisible(true);
    }

}

Resultado, fica como na figura abaixo:

Led Ligado

Led Desligado

Isso é tudo por hoje….
Feliz Páscoa a todos!
Abraço,