This document was uploaded by user and they confirmed that they have the permission to share
it. If you are author or own the copyright of this book, please report to us by using this DMCA
report form. Report DMCA
Andrea Castello http://javame-cinghius.blogspot.com [email protected] Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
1 di 42
Sommario (1) - Dal Web al Web 2.0 - Dal WML agli Smart Client - Ajax, Comet: modelli applicativi - Java ME: visione d'insieme e specifiche MSA (JSR-248)
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
2 di 42
Sommario (2) - UI in Java ME: Item di sistema
e Canvas - Applicazione “Blogger feed search” ● ● ●
Elementi base: UI Connessione HTTP asincrona Parsing XML con KXML e KDOM.
- Mobile e modello asincrono: conclusioni (provvisorie...) Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
3 di 42
L'evoluzione: dal Web... Un insieme di documenti ipertestuali indipendenti e servizi isolati. ●
Approcio “standalone” allo sviluppo delle applicazioni. ●
Differenza più netta tra produttori e consumatori di informazioni rispetto a quella odierna. ●
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
4 di 42
...al Web 2.0 “Il web è una piattaforma” (T. O'Reilly), un ecosistema di servizi interdipendenti. ● Approcio allo sviluppo più “community oriented” rispetto al passato. ● Il motore: web services, Ajax, Comet, Representational State Transfer (REST)... ●
I frutti: WebOS, Mashup services, “Widget services”: programmatori indipendenti contribuiscono a creare servizi e contenuti. ●
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
5 di 42
Web 2.0: una considerazione - Cosa è veramente? Difficile identificarlo monoliticamente. - T. O'Reilly (sett 05): Napster fa parte del Web 2.0!! - Vera innovazione E fenomeno di marketing. - Approcio decentralizzato: nuovo sistema di vedere il web come mezzo di comunicazione. I fatti: nuovi servizi vengono creati continuamente: (Google Maps, Suggest, Writely, Widgets/Widsets, feed readers, Flickr, YouTube, Blogger) anche in versione “Mashup” (combinata), spesso in beta. Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
6 di 42
Web 2.0: mashup API matrix
http://www.programmableweb.com/matrix ●
328 API disponibili = infinite combinazioni possibili
●
Crescita media 1 nuova API al giorno!
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
7 di 42
Web 2.0: more bandwidth, please!! Utenti internet 1999 (stima) - >=90% connessi dial up fino a 56 kbit/sec - <=10% connessi ADSL fino a 640 kbit/sec 2004 (Nielsen/NetRatings) - ~47% utenti italiani connessi ad alta velocità (7,9 mln, <13% della popolazione). La banda larga è stata essenziale per la diffusione dei servizi “Web 2.0” Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
8 di 42
Web 2.0: EyeOS “Sistema operativo” browser-based (Web OS) con molte funzionalità Mix di Ajax, Flash, Java Applet (Port scanner, FTP client, Paint)
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
9 di 42
Evoluzione mobile (1): WML su WAP ●
“Pagine” di max 512bytes in b/n.
●
Supporto per le sole immagini WBMP.
●
Banda molto ristretta
●
Sistema punta-e-clicca mutuato dal web.
Tariffazione a tempo (costosissima! Si arrivava a pagare oltre 1000 lire/pagina) rendevano il traffico dati più costoso degli SMS! ●
Risultato: insuccesso clamoroso! Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
10 di 42
Evoluzione mobile (2\a): M-sites Evoluzione del modello precedente Abbandono di WML per altri linguaggi di Markup: - cHTML (su I-mode) - HTML (spesso sottoinsiemi) - XHTML ●
Tariffazione a consumo, a “slot” o – più raramente - flat. ●
Diffusi grazie alla maggiore ampiezza di banda (GPRS, EDGE, UMTS...) ●
Pensati per browser con supporto Javascript parziale o assente. ●
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
11 di 42
Evoluzione mobile (2\b): Mobile Ajax (Asynchronous Javascript and XML)
●
Nato dal successo delle applicazioni Web 2.0
Supportato ed incoraggiato da Opera con il suo browser Opera Mobile 8.65 ●
Base di sviluppatori potenzialmente enorme (si basa su tecniche analoghe a quelle di Ajax nel Web) ●
Permette la creazione di servizi “mashup” (ma non è l'unico!) ●
Frammentazione: esistono molti browser con differenti gradi di supporto del Javascript. ●
Non supporta accesso diretto a funzioni native del dispositivo (Bluetooth, File System...) ●
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
12 di 42
Evoluzione mobile (2\c): Java ME (Java Micro Edition)
●
Piattaforma “general purpose”
Attualmente è la piattaforma mobile dominante (oltre 1 mld di installazioni nel mondo). ●
Grande base di sviluppatori (circa 4 milioni nel mondo). ●
●
Microedition: non è solo telefoni cellulari!
Frammentazione: il detto “write once, run everywhere” sul mobile non è sempre vero! ●
●
Diffusione eterogenea delle API “opzionali”
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
13 di 42
Mobile 2.0 non è Mobile Web 2.0! ●
Il Mobile Web 2.0 è una delle molte opzioni!
Caratteristica del Mobile 2.0 è proprio il rinnovato interesse per il medium e la nascita di nuove tecnologie! ●
Java ME, Mobile Ajax, Flash Lite, Python, .NET CF, Symbian C++: Mobile 2.0 è poter fare la scelta tecnologica più comoda per la risoluzione di un nuovo problema/opportunità: la mobilità.
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
14 di 42
Ajax: il modello applicativo
Fonte: Jesse James Garret (adaptiveweb.com) Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
15 di 42
Oltre Ajax: il modello Comet Connessione HTTP sempre aperta ● Push di dati quando si verificano eventi dal server ●
Attualmente poco utilizzabile nel mobile a causa delle politiche di rete di alcuni operatori. ●
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
16 di 42
Java ME: visione d'insieme
Fonte: java.sun.com Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
17 di 42
Mobile Service Architecture (JSR-248) Non è una API. Amplia il raggio d'azione della JTWI per limitare la frammentazione delle API. ●
Definizione di un insieme di librerie Java ME che i produttori di dispositivi DEVONO implementare se vogliono essere conformi alla specifica. ●
Aggrega intorno alla combinazione CDLC – MIDP ben 14 API “opzionali” (grafica 2D e 3D, wireless messaging, Bluetooth, Web services, multimedia, sicurezza, pagamenti, etc.) ●
●
Final approval ballot il 16/10/2006.
●
In preparazione anche la MSA basata su CDC
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
18 di 42
UI in Java ME: approcio hi-level PRO Resa della UI delegata all'implementazione del dispositivo. ● Eventi di interazione gestiti dal dispositivo (comandi, scolling dei componenti) ● Portabilità (da prendere con le molle!) ● Accesso funzioni native dispositivo (es: T9) ●
CONTRO Look and feel dei componenti predefinito dal sistema. ● Non può controllare i singoli tasti del device. ●
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
20 di 42
Blogger feed search: l'ispirazione...
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
21 di 42
Blogger feed search: caratteristiche ●
Canvas con repaint ciclico.
●
HTTP GET asincrone.
●
XML parsing basato su KDOM
Funzioni: ●
Scaricamento e lettura di un feed
●
Ricerca dinamica tra i titoli dei post
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
22 di 42
Blogger feed search: la struttura Schermata di scaricamento dell'intero feed
MainMenu
Schermata Lettura Post
Scarica ●Cerca ●Esci
●
Schermata di ricerca dei post
Menu del telefono Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
Da tutte le schermate è prevista un'opzione di ritorno alla chiamante
23 di 42
Bfs: estendiamo GameCanvas final public void run(){ [...] // Gestione tasti in modalità “gaming” if (gameKeyEventsEnabled){ handleGamingKeys(); } // “Invita” a ridisegnare lo schermo con //le relative modifiche grafiche. repaint(0, 0, width, height); // Obbliga ad eseguire immediatamente // qualunque richiesta di repaint // ancora in attesa. serviceRepaints(); [...] }
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
24 di 42
serviceRepaints() vs callSerially() ●
●
Display.callSerially(Runnable r) ● Non bloccante. ● Può essere lento e in alcune implementazioni bacato. ● In molte implementazioni crea un nuovo thread. Canvas.serviceRepaints() ●
Bloccante, deve attendere la terminazione di paint() di cui ha
forzato l'esecuzione. ●
Può essere causa di deadlock, se paint() è chiamato da un
thread differente ed a questo serve un lock acquisito dal thread di serviceRepaints!
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
25 di 42
Bfs: considerazioni sul disegno ciclico ●
Non conviene un ciclo continuo.
●
Nel run() conviene limitare il numero di cicli di disegno in base alla famiglia di dispositivi scelti. Per fare questo, ad ogni ciclo, usiamo il metodo wait()
●
Nokia serie 60 (tutti), Nokia serie 40 3rd edition: 15-18 refresh al secondo.
●
Nokia serie 40 1st e 2nd edition: 8-10 refresh/sec
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
26 di 42
Bfs: connessioni Http asincrone Modello sincrono: evento “submit” --> connessione ● Modello asincrono: uno o più eventi del normale flusso d'uso dell'applicazione fungono da segnale (implicito) per l'avvio della connessione, che verrà effettuata secondo politiche prestabilite. ●
Connessione in un thread separato per non bloccare l'applicazione. ●
●
Proprietà fondamentali di HttpGet.java:
// Ammettendo di inviare richieste sempre allo // stesso URL, usiamo un vettore per i parametri // della richiesta private Vector queryStrings = new Vector(); // Vettore delle classi che gestiranno la response HTTP private Vector listeners = new Vector();
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
27 di 42
HttpGet: dentro il run() synchronized (this){ // Se non vi sono richieste pendenti si aspetta... while (queryStrings.size() == 0){ try{ wait(); Quando vi sarà una nuova richiesta pendente, il ciclo verrà svegliato da un } catch (InterruptedException e){ notify() } }
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
29 di 42
Blogger feed search: il listener SearchScreen ● E' listener della HttpGet ● Implementa l'interfaccia per la gestione delle schermate (disegno, input) ● Nei PDA implementa un'interfaccia per gestione dello stilo (Pointable).
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
30 di 42
XML parsing: modalità SAX (push): legge porzioni di documento generando eventi come inizio e fine di un documento, elemento o attributo. ●
PULL: simile a SAX ma gli eventi sono generati in corrispondenza di un avanzamento determinato dalla chiamata di metodi (es: parser.nextTag() ) ●
DOM: Crea in memoria un'alberatura che descrive l'intero documento. Es: element.getAttribute(name);
●
● ●
Pull e SAX: bassa occupazione di memoria. DOM: elevato consumo di memoria, maggiore facilità d'uso.
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
31 di 42
XML con Java ME: la liberia Kxml 2 Fornisce classi per parsing in modalità pull e DOM ● Versione attuale 2.3 (43KB) ● Esiste in versione “minimale” (~10KB) ● Package Kdom basato su tre elementi: Document,Node, Element // Creo il parser e imposto l'input stream ricevuto ●
Inizializzazione di unIparser DOM
// dalla response HTTP. KXmlParser parser = new KXmlParser(); parser.setInput(is, "UTF-8"); // Elemento che rappresenta il documento. Document doc = new Document(); try { doc.parse( parser ); } catch (Exception ex) { // gestione errore }
Download http://sourceforge.net/project/showfiles.php?group_id=9157&package_id=58653 Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
32 di 42
XML parsing: esempio (1) // Elemento radice del feed Element smnf = doc.getRootElement(); // Numero di nodi figli. int childNum = smnf.getChildCount(); Element child; for (int i = 0; i < childNum; i++) { child = smnf.getElement(i); if (child!=null && child.getName().equals("item")){ // Delego ad un altro metodo il parsing dei livelli // inferiori ad . news.addElement(parseItem(child)); } }
Struttura del feed: (attenzione! Non è RSS né Atom!) <smnf version=”0.3”> ......... ... ...
// Chiusura dello stream di input... [...]
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
33 di 42
XML parsing: esempio (2) // corpo di parseItem(Element item) Post p = new Post(); int itemChildren = item.getChildCount(); int attNumber = item.getAttributeCount(); if (attNumber>0){ p.setId(Integer.parseInt(item.getAttributeValue(0))); } Element child; for (int i = 0; i < itemChildren; i++) { child = item.getElement(i); if(nodeExist(child, "title")){ p.setTitle(child.getText(0)); } // Ripeto l'operazione per ogni figlio di [...]
} return p;
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
34 di 42
Mettiamo tutto insieme! (o quasi...)
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
35 di 42
Blogger feed search: il risultato! ...su emulatore (SE W810i) e dispositivo reale (Nokia 6600)
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
36 di 42
Blogger feed search: le criticità ●
User input: problema della pressione multipla dei tasto
●
Usabilità e banda: va sacrificato qualche dispositivo!
Layout: affrontare le problematiche dovute alle dimensioni del display ●
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
37 di 42
Modello asincrono: le prestazioni
¹: dato influenzato da prima autorizzazione dell'utente *: necessaria ogni volta un'autorizzazione dell'utente Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
38 di 42
Conclusioni: lavorare per il futuro (prossimo...) Mobile 2.0: le tecnologie ci sono! (e Java ME gode di ottima salute) ●
Affrontare la mobilità richiede conoscenza del medium e dei suoi utilizzatori. ●
●
Da Web 2.0 a Mobile 2.0: prudenza nei “porting”!
Mobilità: (è anche) accesso diretto ad audio, connettività locale e remota, fotocamera, GPS. Applicazioni pensate in termini “ambientali”. ●
●
La banda “larga” per cellulari non corre come l'innovazione.
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
39 di 42
Conclusioni: cosa fanno gli operatori? ●
●
●
●
Necessità di affrontare il Mobile Digital Divide: la copertura UMTS è ancora molto insufficiente! Mobile 2.0 e HDSPA (High Speed Downlink Packet Access) è una coppia vincente? Max 5,4 Mbit/sec teorici, 500 Kbit - 1,5Mbit/sec secondo le rilevazioni sperimentali di Motorola. Manca ancora di copertura (per ora solo Roma) Tariffe non competitive e mercato immaturo sono legati (“flat”, where are you?) L'alternativa Wi-Fi potrebbe smuovere il mercato...
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
40 di 42
Postilla: Java open, Java free ●
●
●
13/11/2006: Java (SE & ME) distribuita sotto GPL Potenziale espansione di sviluppatori, aziende coinvolte, piattaforme coinvolte Java ME: enorme potenziale per dispositivi “adatti” ma che non offrono ancora supporto (es: Nokia 770, Sony PSP, lettori Mp3, navigatori GPS, storage multimediali...)
Il recordman: il 14/11/06 un programamtore tedesco mette a disposizione la sua versione alfa (solo console testuale) di una KVM per PSP! http://pimpware.pspstart.de/
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006
41 di 42
Grazie per l'attenzione.
Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006