Asynch Javame

  • November 2019
  • PDF

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


Overview

Download & View Asynch Javame as PDF for free.

More details

  • Words: 2,556
  • Pages: 42
Asynchronous Java ME and XML L o

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

19 di 42

UI in Java ME: approcio low-level PRO ●

Look and feel libero e platform-indipendent

Gestione input customizzabile (pressione e rilascio tasti, trascinamento stilo, etc.). ●

CONTRO ●

Minore portabilità



Non accede a gestione input nativa

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() } }

[...]

request = (String)(queryStrings.elementAt(0)); listener = (ConnectionListener)listeners.elementAt(0); [...] } sendRequest(request, listener);

sendRequest effettua la connessione vera e propria. Il listener è la classe che gestisce i dati della response HTTP

Andrea Castello, Asynchronous Java ME and XML. Cagliari, 25 Novembre 2006

28 di 42

HttpGet: la connessione try{

conn = (HttpConnection)Connector.open(url+request); conn.setRequestMethod(HttpConnection.GET); in = conn.openDataInputStream(); rc = conn.getResponseCode(); if (rc != HttpConnection.HTTP_OK){ // gestione errore... } if(!errorOccurred){ listener.handleData(in); } } catch (Exception e){ [...] } finally{ // chiusura connessione... }

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

42 di 42

Related Documents

Asynch Javame
November 2019 2
Javame Curso
November 2019 2