Archivio mensile:Gennaio 2008

JavaFX Mobile: si muove qualcosa


Nel maggio dello scorso anno, in occasione della JavaOne 2007, Sun annunciò JavaFX e JavaFX Mobile. Di JavaFX apparvero subito esempi di codice e moduli per Netbeans, mentre di JavaFX Mobile fu pubblicata solo qualche informazione frammentaria e piuttosto varia.

Dopo il tam tam su blog e newsletter, l’interesse per JavaFX Mobile è andato pian piano scemando. In effetti, non essendoci nulla con cui "giocare", era inevitabile che gli sviluppatori indirizzassero la loro attenzione altrove (Android?).

Dalla Mobile & Embedded Developer Days conference che si svolge in questi giorni arrivano finalmente nuove notizie su JavaFX Mobile! È confermato lo "stato di salute" del progetto, nato dalle ceneri di Savaje e basato su Linux e Java Standard Edition. Segnalo la presentazione Developing JavaFX Mobile Applications fatta da Noel Poore, che chiarisce alcuni aspetti dell’architettura di questa piattaforma, in particolare la coesistenza di CLDC/MIDP e Java SE (piuttosto, dov’è finita CDC?).

javafxmobile.png

Si attende a breve un apposito modulo per Netbeans, con emulatore dedicato.

JSR-82 su IBM J9 per Windows Mobile (CDC e CLDC)


Segnalo a tutti coloro che lavorano con Java Micro Edition su Windows Mobile che è disponibile il porting della Bluetooth API JSR 82 per le virtual machine Mysaifu e IBM J9 (sia CLDC che CDC!):

http://code.google.com/p/bluecove/wiki/WindowsMobile

Purtroppo l’API non è supportata totalmente (ad esempio, manca il supporto L2CAP), ma è più che sufficiente per effettuare il discovery di dispositivi e servizi e gestire connessioni RFCOMM.

Vengo anch’io?


No, tu no! Iannacci aveva ragione…

Signore e signori, ecco a voi l’iPhone!
Spiacente, non è disponibile per l’Europa.
Ladies and gentleman, ecco a voi Sun SPOT!
Sorry, non è disponibile per l’Europa.
Madames et monsieurs, ecco a voi i BUGs!
Désolé, non è disponibile per l’Europa.

Ma dov’è la globalizzazione quando serve?

The uncomplicated desire to connect

È evidente che chi ha preparato questa presentazione non ha mai configurato le impostazioni di rete di un Series 40! 😀 😀 😀 "The uncomplicated desire to connect", infatti, trova qualche ostacolo su certi telefoni. Battute a parte, è fuor di dubbio che Nokia faccia i migliori telefoni in assoluto:

Buon weekend.

La Casa del Pescatore


Le vacanze natalizie sono l’occasione per trascorrere serate piacevoli con i parenti, scambiarsi doni e consumare assieme i tipici piatti invernali della cucina locale. Il mese di dicembre, oltre che portare panettoni e zamponi, è il mese giusto per gustare un prelibatezza di mare: i ricci. Così, prima di essere sommersi da cenoni interminabili (e dunque perdere qualsiasi desiderio di andare a mangiare fuori casa!) e avere almeno una mezza giornata per noi, ci siamo regalati un pranzo sul lungomare Poetto di Cagliari. Quel che segue è la cronaca di un pranzo da oscar.

La “Casa del Pescatore” e’ uno dei tanti ristorantini che offrono cucina tipica cagliaritana a base di pesce fresco, a pochi metri dal mare .

casadelpescatore_small.jpg

Il pranzo e’ iniziato con due dozzine di ricci:

ricci_small.jpg

a cui abbiamo fatto festa su piccoli pezzetti di pane:

ricci_pane_small.jpg

Il primo e’ stato uno spettacolare piatto di spaghetti con ricci, arselle e bottarga:

spaghetti_ricci_small.jpg

È la terza volta quest’anno che mangio pasta ai ricci, ma sicuramente quella preparata alla Casa del Pescatore le batte tutte! Molto condita, molto saporita, sapiantemente cucinata. La cosa sorprendente è la quantità di condimento: anche a fine piatto, dopo parecchie forchettate, la pasta restava sempre molto condita, segno che il cuoco non è andato al risparmio:

