Organizzata dal Google Developers Group di Firenze si è svolta lo scorso 13 febbraio la conferenza sullo sviluppo di applicazioni mobile & embedded. Numerosi i temi trattati per un momento di incontro e riflessione su alcune delle tematiche più attuali nel panorama dello sviluppo di app: tra le altre, Internet of Things, Firefox OS, HTML5 e app native.
Introduzione
Da sempre molto attivo nell’organizzazione di conferenze e incontri a tema, il Google Developers Group di Firenze ha proposto questa volta una sessione pomeridiana all’insegna delle tecnologie dedicate al mondo mobile ed embedded [1]. Nella bella cornice del Parco urbano dell’innovazione (Incubatore Le Murate) [2] abbiamo assistito ad alcune presentazioni che hanno avuto il merito di focalizzare l’attenzione su tematiche attuali quali appunto lo sviluppo di app e la gestione di dispositivi hardware programmabili nell’ottica di quella sempre maggiore interazione tra oggetti “intelligenti”, dispositivi mobile e reti che sembra destinata a concretizzarsi definitivamente nell’immediato futuro.
In questo articolo riportiamo un breve resoconto degli interventi. Manca un racconto del workshop pratico di programmazione che si è tenuto in contemporanea a una delle presentazioni, perche’ la conferenza ha voluto anche offrire a chi era interessato la possibilità di “sporcarsi le mani” con un po’ di codice.
Dopo le doverose introduzioni e una breve presentazione di un progetto di formazione e stage presso aziende del settore IT che coinvolge studenti degli istituti tecnici di Firenze, si è entrati nel vivo della discussione, con i diversi contributi che riportiamo di seguito
Maurizio Caporali – Luca Pisani, “Programming things with Android”
Questa presentazione ha avuto come tema l’automazione e i cosiddetti smart objects, che non sono gli oramai onnipresenti tablet e smartphone, ma tutta quella serie di dispositivi hardware in grado di interfacciarsi con oggetti della vita quotidiana: tra gli esempi proposti, dispositivi per l’illuminazione intelligente e per la gestione del flusso idrico nelle fontane.
Figura 1 – UDOO per la programmazione di oggetti tramite Android.
Uno degli ambiti in cui linguaggi di programmazione, interfacce hardware programmabili (Arduino [3] in primis) e strumentazioni complesse si stanno maggiormente integrando, fornendo risultati concreti e visibili, è quello della comunità dei makers e delle stampanti 3D o di altri macchinari di prototipazione adatti per la lavorazione di legno e altri materiali.
I due relatori sono gli ispiratori di UDOO [4] che produce una piattaforma hardware consistente nell’unione di 4 schede Raspberry Pi [5] e una scheda Arduino Due. Le schede UDOO, dei veri e propri microcomputer, sono disponibili in varie configurazioni e hanno costi molto accessibili: rappresentano un’ottimo strumento didattico, ma non devono essere visti come “giocattoli” poiche’ il loro utilizzo è possibile in progetti applicativi molto seri e dalla grande portata.
Grazie alla disponibilità dell’Android Development Kit (ADK) sviluppato per Arduino Due, le schede UDOO sono programmabili in Android, tramite IDE, a un livello non troppo basso, con ovvi vantaggi. In tal senso, restano certi punti fermi della programmazione Android, come la presenza di un file AndroidManifest.xml, sebbene occorra comunque creare lato Arduino uno sketch che è un programmino in grado di girare sul microprocessore. I dettagli programmatici sono disponibili nelle slide che potete trovare in [1].
Numerosi sono i progetti che hanno usato UDOO: dal minirover controllabile con uno smartphone Android al sintetizzatore vocale in grado di riprodurre testi scritti. Il contributo dato dai relatori sta proprio nel proporre a un pubblico composto in buona parte da sviluppatori uno sguardo verso la programmazione di oggetti elettronici o elettromeccanici in cui ormai si stanno definitivamente affermando alcuni standard hardware aperti, come Arduino, e sistemi operativi a grande diffusione, come Android e Linux. Un ambito non enterprise in cui Java continua a giocare un ruolo importante.
Tobia Caneschi, “AppsFuel: Empower the mobile web”
Questo intervento ha presentato AppsFuel, un marketplace per app create in HTML5. Prima di passare all’analisi di questo marketplace e delle caratteristiche delle app realizzate in HTML5, il relatore ha fornito una rapida carrellata sulle caratteristiche delle altre piattaforme di sviluppo.
Android e iOS hanno le loro motivazioni: Android ad oggi resta leader fra gli sviluppatori mobile poiche’ è estremamente diffuso e quindi rappresenta la piattaforma migliore se si intende realizzare una app che possa raggiungere grande penetrazione nel mercato con una diffusione capillare fra molti utilizzatori. D’altro canto iOS presenta un miglior rapporto tra diffusione e guadagno poiche’ sono le app per iPod, iPad e iPhone a garantire i migliori guadagni in termini economici.
HTML5 invece rappresenta una scelta particolare, minoritaria, che ha comunque i suoi perche’. Anzitutto HTML5 dà la possibilità di distribuire contenuti sotto forma di app senza dover creare la app nativa, facilitando il riuso di materiale già esistente e già pensato per il web. Inoltre HTML 5 mette molti web designer nelle condizioni di accorciare il passaggio da “grafico” a “sviluppatore” di app.
Figura 2 – AppsFuel: un marketplace per applicazioni realizzate in HTML5 che mette a disposizione una serie di API e servizi.
Ma cosa manca alle app in HTML 5 per poter diventare più diffuse e creare un mercato profittevole? Alcune cose: anzitutto un sistema di installazione, pagamento e gestione sincronizzata degli acquisti sui diversi device che sia in stile App Store o Google Play Market, la cui immediatezza e comodità (notifiche push, sincronizzazione, aggiornamenti) ne hanno decretato il successo. Questo è un limite dovuto al fatto che le app HTML5 non controllano in maniera approfondita il sistema operativo, a differenza delle app native che possono anche accedere allo hardware.
Poi mancano le accelerated canvas 2D/3D che diventano fondamentali soprattutto per quanto riguarda i giochi, i quali rappresentano a tutt’oggi un’enorme fetta di mercato delle applicazioni per dispositivi mobili.
In questo senso AppsFuel punta a ridurre questo gap tramite tecnologie di accelerazione delle canvas: il relatore mostra a questo punto dei video cui si apprezza chiaramente la fluidità e la scorrevolezza di applicazioni realizzate in HTML5 e accelerate grazie a queste tecnologie.
La conclusione è che sarebbe poco oculato trascurare le applicazioni HTML 5 poiche’ esse rappresentano una scommessa potenzialmente favorevole vista la diffusione di giochi per dispositivi mobile e di quelli per Facebook: la presenza di molti sviluppatori HTML 5, inoltre, costituisce una “massa critica” di potenziali produttori di tali app. AppsFuel punta a fornire a questi sviluppatori un pannello con una serie di API e di servizi capaci di metterli in grado di sviluppare app performanti.
Luca Masini, “EEIncrementalStore: Enterprise Data Synchronization Framework”
Si entra con questo intervento in un campo molto interessante perche’ viene presentato una infrastruttura sviluppata per risolvere una situazione del reale mondo produttivo. Rimandiamo alle slide [6] per i dettagli applicativi e programmatici, ma raccontiamo in breve la sostanza del progetto.
Luca Masini si presenta stoicamente anche se un po’ malconcio per un incidente occorsogli nelle giornate immediatamente precedenti alla conferenza e, grazie anche ai disegni del figlio che funge da assistente nella presentazione, illustra questo progetto.
Figura 3 – EEIncrementalStore, un framework per gestire la sincronizzazione anche nei momenti in cui non c’è connessione Internet.
Il progetto nasce per consentire gli inventari nei negozi e nei supermercati delle grandi catene di distribuzione utilizzando dei tablet come terminali; il fatto importante è che oggigiorno diamo per scontata la disponibilità di connessione di rete continua e di buona qualità, ma in certi casi questa non è presente, come può accadere in ambienti chiusi e sotterranei. Come ovviare a tale inconveniente?
In breve, EEIncrementalStore è un framework che consente di lavorare anche offline: chiaramente, nel momento in cui sarà nuovamente disponibile la connessione di rete, verrà effettuata la necessaria sincronizzazione in remoto.
Per arrivare alla costruzione di questo framework si è analizzato cosa esistesse già di simile, guardando sia al mondo F/LOSS (Helios.io, OpenMobster) sia al panorama proprietario e a pagamento (SAP Mobile 3.x, Oracle DataBase Mobile Server 11g, IBM WorkLight 5.x); ci si è concentrati su quello che il relatore ha definito scherzosamente “l’iCloud dei poveri”, vale a dire NSIncrementalStore, che però è documentato da Apple in maniera molto scarna, ma il cui funzionamento è desumibile dall’analisi del progetto open AFIncrementalStore.
L’architettura di EEIncrementalStore, pertanto, prevede lato client una applicazione Cocoa che gira su dispositivi Apple iOS, uno strato intermedio che è il CoreData Model, e lato server l’applicazione Java EE 6. L’aspetto importante sta anche nel fatto che la logica applicativa rimane sul server e viene fornita sotto forma di “plugin” di EEIncrementalStore: questo fa sì che lo sviluppatore lato client si debba preoccupare solo di CoreData e API standard, e che l’applicazione possa funzionare anche offline. Qualche problema resta per la gestione dei conflitti in scrittura, ma è anche vero che per questo tipo di applicazione il problema è meno cruciale che, ad esempio, in applicazioni di tipo bancario.
Daniele Scasciafratte, “Firefox OS: where web apps become native”
Tra gli interventi più attesi c’era proprio questo sul nuovo sistema operativo mobile di Mozilla. Firefox OS promette di avere tutte le caratteristiche che ne potranno favorire una possibile grande diffusione: è probabile che andrà a “erodere” una fascia di mercato che adesso è appannaggio quasi esclusivo dei dispositivi Android, e che in certi mercati possa diventare il Mobile OS di maggiore diffusione, visto il rapporto prezzo/qualità davvero impressionante. Infatti, tra i dispositivi equipaggiati con questo sistema operativo, ne esistono alcuni a basso costo (sotto i 100 €, per intendersi) capaci comunque di funzionalità di tutto rispetto.
Figura 4 – Firefox OS sembra possedere enormi potenzialità che ne potrebbero fare uno dei protagonisti dei prossimi anni nel panorama dei sistemi operativi per dispositivi mobile.
Firefox OS nasce con una spiccata ottica open, visto che le tecnologie utilizzate sono Open Web Technologies, API standard o, nelle situazioni non ancora standardizzate, si tratta comunque di tecnologie proposte ufficialmente al W3C.
Un’architettura semplice e aperta
L’architettura ad alto livello di astrazione è estremamente semplice:
- alla base c’è Gonk, con il kernel Linux e i driver open source;
- come strato intermedio c’è Gecko, il motore di rendering web con API open;
- come interfaccia utente c’è Gaia, basata su HTML5.
Questa struttura consente di rimuovere dal dispositivo il tipico strato inserito da ogni produttore e consistente in API native interposte tra il kernel e il motore.
Le applicazioni di sistema, poi, sono app HTML5 a tutti gli effetti, consistenti appunto in codice HTML + CSS + JavaScript.
Strumenti di sviluppo
Altro punto di forza di Firefox OS è rappresentato dagli strumenti di sviluppo: i tool di sviluppo basilari sono già presenti nel browser Firefox: App Manager o Gestore App è integrato in Firefox e permette di base solo il debug remoto. Ma è possibile, e semplice, anche scaricare dei componenti aggiuntivi: l‘estensione Firefox OS Simulator può emulare il sistema mobile direttamente nel PC. Esistono più versioni di tale simulatore, a seconda della versione di Firefox OS: 1.2 o 1.3; va notato che, invece, la v. 1.1 è obsoleta e non permette il debug remoto
Applicazioni
Le app per Firefox OS sono sostanzialmente delle web app, e possono essere suddivise in hosted o packaged. Le app hosted sono normalissime applicazioni web, il classico sito “reincartato”, e hanno un accesso limitato alle API del sistema operativo. Al contrario, le app packaged sono delle vere e proprie applicazioni HTML5 sotto forma di file ZIP cui è permesso l’accesso alle API e all’hardware del sistema. Questo garantisce a Firefox OS una buona dose di versatilità e di sicurezza rispetto a quello che ci gira sopra.
Marketplace
Per concludere, un aspetto da tenere d‘occhio per Firefox OS è rappresentato dal Marketplace di Mozilla: questo store è per i dispositivi mobile basati appunto su Firefox OS, ma anche per il browser Firefox e per i dispositivi Android. Ancora non funziona come gli store più conosciuti e, al momento attuale, non permette ancora la sincronizzazione delle applicazioni tra i vari dispositivi. Per il futuro, può essere ipotizzabile una funzionalità del genere, grazie a Firefox Accounts rilasciato di recente: effettivamente, come appare chiaro, la possibilità di installare e gestire le proprie app in maniera sincronizzata rappresenterebbe sicuramente un punto a favore della diffusione di questo sistema.
Firefox OS: il futuro passa (anche) di qui
Il sistema operativo mobile di Mozilla presenta molti aspetti interessanti e rappresenta il frutto di un progetto pensato in maniera equilibrata e sensata. Quale sarà il suo successo non sta a noi dirlo: sicuramente l’economicità di alcuni dispositivi che lo supportano e le discrete funzionalità fanno presagire una buona adozione, specie nella fetta di mercato attualmente occupata saldamente dai dispositivi di fascia bassa montati con Android. Sicuramente quest’anno ci saprà far capire qualcosa sui margini di adozione di tale promettente tecnologia.
Francesca Tosi – Alberto Mancini, “Intel NDK x86: a few benchmarks”
Il contributo di Francesca e Alberto è stato abbastanza divertente, poiche’ da un lato ha confermato alcune intuizioni di buon senso che tutti i presenti avevano avuto, ma dall’altro lo ha fatto, come in un racconto giallo, narrando la storia un po’ per volta e creando quel minimo necessario di sospensione, prima di scoprire la verità dei fatti all’ultima pagina.
In breve, si è trattato di realizzare dei benchmark per il processore Intel NDK x86 piuttosto diffuso su molti dispositivi Android, come tablet e smartphone, per valutare le sue prestazioni con applicazioni di tipo diverso. In particolare si voleva valutare da un lato come funzionano tre tipologie di app native, dall’altro quali prestazioni hanno invece delle web app analoghe una volta fatte girare sullo stesso device.
Figura 5 – Conviene sempre scrivere app native per i dispositivi Android?
L’idea alla base di questi test è capire se e quanto conviene avere app native oppure applicazioni che girano nel browser. Per le app native, il benchmark è stato realizzato in C, Java, e Intel IPP [8] (Integrated Performance Primitives, una libreria software per applicazioni multimediali e di elaborazione). Per i browser si è trattato di creare codice JavaScript fatto poi girare su Chrome, Firefox e Aurora. Il test consiste in una conversione in scala di grigi di una immagine effettuata per 1000 volte: operazione apparentemente banale, ma che invece in certi contesti (computer vision, realtà aumentata) rappresenta effettivamente qualcosa che viene effettuato.
Dopo aver illustrato i dettagli implementativi, si è passati ai risultati, che in parte erano attendibili ma in parte sono anche un po’ sorprendenti e ci fanno riflettere: in definitiva, come era lecito attendersi, l’applicazione nativa scritta in Java è la più lenta, l’applicazione nativa scritta in C è veloce, quella che impiega la libreria IPP di Intel è la più veloce in assoluto, viste le caratteristiche di accelerazione di tale libreria.
La sorpresa arriva dalle applicazioni web fatte girare nei browser: il primo risultato è che i browser vanno più o meno alla stessa velocità, senza differenze nette; il secondo aspetto, e qui sta la notizia interessante, è che la versione in JavaScript fatta girare nei browser va sorprendentemente veloce quasi quanto la app nativa realizzata in Java.
La conclusione è quindi che scrivere app di questo tipo in Java non ha molto senso poiche’ in JavaScript si va più o meno alla stessa velocità; pertanto quando siano necessarie prestazioni ultraveloci conviene scrivere una app nativa in C, ma per tutto il resto può bastare e avanzare una web app realizzata con il caro vecchio JavaScript.
Fabio Collini “Clean Android Code”
A concludere la conferenza pensa Fabio Collini con un intervento che affronta il tema dell’ottimizzazione del codice Android, in un’ottica di pulizia, chiarezza, formattazione, presentando le pratiche migliori destinate a tale attività e illustrando anche degli strumenti che possono aiutare lo sviluppatore in questa fondamentale opera di snellimento.
Figura 6 – Consigli per ottimizzare il codice Android.
L’intervento è molto tecnico e conviene consultare le slide [9] anche perche’ su questi temi ospiteremo con ogni probabilità su queste pagine un articolo del relatore.
Conclusioni
Si dicono sempre le stesse cose: eventi come questi servono non solo a scoprire o approfondire argomenti, ma anche a mettere in relazioni professionisti e sviluppatori che lavorano su tematiche comuni. E il tema dell’embedded e del mobile è senza dubbio uno di quelli a più rapida innovazione e necessita di episodi di confronto come questi che possono preludere a sviluppi più ampi. Agli organizzatori va il merito di aver realizzato un evento snello e veloce per i partecipanti, ma che, proprio per la sua agilità, rappresenta un buon momento di riflessione carico di spunti.
Riferimenti
[1] Alla pagina dell’evento del GDG Firenze sono disponibili foto e slide
http://www.gdg-firenze.info/lista-eventi-italiani/mobile-embed
[2] Il Parco urbano dell’innovazione (Incubatore Le Murate)
http://www.ssti.it/index.php/chi-siamo/struttura
[3] Arduino,
[4] UDOO, un vero e proprio microcomputer
[5] Raspberry Pi, una scheda programmabile in Linux
[6] EEIncrementalStore
http://www.slideshare.net/slideshow/embed_code/31257757#
[7] Firefox OS
http://www.mozilla.org/it/firefox/os/
[8] Intel Integrated Performance Primitives
http://software.intel.com/en-us/intel-ipp
[9] Clean Android Code: come ottimizzare il codice Android