Bibliotecas para aplicações Desktop: QT e GTK

QT é uma biblioteca de desenvolvimento para aplicações Desktop para multiplas plataformas (MS-Windows, GNU/Linux, Mac OS X, Embedded Linux e Windows CE). Possui várias ferramentas de geração e edição de código, como KDeveloper e QT Design.

Atualmente, é desenvolvido pela Nokia:
http://qt.nokia.com/

GTK é também uma biblioteca de desenvolvimento para aplicações Desktop para multiplas plataformas (MS-Windows, GNU/Linux e Mac OS X). Também possui ferramentas para geração de interface e algum código.

É sustentado por uma comunidade Open Source:
http://www.gtk.org/

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Como “chamar” o telefone no iPhone em Objective C

Pelo que me disseram (tentei testar no emulador, mas não funciona :P), é só criar uma “URL” com o protocolo “tel:” mais o número do telefone. Exemplo:

//Cria o objeto NSURL com uma String (“protocolo:numero_do_telefone”)
NSURL* phoneURL = [NSURL URLWithString: @“tel:1234567890”];
//Chama a aplicação externa para abrir a URL
[[UIApplication sharedApplication] openURL: phoneURL];

Também é possivel criar uma página web para iPhone, com o mesmo protocolo:

Ligue-me&lt/a&gt

Sei lá, tomara que isso ajude alguém 🙂

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.

Que diabos são as operações &#8220;<<" e ">>&#8221; no Javascript

São operadores de bit a bit. 🙂

Hum Melhor ir as explicações:

– O operador “
var inteiro = 1; //(64 bits) -> 00000001 (1)
alert("Número original: ” + inteiro);
inteiro = inteiro 64 bits) -> 00000010 (2)
alert(“Número deslocado uma casa para a esquerda: ” + inteiro);

– E o operador “>>” descola o valor bit a bit de uma variável, da esquerda para direita. Exemplo:

var inteiro = 4; //(64 bits) -> 00000100 (4)
alert(“Número original: ” + inteiro);
inteiro = inteiro >> 2; //descola duas “casas” para a direita (64 bits) -> 00000001 (1)
alert(“Número deslocado duas casas para a direita: ” + inteiro);

Se formos pensar bem, estes operadores “multiplicam” (“>”) o número por dois. Isso acontece por causa que os computadores trabalham com números binários (“bi” igual a “dois”, entendeu? 😛 )

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Drag&#8217;n Drop de elementos gráficos (Java-AWT)

Um rapaz me perguntou como seria fazer um drag’n drop (na mão) de um elemento gráfico em uma tela.
Então resolvi postar uma resposta aqui no blog. 🙂
Como ele não especificou a linguagem, vou fazer em Java/AWT (será que alguém ainda usa isso?!? 😛 ), que foi a linguagem que mais trabalhei nos últimos 10 anos

Primeiramente, vamos criar uma janela de tamanho fixo (no caso, 300×300):

//Herda de Frame (Janela)
public class MainClass extends Frame {

    //Construtor da classe
    public MainClass() {
        //Tamanho da janela
        this.setSize(300, 300);
        //Título da janela
        this.setTitle(“Exemplo Gráfico”);
    }

    //Método principal que inicia a aplicação
    public static void main(String arg[]) {
        //Instância o objeto
        MainClass main = new MainClass();
        //Exibe a tela
        main.setVisible(true);
    }
}

Para evitar que a janela fique “ad-eterno” na tela, mesmo clicando no “X”, vamos implementar a função de fechar da janela em seu construtor:

    //Construtor da classe
    public MainClass() {
        
         //“Escutador” de eventos de janela
         this.addWindowListener(new WindowAdapter() {
             //Método que é executado quando o usuário clicar no botão de fechar da janela (ou algum evento que tenha a mesma funcionalidade, como o Ctrl+X no MS-Windows)
            @Override
            public void windowClosing(WindowEvent e) {
                //Encerra a aplicação
                System.exit(0);
            }
        });
            
    }

Legal, temos uma janela feita em Java! 🙂

Vamos para o segundo passo: criamos um objeto gráfico (neste caso, um retângulo) como uma propriedade da classe e instanciamos esta em seu construtor:

public class MainClass extends Frame {
    private Rectangle rect;
   
    public MainClass() {
         
          //Retângulo a ser desenhado
          rect = new Rectangle(50, 50, 60, 30);
         
    }
   
}

