Skip to content

Month: May 2009

JavaFX, Retrieving non XML/JSON data from clouds

tango weather overcast

Usuually on JavaFX we grab data using HttpRequest from external resources on formats like JSON or XML. I showed how to get it on the post Reading Twitter with JavaFX and how to parse it using PullParser on the post Parsing a XML sandwich with JavaFX.

Another day I need to grab and interpret some plain results, not in XML nor JSON, while consuming a REST service. In this case we don’t have a well structure data so the PullParser won’t help us.

Example 1: Reading Raw Data

In this example we’ll load a plain text file served in a remote location.

var planetsRequest = HttpRequest {
    location: "http://silveiraneto.net/downloads/planets";
    onInput: function(stream: InputStream) {
        var buff = new BufferedReader(new InputStreamReader(stream));
        var line = "";
        while((line = buff.readLine())!=null){
            println(line);
        }
    }
}
planetsRequest.enqueue();

This will produce the output:

Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune

Example 2: Discovering your IP Address

In this example we’ll examine how to integrate a request of a remote data in a running graphical program.

The best way to know your real IP address is asking for a remote server to look which IP made that request. It’s like calling for a friend and asking him which number appeared in his mobile. =) This server side Python script prints the IP address of who requested the page.

#!/usr/bin/env python
import os

print "Content-type: text/html"
print
print os.environ['REMOTE_ADDR']

In the client side, with JavaFX, we’ll load the remote value into a local variable. The ip is assigned with the value “…” and later the ipRequest will replace it with a String with the IP. The bind feature will automatically fix the GUI String text.

For the user he will see the ellipsis for a few seconds and so their IP.

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.io.http.HttpRequest;
import java.io.*;

var ip = "...";

Stage {
    title: "What is my IP?" width: 250 height: 80
    scene: Scene {
        content: Text {
            x: 10, y: 30
            content: bind "My IP is {ip}"
        }
    }
}

var ipRequest = HttpRequest {
    location: "http://silveiraneto.net/scripts/myip.py";
    onInput: function(stream: InputStream) {
        var buff = new BufferedReader(new InputStreamReader(stream));
        ip = buff.readLine();
    }
}
ipRequest.enqueue();

You can try this JavaFX applet here.

Example 3: Reading Integer values

Until now we handled just plain Strings. But in some cases you want to get number as non structured data. In this case you need to know previously which type the data is. In the case of a web service this probably will be described in a WSDL file.

Here I’m writing a very simple service script at Zembly, a great platform for cloud computing. It’s called aplusb, it justs add the first parameter A to the second B.

if ((Parameters.a != null) && (Parameters.b!= 0)) {
return Parameters.a+Parameters.b;
}

The service is published at Zembly here where you can see more details on how to invoke it.

A simple way to invoke it on JavaFX and than getting the value as an Integer:

import java.io.*;
import javafx.io.http.HttpRequest;

var a = 100;
var b = 200;
var result = 0 on replace {
    println(result);
}

var zemblyRequest = HttpRequest {
    location: "http://zembly.net/things/1827f696529d4e6f940c36e8e79bea1c;exec?a={a}&b={b}";
    onInput: function(stream: InputStream) {
        var buff = new BufferedReader(new InputStreamReader(stream));
        result = Integer.valueOf(buff.readLine());
    }
}
zemblyRequest.enqueue();

The output will be:

0
300

The first 0 is from the first assignment on the var result. The 300 is from the webservice itself.

The same approach can be used to convert the ASCII/Unicode result from the stream to the suitable type on a variable.

Caravana Panapanã

Para quem estará na semana que vem em Caucaia nas redondezas, participe da Caravana Panapanã comemorando os aniversário de dois anos da unidade Casa Brasil de Caucaia.

cartaz caravana

Programação:

programação panapanã

Radio Debate, Software Livre e Lei Azeredo

[audio:http://silveiraneto.net/downloads/radio_debate_completo_21_maio_2009.mp3]

Download: em MP3 ou em OGG.

Participei no dia 21 de Maio do programa Rádio Debate da Universitária FM, apresentado pelo Agostinho Gósson, jornalista e professor do Departamento de Comunicação Social da UFC, sobre segurança na rede, vigilantismo na Internet, Software Livres e outras coisas mais. Foi uma satisfação imensa conhecer esta rádio que eu escuto quase todos os dias e conhecer algumas das figuras que cujas vozes habitam meu imaginário. Não preciso nem dizer que estava muito nervoso nas primeiras falas, mas depois eu fui me acostumando. É estranho falar com o Agostinho, dá impressão que eu estou na rua, dirigindo, ouvindo.

Slides com o Kdenlive

Estou dando uma olhada no Kdenlive, um editor de vídeo não-linear, livre, focado na facilidade de usar e na flexibilidade. O vídeo acima foi produzido com uma série de fotos de uma reunião do Casa Brasil, títulos feitos no Gimp e música livre do artista Antony Raijekov.

As fotos originais estão neste meu álbum no Flickr. O vídeo em mais alta resolução está em reuniao_casabrasil_maio_2009.ogg (apróx. 12Mb) ou reuniao_casabrasil_maio_2009.avi (apróx. 378Mb).

JavaFX 1.1 for Linux workaround

Download

javafx4linux.tar.bz2 (~ 36Mb).

Installing

1) Extract the javafx4linux.tar.bz2 file. In this example I’m placing it on my Desktop. After the installing process you can remove it.