spaghetti_ricci_fine_small.jpg

Come secondo abbiamo gustato le orziadas, anenomi semolati e fritti:

orziadas_small.jpg

Qui i commenti non bastano: occorre assaggiarle per scoprirne il gusto! Vista la qualità del primo e delle orziadas, abbiamo chiesto dei calamti fritti. Ovviamente niente prodotti surgelati, ma solo calamari freschi, affettati e fritti sapientemente:

frittura_calamari_small.jpg

Difficile stabilire se siano stati migliori della frittura mangiata a Silvi Marina, molto particolare per il tipo di pescato offerto. Un caffè ha chiuso il pranzo e la bella sorpresa è arrivata con il conto, quando abbiamo scoperto di aver speso davvero poco in proporzione alla qualità e ai sapori che questo pranzo ci ha regalato.

Visto tutto il pesce di cui ho parlato finora, credo sia arrivato il momento di parlare di carne 😉 Alla prossima!

Filtro per ChoiceGroup POPUP


Il ChoiceGroup è un componente della libreria LCDUI di MIDP che consente di visualizzare liste di elementi a scelta multipla o esclusiva all’interno di un Form. Il ChoiceGroup dispone della modalità POPUP, che consente la selezione di un singolo elemento attraverso una piccola finestra di popup, riducendo lo spazio occupato sul Form e migliorandone di conseguenza la leggibilità.

A differenza di altre librerie di componenti, LCDUI non consente di filtrare la lista digitando le prime lettere della parola cercata. Su Python per Series 60, ad esempio, il componente selection_list dispone di questa funzionalità facilmente attivabile in fase di visualizzazione. Si consideri il seguente frammento di codice, che visualizza una lista di paesi della Sardegna:


import appuifw

cities = [u"Abbasanta", 
            u"Budduso'", 
            u"Cagliari", 
            u"San Gavino", 
            u"Sassari", 
            u"Serri", 
            u"Sestu"]

index = appuifw.selection_list(cities , 1)


Come visibile in questo snapshot di un Nokia 6630, alla pressione di una lettera sul keypad, la lista viene automaticamente filtrata e, dunque, ridotta:

listpython.png

In ambiente MIDP è possibile implementare questa funzionalità utilizzando un TextField e registrando un ItemStateListener che aggiorna il ChoiceGroup in base al testo digitato dall’utente. Il codice sorgente è semplice (ma, ahime’, non estremamente sintetico come in Python):


public class SearchForm 
         extends Form 
         implements ItemStateListener {

  private String CITIES[] = new String[] {
                "Abbasanta", 
                "Budduso'", 
                "Cagliari", 
                "San Gavino", 
                "Sassari", 
                "Serri", 
                "Sestu"};

  private ChoiceGroup citiesList;
  private TextField searchField;

  public SearchForm() {
    super("Seleziona citta'");
    init();
  }

  private void init() {
    citiesList = new ChoiceGroup("Citta' (" 
                    + CITIES.length + "): ",  Choice.POPUP);
    citiesList.setLayout(Item.LAYOUT_SHRINK);

    for (int i = 0; i < CITIES.length; i++) {
      citiesList.append(CITIES[i], null);
    }

    append(citiesList);
    searchField = new TextField("Cerca: ", "", 40, 
                                          TextField.ANY);
    searchField.setLayout(Item.LAYOUT_NEWLINE_AFTER);
    setItemStateListener(this);
    append(searchField);
  }

  public void itemStateChanged(Item item) {
    if (item == searchField) {
      updateList();
    }
  }

  private void updateList() {
    citiesList.deleteAll();
    for (int i = 0; i < CITIES.length; i++) {
      if (CITIES[i].startsWith(searchField.getString())) {
        citiesList.append(CITIES[i], null);
      }
    }
    citiesList.setLabel("Citta' (" + citiesList.size() + "): ");
  }

} 

Eccolo in esecuzione su Nokia 6120c:

searchform_small_1.png

Digitando sul TextField si attiva il filtraggio della lista:

searchform_small_2.png