E agora vamos desenhar este retângulo na tela, reescrevendo os métodos paint e update:

   //Para evitar o “pisca-pisca” (efeito de blink) da tela
    @Override
    public void update(Graphics g) {
        this.paint(g);
    }
   
    //Desenha um retângulo vermelho em um fundo preto (retângulo do tamanho da tela)
    @Override
    public void paint(Graphics g) {
        //Pinta a tela de preto
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
        //Pinta um retângulo vermelho
        g.setColor(Color.RED);
        g.fillRect((int)rect.getX(), (int)rect.getY(),
                (int)rect.getWidth(), (int)rect.getHeight());
    }

Executamos e temos um retângulo vermelho em um fundo preto (eu já disse isso em algum lugar?). 🙂

Nesta terceira etapa, precisamos identificar os eventos de drag’n drop, que são (eu acho ):
1) O evento de botão do mouse pressionado para obter o efeito de “pegar” o retângulo;
2) O evento de soltar o botão do mouse para obter o efeito de “largar” o retângulo;
3)  E o evento de movimento do mouse, para que o retângulo acompanhe o “ponteiro” do mouse enquanto ele não for solto;

Com isso, a classe vai ficar mais ou menos assim:

import java.awt.*;
import java.awt.event.*;

//Herda de Frame (Janela)
public class MainClass extends Frame {

    //Retângulo a ser desenhado
    private Rectangle rect;
    //Flag que indica se o objeto esta sendo “arrastado”
    private boolean elementDragged;
    //Ponto (x,y) da tela onde o ponteiro do mouse estava inicialmente
    private Point initial;
 
    //Construtor da classe  
    public MainClass() {
        //Retângulo a ser desenhado
        rect = new Rectangle(50, 50, 50, 50);
        //Tamanho da janela
        this.setSize(300, 300);
        //Título da Janela
        this.setTitle(“Exemplo Gráfico”);
        this.addEventListener();
    }
   
     //Método privado que adiciona os eventos
    private void addEventListener() {
        //“Escutador” de eventos de janela
        this.addWindowListener(new WindowAdapter() {
             //Método que é executado quando o usuário clicar no botão de fechar da janela (ou algum evento que tenha a mesma funcionalidade, como o Ctrl+X no MS-Windows)
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        //“Escutador” de eventos do mouse
        this.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                mousePressedEvent(e);
            }           
            @Override
            public void mouseReleased(MouseEvent e) {
                mouseReleasedEvent(e);
            }
        });
        //“Escutador” de eventos de movimento do mouse
        this.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                mouseDraggedEvent(e);
            }
        });
    }
   
    //Quando o botão do mouse é pressionado, este método é executado
    private void mousePressedEvent(MouseEvent e) {
        //Se o ponteiro do mouse esta dentro do retângulo
        if (rect.contains(e.getPoint())) {
            //Obtenho o ponto inicial do ponteiro do mouse
            initial = new Point((int)(e.getPoint().getX() rect.getX()),
                    (int)(e.getPoint().getY() rect.getY()));
            //E digo que o retângulo pode ser “arrastado”
            elementDragged = true;
        }       
    }
   
    //Quando o mouse é “arrastado”, este método é executado
    private void mouseDraggedEvent(MouseEvent e) {
        //Se o retângulo pode ser “arrastado”
        if (elementDragged) {
            //Faço ele movimentar-se de acordo com a posição do ponteiro do mouse
            rect.setLocation((int)((e.getPoint().getX() initial.getX())),
                    (int)(e.getPoint().getY() initial.getY()));
            //Redesenho a tela
            this.repaint();
        }
    }           
 
   //Quando o botão do mouse é “solto”, este método é executado
    public void mouseReleasedEvent(MouseEvent e) {
        //Digo que o retângulo não esta mais “arrastavel”
        elementDragged = false;
        //E “zero” a posição inicial
        initial = null;
    }
   
    //Para evitar o “pisca-pisca” (efeito de blink) da tela
    @Override
    public void update(Graphics g) {
        this.paint(g);
    }
   
     //Desenha um retângulo vermelho em um fundo preto (retângulo do tamanho da tela)
    @Override
    public void paint(Graphics g) {
        //Pinta a tela de preto
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
        //Pinta um retângulo vermelho
        g.setColor(Color.RED);
        g.fillRect((int)rect.getX(), (int)rect.getY(),
                (int)rect.getWidth(), (int)rect.getHeight());
    }
 
    //Método principal que inicia a aplicação (tudo começa aqui 🙂 )
    public static void main(String arg[]) {
        //Instância a classe
        MainClass main = new MainClass();
        //Exibe a tela
        main.setVisible(true);
    }
}