javafx linux ubuntu extract

2) Open your NetBeans 6.5 and go at Tools → Plugins and go to Downloaded tab. In a plain and new NetBeans installation there will be no plugin in this tab yet.

netbeans javafx linux step01

netbeans javafx linux step02

netbeans javafx linux step03

3) Click on the Add Plugins button and head to the directory you extracted the file and select all .nbm files.

netbeans javafx linux step 04

4) You will see a list of 22 plugins selected. Click on the Install button.

netbeans javafx linux step 05

5) Just keep clicking on the Next button.

netbeans javafx linux step 6

6) Check the license agreement accept box.

netbeans javafx linux step 7

7) You’ll see a warning because the Linux pluggin is not signed. Don’t worry, just click Continue.

netbeans javafx linux step 8

8) Click on Finish to restart NetBeans.

netbeans javafx linux step 9

9) Now we can test it. Go at File → New Project, select the JavaFX on Categories and JavaFX Script Application on Projects.

netbeans javafx linux step 10

10) Put some code and run it. There is. JavaFX on Linux.

netbeans javafx linux step 11

Considerations

This is not a official of JavaFX for Linux! This solution was tested on Ubuntu 9.04 “Jaunty Jackalope” with Java 6 update 13 and NetBeans 6.5.1, but should also work with others Linux distributions and Java versions greater than 5.

Known bugs

As a non official workaround for JavaFX for Linux you may notice some drawbacks. Some parts of the JavaFX runtime rely on native implementations on the specific operational system. You may not use some multimedia capabilities as video playback, JavaFX Mobile emulator and some performance issues in some effects. Despite that, is perfectly possible to develop applications using JavaFX on NetBeans.

Thanks

I’d like to thanks some guys around the world. Weiqi Gao’s original post on JavaFX on Linux, HuaSong Liu article on DZone and Kaesar Alnijres post.

James Gosling at Jazoon 2009

james gosling at Jazoon

Great news. I just received a mail from the Jazoon staff telling that James Gosling, mostly known as father of Java programming language, will be at Jazoon’09 to hold the Opening Keynote Speech on Tuesday, 23 June 2009.

I’d love to take a photo with him. 🙂

Ubuntu Jaunty: má performance gráfica

ubuntu glass logo

Nas versões anteriores do Ubuntu, inclusive no 8.04 que eu utilizava anteriormente, não havia do que me queixar. Porém com a mudança para o 9.04 (Jaunty Jackalope) de imediato foi possível reparar uma queda drástica na performance da aceleração gráfica 3D.

Minha placa gráfica no meu notebook, um Amazon FL31.

silveira@fl31:~$ lspci -nn | grep VGA
00:02.0 VGA compatible controller [0300]: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller [8086:27a2] (rev 03)

Na release desta versão do Ubuntu havia um aviso de possível regreção na performance em placas de vídeo da Intel onde há a indicação de algumas soluções provisórias.

Regressão do Driver

Eu experimentei uma solução mais drástica que foi alternar o driver de vídeo para a versão anterior. O desempenho melhorou bastante, mas ainda senti uma boa diferença para os padrões que eu estou habituado. Além disso continuava impossível rodar alguns jogos, as texturas eram carregadas nos lugares errados e poucos quadros por segundo. Eu acabei por retornar os drivers para o default do Jaunty e descartar essa opção.

Atualização do Driver

Uma solução alternativa que eu me deparei foi atualizar os drivers para uma versão mais nova. Como root execute os comandos abaixo para adicionar os repositórios a lista do APT, adicionar suas chaves e atualizar as informações de pacote e instalar os novos drivers:

echo “deb http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu jaunty main” >> /etc/apt/sources.list.d/intel.list

sudo apt-key adv –recv-keys –keyserver keyserver.ubuntu.com 165d673674a995b3e64bf0cf4f191a5a8844c542

aptitude update && aptitude safe-upgrade

A performance ainda não está tão boa quanto já foi mas está completamente suave e usável.