Archivi categoria: Java

La frammentazione dell’offerta Linux per device mobili


Riprendo il mio post fatto qualche tempo fa a proposito del lancio di Android e un interessante articolo scritto da Tony Mobily su Free Software Magazine.

In buona sostanza, è sempre più evidente che la frammentazione della piattaforma Linux produce come unico risultato la dispersione delle forze (gratuite) della community, la creazione di inutili antagonismi (Tony cita più volte quella tra Gnome e KDE, ma potrebbero esserci tanti altri esempi validi, come quella tra Netbeans e Eclipse nel mondo Java), la dilagante incompatibilità di software etichettato “per Linux” tra diversi dialetti del sistema operativo.

Il problema, ben noto in ambiente desktop, si sta riproponendo nel mondo mobile. Fioccano i progetti, sorgono community, appare timidamente qualche device.

Perchè tutto questo? Mi verrebbe da dire che ciascuno aspira a diventare il vincitore della crociata pro-mobile-Linux e dunque non ha nessuna intenzione di condividere lo scettro con altri. E proprio qui sta l’errore: il podio dei vincitori e’ enorme, gigantesco, non esiste un secondo posto. Guardando agli albori di Linux, penso al messaggio di Linus ma al contemporaneo sforzo del progetto GNU nel produrre compilatori, librerie e tutto il resto. Chi vince? Linus? O Stallman? A me sembra tanto che l’uno senza l’altro avrebbero fatto poca strada (o comunque l’avrebbe fatta in tempi decisamente più lunghi).

Esistono anche esempi contrari, che dimostrano come la scelta di una sola piattaforma/libreria/API porti inevitabili vantaggi. Rimanendo nel mondo Linux, penso a cosa è accaduto a Bluez e Affix, librerie per l’accesso allo stack Bluetooth. Dopo un breve periodo di coesistenza, si è di adottare Bluez come libreria standard, ufficiale per Linux. Affix, sviluppata direttamente da Nokia, è stata messa da parte, ma è innegabile che la community ne abbia avuto un beneficio: Bluez è stata continuamente migliorata, sono stati realizzati binding per tutti i linguaggi di programmazione, il porting su diverse piattaforme hardware è stato incoraggiato.

Torniamo al mondo mobile. Cosa accadrà a OpenMoko, Maemo, Android e Qtopia? Aggiungo, a quanto elencato da Tony, altri quattro player: Moblin di Intel, MOTOMAGX di Motorola (attesa per febbraio), ALP (Access Linux Platform) di Access, Java FX Mobile di Sun Microsystems. Ben otto piattaforme per il mobile computing. I magnifici 8 o gli 8 dannati?

Chi, nella community, avrà la forza e la voglia per portare le proprie applicazioni su tutti questi ambienti? Alla fine ne rimarrà solo uno: quale? E che fine faranno gli sforzi fatti sui perdenti? Qualcuno comincia a pensare che Windows Mobile o Symbian, ciascuno nel proprio mercato, possano essere una scelta più assennata e ragionevole, specie se si vuole tutelare un minimo il tempo e le risorse spese a imparare e sviluppare.

Si annuncia un 2008 turbolento…

VM e librerie Sun SPOT rilasciate su licenza open source


Su segnalazione di Massimiliano Dessì, ho il piacere di diffondere questa notizia: Sun ha finalmente rilasciato con licenza open source il codice sorgente della virtual machine e delle librerie dei Sun SPOT! Maggiori dettaglio qui:

https://spots.dev.java.net/

Attendiamo ora che siano finalmente disponibili i developer kit per il mercato europeo…

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.

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

MIDP 3 Public Review Draft


Il Java Community Process ha appena rilasciato la specifica Public Review Draft di MIDP 3, reperibile all’indirizzo http://jcp.org/en/jsr/stage?listBy=public. Più o meno come un anno fa (era il Natale 2006…), la review si concluderà dopo tre mesi, ovvero a marzo 2008.

Ci è voluto un anno per passare dall’Early Draft alla Public Review. Credo sia normale che di fronte a tanta lentezza del JCP vi siano iniziative come quella della Open Handset Alliance, pur scegliendo la piattaforma Java come base applicativa per Android, abbandoni del tutto JME e predisponga un set di API alternative. Qualcuno sostiene che MIDP3 non farà in tempo a vedere la luce e che l’intervallo di tempo tra la specifica finale (attesa per giugno 2008), la disponibilità dei primi dispositivi e la loro progressiva diffusione sarà così lungo che sarà ormai tempo di avere CDC/PP o qualcos’altro anche sui terminali entry level.

Io non sono così drastico e pessimista, ma sono convinto che l’inerzia che MIDP3 manifesta non giovi a nessuno, neppure a coloro che stanno spendendo tempo e risorse per redigerne la specifica. Rispetto a qualche anno fa, il mondo del mobile computing non è più una nicchia: è una arena, piena di gladiatori e belve feroci. Ci sono i produttori dei terminali, ormai rimasti praticamente in cinque (Nokia, Motorola, Samsung, LG, Sony-Ericsson), e le cordate che supportano gli ambienti operativi (Java ME, Symbian, Windows Mobile, Flash Lite, Linux in varie salve). Ciascuno nel proprio dominio (hw o sw), talvolta saltando e componendo scelte azzardate che miscelano hardware e software, è pronto a vendere la famiglia per sbaragliare la concorrenza. In questo senso essere lenti e poco reattivi rispetto al mercato può essere fatale.

Quesiti dei lettori


Alcuni lettori del libro mi hanno scritto chiedendomi alcuni approfondimenti su argomenti specifici (Bluetooth, serializzazione…). Visto che alcune domande sono simili, ho pensato di preparare un aggiornamento agli esempi e un piccolo articolo di approfondimento, che pubblicherò a giorni. Gli impegni pre-natalizi sono tanti e il tempo sempre poco, vi chiedo di avere un po’ di pazienza… Grazie.