Parece que funciona (eu testei no MacOSX 10.7.4, com o JDK 1.6.0_33)

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Qual é a diferença entre métodos public, protected, private e &#8220;default&#8221; no Java?

Dúvida de um pessoal aqui, que vou tentar (eu disse “tentar” 😛 ) explicar.

No Java, existem quatro tipos de “permissões” de acesso a métodos (isso também vale para classes e propriedades, com algumas exceções ) que, dependendo de sua escolha, parte do seu código-fonte vai ou não “enxerga-la” durante a execução/compilação deste. São elas:

public : A mais fácil de explicar, pois todo código tem acesso a ela! 🙂
Exemplo:

Arquivo: Util.java

package teste.util;
_
_

public class Util {

           public void nothing() {
                    System.out.printf(“Estou fazendo %s\n”,“Nada”);
           }
}

Arquivo: Main.java

package teste.main;
_
_ import teste.util.Util;
_
_ public class Main {
           public static void main(String args) {
                      Util util = new Util();
                      util.nothing();
           }
}

private : A mais restrita das quatro, onde somente a classe que a declarou tem acesso:

Arquivo: Util.java

package teste.util;
_
_ public class Util {
            //Este método é chamado somente dentro desta classe
           private void privateNothing() {
                    System.out.printf(“Estou fazendo %s\n”,“Nada”);
           }
_
_            public void publicNothing() {
                    System.out.println(“Será que chamo?”);
                    this.privateNothing();
           }
}

Arquivo: Main.java

package teste.main;
_
_ import teste.util.Util;
_
_ public class Main {
           public static void main(String args) {
                      Util util = new Util();
                      //util.privateNothing(); //NÃO FUNCIONA
                      util.publicNothing();
           }
}

(Até aqui, foi bem simples explicar. Mas a partir de agora que vem o problema :P)

protected : Este “acesso” é meio estranho, mas vamos lá: a classe que declarou, as classes que estão no mesmo pacote e a classe que herdou desta, tem acesso a ela.
Putz Confuso não? Melhor pedir ajuda ao exemplo. (universitários? nem pensar!) 😛

Arquivo: Util.java

package teste.util;
_
_ public class Util {
           protected void protectedNothing() {
                    System.out.printf(“Estou fazendo %s\n”,“Nada”);
           }
}
_
_ Arquivo: Inutil.java

package teste.util;
_
_ //Não herdou mas esta no mesmo pacote (isto funciona!)
public class Inutil {
           public void nothing() {
_                   __Util util = new Util();_
_                   util.__protectedNothing();_
_           }_
_}_
_
_ Arquivo: HerancaUtil.java

package teste.heranca;
import teste.util.Util;
_
_ //Herdou, mas não esta no mesmo pacote (isto funciona!)
public class HerancaUtil extends Util {
           public void nothing() {
_                   super__.__protectedNothing();_
_           }_
_}_

Arquivo: Main.java

package teste.main;

__import teste.heranca.HerancaUtil;

import teste.util.Inutil;

import teste.util.Util;
_
_ public class Main {
           public static void main(String args) {
                      Util util = new Util();
                      //util.protectedNothing(); //NÃO FUNCIONA
                      Inutil inutil = new __Inutil();_
_                      inutil.nothing();_
_                      __HerancaUtil
 h__erancaUtil__ = new HerancaUtil();

                      h__erancaUtil.nothing();
           }
}

(Só falta uma 🙂 )

default : O acesso é restrito as classes que estão no mesmo pacote, ou seja, classes que não estejam no mesmo pacote, mesmo as que herdam da que declarou o método, não o acessam.

Arquivo: Util.java

package teste.util;
_
_ public class Util {
           void defaultNothing() {
                    System.out.printf(“Estou fazendo %s\n”,“Nada”);
           }
}
_
_ Arquivo: Inutil.java

package teste.util;
_
_ //Não herdou mas esta no mesmo pacote (isto funciona!)
public class Inutil {
           public void nothing() {
                   Util util = new Util();_
_                   util.__defaultNothing
();

           }
}
_
_ Arquivo: HerancaUtil.java

package teste.heranca;
import teste.util.Util;
_
_ //Herdou, mas não esta no mesmo pacote (NÃO funciona!)
public class HerancaUtil extends Util {
           public void nothing() {
                   //super__.default__Nothing(); //NÃO FUNCIONA
           }
}

Arquivo: Main.java

package teste.main;

__import teste.heranca.HerancaUtil;

import teste.util.Inutil;

import teste.util.Util;
_
_ public class Main {
           public static void main(String args) {
                      Util util = new Util();
                      //util.defaultNothing(); //NÃO FUNCIONA
_                      __Inutil inutil = new __Inutil();_
_                      inutil.nothing();_
_           }_
_}_

(Ufa, terminou! 🙂 )

Espero que alguém compreenda o que esta escrito 😛

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Whitespace: Programando com espaços em branco

Essa sugestão é de um colega meu. 🙂

Sabia que dá para programar somente com espaços em brancos, tabs e enters?

Pois é, existe uma linguagem chamada Whitespace, onde você programa somente com caracteres não visuais.
Quer saber mais da linguagem e baixar ela? Entre no site:
http://compsoc.dur.ac.uk/whitespace/index.php

Abaixo, o exemplo de “Hello World”:

Say hello. Estranho, não? (não testei, portanto, nem sei se funciona ) 😛

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Robomind: Robocode + Logo

Robomind é mais uma aplicação educacional para ensinar as pessoas a entender este mundo louco e maravilhoso dos programadores (ou seja, ela ensina a programar :P).

O conceito básico do aplicativo: você tem um “robô” que é comandado por instruções do tipo “ande para frente”, “vire a esquerda” e outros. O objetivo é criar programas que façam o robô caminhar sem bater nos obstáculos (ou algo parecido ).

Quem estiver interessado, pode obter mais informações e baixar o aplicativo no site:
http://www.robomind.net/pt/index.html

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Application Craft: Desenvolvendo aplicações nas nuvens!

Muito se fala em Cloud Computing, em HTML5 e em Mobile, todas tecnologias “novas” onde a maioria das empresas desta área estão começando a se interessar

Pensando nisso, surgiram algumas ferramentas de desenvolvimento Web nas nuvens, e dentre elas esta o Application Craft.

 O Application Craft é uma ambiente de desenvolvimento nas nuvens, ou seja, você programa literalmente em um navegador, para criar aplicações web para diversos dispositivos e/ou sistemas operacionais.

A idéia parece muito legal e o mais interessante é que parece que ela usa o conceito de Responsive Web Design (RWD), onde a responsabilidade de “renderização” da aplicação é do ambiente na qual o sistema esta sendo usado (tipo de navegador, tamanho da janela, sistema operacional, etc).

Quer saber mais? Clique no link abaixo:
http://www.applicationcraft.com/

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

TotalCross: Java para iOS

Alguém se lembra de um framework de Java para Palm chamado SuperWaba?
Sim? Então você é um programador tão antigo quanto eu 🙂

Pois é, o tempo passou e as coisas evoluiram: o Palm já era, o iPaq também E, hoje em dia, a moda é iPhone e Android

Mas o SuperWaba também evoluiu Agora ele chama TotalCross e funciona para iPhone e Andro http://www.superwaba.com.br/pt/tc_overview.asp

Esta ferramenta possui uma VM (Virtual Machine ou Máquina Virtual) própria que interpreta código compilado Java e roda em diversas plataformas (cada uma com sua VM, lógico 😛 )

Interessante, porém parece que a ferramenta não é oficializada pela Apple (no caso do iOS ).

Mas não custa experimentar 🙂

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

Crie aplicativos móveis &#8220;sem programar&#8221; com Smartface

Pois é, mais um framework para criação de aplicativos móveis “multiplataforma” 😛

O interessante desta ferramenta é que o desenvolvimento de uma aplicação ocorre de maneira inteiramente visual, sem a necessidade prévia de conhecer uma linguagem de programação.

Mas como toda ferramenta visual, os recursos são restritos, porém acho que dá para fazer algumas coisas interessantes com ela 🙂

Para mais informações e download da ferramenta, acesse o endereço abaixo: http://developer.smartface.biz/

A versão disponível tem suporte ao Android e J2ME (iOS esta previsto na próxima versão, a 3.0).

Obs.: Ainda não cheguei a testar, mas quando der um tempo, vou dar uma olhada

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

MonoTouch: Construindo Apps em iOS e Android com .Net

Essa dica é de um amigo meu, que esta trabalhando com esta linguagem. 🙂

O Mono é um projeto open-source que, eu acho, foi iniciado pelos ex-donos da Ximian (uma antiga empresa que trabalhava com a plataforma Gnome).

Inicialmente, era uma tentativa de criar um framework livre para Microsoft.Net que rodasse tanto em GNU/Linux quanto em MS-Windows. Hoje, a versāo disponível implementa a linguagem C# e alguns CLR (um tipo de biblioteca) compatível com o Microsoft.Net.

O interessante é que, a partir daí, surgiram dois novos frameworks: um para iOS (iPhone) chamado MonoTouch e um Android, o MonoForAndroid.

Com certeza, isso é uma alegria para todo desenvolvedor .Net que quer programar em iOS/Android

O problema: as frameworks são pagas. 🙁

Mas existe a versão para validação (evaluation Será que a tradução esta correta? Já disse que sou péssimo em inglês? :P).

Para tentar ver se realmente vale a pena pagar ou nāo, nāo custa ir ao site deles e baixar esta versāo:

Versāo iOS:
http://xamarin.com/monotouch
Versāo Andro http://xamarin.com/monoforandroid

Até mais!

Ah Valeu Ermano, pela dica! 😉

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

&#8220;Adicionando&#8221; métodos em Classes Nativas (Objective C)

Essa eu aprendi com um cara aqui da empresa. 🙂

Sempre que precisava de um método novo em uma classe que já existia em Java, eu tinha que criar uma nova classe que herdava desta e criar o método:
public class MyArrayList extends ArrayList {
          public void sort() {
         
          }
}
Para usar, tinha que substituir a instância para esta classe:
//De: ArrayList a = new ArrayList(); 
//Para:
MyArrayList a = new MyArrayList();
a.sort();
Mas em Objective C existe uma coisa interessante, se eu quiser criar um método em uma classe já existente, basta colocar uma “categoria” para ela. Por exemplo: quero criar um método chamado parseJSON na classe NSString (que já existe na API da Apple):
/*
 * NSString+JSON.h
 */
@interface NSString (NSString_JSON)
– (NSDictionary*) parseJSON;
@end
/*
 * NSString+JSON.m
 */
@implementation NSString (NSString_JSON)
– (NSDictionary*) parseJSON
{
}
@end
Agora, qualquer objeto do NSString possue este método (sem eu precisar mudar a classe da variável!):
NSString* str = @“{a:1, b:2}”;
NSDictionary* dict = [str parseJSON];
Muito interessante 🙂
Valeu, Koga, pela dica!
Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.

XperienCentral

XperienCentral. Xperien central é atualmente o único CMS que oferece conteúdo exclusivo para um visitante como por sua viagem anterior, para que você possa adaptar o conteúdo para aumentar a conversão.

XperienCentral Acesse a página para conhecer mais sobre este JAVA CMS: http://www.xperiencentral.com/

XperienCentral

XperienCentral Um sistema gerenciador de conteúdo web ou CMS (Content Management System), é um programa para criação de sites, oferecendo ferramentas variadas para publicar os conteúdo. Os mais famosos são WordPress, Joomla e Drupal. O apresentado neste artigo é compatível com Java.

XperienCentral,CMS Java, best java cms, melhores cms java
XperienCentral

Ele oferece multi-canal de entrega de conteúdo através do site, canais móveis de mídia social e aplicações. Ele é construído em Java e, portanto, é extremamente escalável e ágil.

Weceem

Weceem. Weceem é ainda outro sistema de gerenciamento de conteúdo de código aberto, improvável outro CMS é construído sobre grails Java-estrutura conhecida, primavera e Java em si. Weceem tem garner opiniões positivas e é um CMS ideal quando se trata de grails, mas enfrenta a dura concorrência na categoria Java CMS melhor.

Weceem Acesse a página para conhecer mais sobre este JAVA CMS: http://www.weceem.org/

Weceem

Weceem Um sistema gerenciador de conteúdo web ou CMS (Content Management System), é um programa para criação de sites, oferecendo ferramentas variadas para publicar os conteúdo. Os mais famosos são WordPress, Joomla e Drupal. O apresentado neste artigo é compatível com Java.

Weceem,CMS Java, best java cms, melhores cms java
Weceem

Encontrei uma discussão do LinkedIn que foi o suficiente para colocar esse CMS na lista Melhor Java CMS.

Walrus

Walrus. A Walrus é mais um CMS baseado em Spring que oferece capacidades de gerenciamento de conteúdo únicas e eficazes com uma interface administrativa inteligente e instalações de arrastar e soltar.

Walrus Acesse a página para conhecer mais sobre este JAVA CMS: Xhttp://walrus.lt/

Walrus

Walrus Um sistema gerenciador de conteúdo web ou CMS (Content Management System), é um programa para criação de sites, oferecendo ferramentas variadas para publicar os conteúdo. Os mais famosos são WordPress, Joomla e Drupal. O apresentado neste artigo é compatível com Java.

Walrus,CMS Java, best java cms, melhores cms java
Walrus

Fácil de configurar e desfazer/refazer características tornam Walrus altamente recomendado e adequado CMS para o governo e empresas sem fins lucrativos.