Lo sviluppo di Apps in Logica Informatica

Pionieri?

Forse non tutti sanno che Logica Informatica è stata una delle prime società informatiche italiane ad interessarsi allo sviluppo di applicazioni per smartphone. Già nel 2006, assorbendo la società IS&O, acquisiva il progetto PocketLine, che prevedeva una modalità di comunicazione avanzata tra sistemi centrali “tradizionali” e smartphone dotati di un sistema operativo appena accettabile. A quel tempo il Symbian della Nokia e il Blackberry erano più o meno gli unici sistemi su cui si poteva pensare di sviluppare un’applicazione “utile”. PocketLine era però in grado di usare i sistemi primitivi di messaggistica (SMS, MMS) per rendere possibile ad un’azienda la condivisione di informazioni tra i sistemi centrali e dispositivi remoti, in modo generalizzato ed estensibile.

PocketLine rimase a livello di prototipo e non divenne mai un prodotto commerciale; in effetti fu una fortuna non aver investito ulteriori energie nel progetto, visto che già nel 2007 fu presentato al mondo il primo iPhone e  l’anno dopo divenne disponibile l’Apple Developer Program per iOs che avviò l’era dello sviluppo di App.  Ci si rese conto subito che paragonare una tecnologia pensata per il più avanzato dei Nokia con il primo iPhone era come confrontare un’Ape Piaggio con una Bugatti. L’iPhone avrebbe portato rapidamente all’estinzione dei dinosauri.

Saltiamo sul treno

Ovviamente non siamo rimasti a guardare. Le nostre prime sperimentazione mostravano che l’iPhone aveva capacità quasi da fantascienza: era  possibile realizzare praticamente qualsiasi cosa (figuriamoci adesso). Nei primi mesi di vita dell’Apple Store erano state pubblicate migliaia di App, molte delle quali potremmo definire “inguardabili”; c’era comunque l’impressione che le possibilità creative fossero illimitate. Inoltre, solo in minuscola percentuale si trattava di App provenienti da sviluppatori italiani e in proporzioni ancora più infinitesimali da Società italiane.

Logica Informatica, per rispettare la sua natura (e perché era più facile) decise di cimentarsi nella creazioni di applicazioni “utili”, in particolare di applicazioni che potremmo definire “di consultazione”. Nel Dicembre 2008 pubblicò la prima: Ipse Dixit, dizionario di citazioni, in quattro lingue, seguita nei mesi successivi dai Codici (Civile, Penale ecc.), da FarmaciaPlus (prontuario dei farmaci), Comuni d’Italia e via dicendo. A tutt’oggi abbiamo realizzato più di 30 App, sia per il mercato “consumer” diretto (cioè vendendole come Logica Informatica), sia per conto terzi (ad es, Maggioli Editore, Guardia di Finanza, ecc.), sia per utilizzo interno di  nostri clienti. Per alcune di queste App ci sarebbe molto da raccontare, ma non lo farò questa volta. Parlerò invece della evoluzione “tecnologica” che ha subìto questa area di sviluppo in Logica Informatica.

Android, Windows e gli altri

Tanto per cominciare, dopo l’iPhone, il quadro si complica: nel 2009 compaiono i primi telefoni dotati di sistema Android, e si vede qualche miglioramento degli smartphone basati su Windows; si affacciano sul mercato anche altri possibili sistemi operativi (Tizen, Firefox,…): a tutt’oggi risultano però semplici esperimenti non riusciti.

Logica Informatica decide di tentare, senza fretta, il “porting” di FarmaciaPlus, la sua App più importante, su Android e Windows. L’impresa riuscirà con fatica, su Android, solo nel 2011, mentre le limitazioni intrinseche di Windows la renderanno impossibile fino all’uscita di Windows Phone 8.1 (Windows CE non poteva gestire un database più grande di pochi megabytes). Per quanto riguarda Windows, l’attenzione dedicatagli si rivela tempo perso, visto che nel 2016 i dati di mercato cominciano ad indicare l’inarrestabile declino della quota di mercato già minima di Windows Phone; il porting di Farmacia Plus su Windows Phone non verrà quindi mai completato. Riposi in pace.

Sviluppo cross-platform

Fino al 2012, lo sviluppo delle App di Logica Informatica era avvenuto con gli strumenti nativi di ciascuna piattaforma, cioè XCode / Objective C per iPhone, Android Sdk / Java per la piattaforma Android e Visual Studio / C# per Windows Phone. Si tratta di strumenti completamente diversi uno dall’altro, come del resto i sottostanti sistemi operativi, e il costo dello sviluppo di un’applicazione complessa per tutte e tre le piattaforme risulta tanto elevato da costituire un problema. In particolare, Logica deve risolvere questo problema nel momento in cui viene ingaggiata da Clienti per la realizzazione di App che devono presentarsi identiche su iOs e Android; la competizione con gli altri possibili concorrenti costringe a trovare e adottare soluzioni tecniche che consentano il “write once, deploy many”, cioè scrivere un solo codice sorgente e poterlo poi “compilare” per le diverse piattaforme.

Il problema si presenta in effetti fin dal 2010, ma diviene essenziale proporre una soluzione solo nel 2012, per la realizzazione di un’App per le ricevitorie Sisal. A quel punto, si esplorano le varie tecnologie disponibili e si sceglie la nostra prima piattaforma per lo sviluppo cross-platform su dispositivi mobili: Titanium Appcelerator. Comincia quindi nel 2012 una strada che porterà ad altri cambi di piattaforma e che sicuramente non è ancora conclusa: ecco qualche dettaglio di questa storia.

Titanium

Titanium Appcelerator (oggi semplicemente Appcelerator) è uno strumento che permette di usare il linguaggio Javascript per realizzare applicazioni “sostanzialmente” native: in effetti, con un’architettura piuttosto ingegnosa, Appcelerator presenta gli oggetti nativi della piattaforma (cioè tutte le componenti visuali e non visuali disponibili su iOs e Android) attraverso dei “wrappers” javascript. Quindi si programma in Javascript, ma in effetti ogni view, widget, file, database, connessione ecc. è realizzata dall’oggetto “nativo” sottostante.

Il risultato è che non solo l’aspetto visuale di un’App realizzata con Appcelerator è uguale a quello di una App nativa, ma anche le prestazioni dell’App sono molto simili, anche se leggermente inferiori, a causa dell’ overhead che il passaggio attraverso Javascript produce rispetto ad una soluzione realmente nativa. Inoltre le App sviluppate con Titanium sono considerevolmente più voluminose del loro equivalente nativo, a causa dei componenti che sono presenti necessariamente in ciascuna di esse, in particolare un interprete Javascript e tutte le interfacce di tra oggetti Javascript e oggetti nativi.

L’esperienza Titanium dura 2-3 anni e interessa lo sviluppo di varie App per terze parti (in particolare, iGdF); progressivamente, la Logica Informatica si orienta però verso un abbandono della piattaforma, sia perché non supporta Windows (problema che si riteneva ancora rilevante fino a un anno fa) sia perché il sistema di licensing del prodotto e il ritmo degli aggiornamenti di release non convincono e creano qualche problema. Inoltre, emergono anche problemi squisitamente tecnici nello sviluppo: pur raggiungendo il risultato di mantenere un solo codice sorgente per tutte le piattaforme,  ottenere i risultati visuali e funzionali desiderati risulta piuttosto faticoso, proprio a causa delle modalità sofisticate con cui la piattaforma Titanium nasconde gli oggetti nativi dietro interfacce Javascript.

Sencha Touch

Intorno al 2014, si decide di cambiare approccio e di orientarsi verso lo sviluppo di App di tipo HTML 5 /JS / CSS 3: si tratta cioè di sviluppare l’App come fosse un sito Web (in effetti come una “single-page application“, usando HTML e Javascript) per poi compilarla in modo che venga eseguita all’interno di una “web view” nativa della piattaforma. Il “compilatore” è fornito dal prodotto open-source Cordova della Apache Foundation, che è utilizzato universalmente da tutte le piattaforme di sviluppo di questo tipo.

Si studia un po’ la situazione del mercato e, tra le molte scelte disponibili, si opta per Sencha Touch: il motivo è che Logica Informatica già utilizza dal 2011  Sencha ExtJs per la realizzazione dei suoi prodotti Web-based (in particolare DCSys e Lossis) e Sencha Touch è una versione dello stesso prodotto, adattata alle necessità dei dispositivi mobili. Lo sviluppo con Sencha Touch richiede l’utilizzo di Sencha Architect, prodotto che consente di comporre in maniera visuale il layout delle pagine e di manipolare componenti e proprietà in modo guidato.

Con Sencha Touch si realizzano alcune applicazioni, tra cui iMinerva, per la Scuola Superiore di Polizia Tributaria, e l’ultima versione di iGdf. Nonostante gli aspetti positivi della scelta, con il tempo si comincia a considerarla non sostenibile, più o meno per gli stessi motivi di Titanium: problemi strettamente tecnici (la piattaforma è così sofisticata che ottenere i risultati desiderati su tutti i modelli di smartphone e tablet risulta piuttosto complicato) e ragioni strategiche: il sistema di licensing e il frequente passaggio di release del prodotto rendono rapidamente obsoleto quanto realizzato; ad ogni evoluzione richiesta dai Clienti si deve affrontare il costo della migrazione delle App all’ultima versione della piattaforma.

L’obiettivo strategico rimane quello di usare un approccio basato su HTML, ma si comincia a ragionare su una forma di downgrade della piattaforma, cioè il ritorno ad un modello di sviluppo che aggiunga ai componenti fondamentali la quantità minima possibile di sovrastrutture. Questo ha anche una precisa corrispondenza nella qualità del codice HTML e Javascript utilizzato: quando si sviluppa con una piattaforma come Sencha Touch, la struttura HTML costruita dalla piattaforma è talmente complicata che risulta difficile controllarne i comportamenti (ad es. affinare dimensioni e posizioni per adattarsi a diversi formati dello schermo).

Xamarin

Mentre si comincia a sperimentare la prossima evoluzione della soluzione HTML, il cliente Poste Italiane mette in condizioni Logica Informatica di sperimentare Xamarin, piattaforma di proprietà della Microsoft, per realizzare il prototipo di una nuova App di uso interno.

Xamarin si basa sullo sviluppo con C# (in Visual Studio) per creare applicazioni cross-platform  native: il risultato cioè viene convertito effettivamente in codice compilato per Windows Phone, Android, iOs. In questo caso, il fatto che la piattaforma provenga da Microsoft, società che sta chiaramente fallendo il suo tentativo di penetrazione nel mercato degli smartphone, solleva qualche dubbio sull’opportunità della scelta fatta dal Cliente, ma comunque consente di esaminare anche questa possibile strada.

L’impressione conclusiva ricavata dall’esperienza su Xamarin è che si tratti di un sistema ancora immaturo, risultante da un collage di componenti non ancora perfettamente integrati, che presenta gli stessi problemi di ogni piattaforma “proprietaria” provata fino ad oggi: non è cioè facile riuscire a costringere lo strumento a produrre i risultati voluti, su ogni tipo di dispositivo.

L’ultimo passo?

Nel corso del 2015, Logica Informatica comincia a sperimentare la soluzione identificata, quella cioè basata su un utilizzo “a basso livello” di HTML, Javascript e CSS, associato ad Apache Cordova per la compilazione dei pacchetti finali. Il risultato finale della sperimentazione è applicato a FarmaCross (pubblicata su Apple Store nel febbraio 2016), versione riveduta e corretta di FarmaciaPlus, della quale parlerò in un altro articolo.

La scelta del metodo di sviluppo si basa su alcuni principi, ma lascia una notevole libertà nei particolari:

  • clean html: l’HTML che costituisce le varie pagine dell’App deve essere privo per quanto possibile di sovrastrutture generate da strumenti di varia natura (in FarmaCross, l’HTML è stato costruito a mano).
  • si usano jQuery e componenti aggiuntivi basati su jQuery (ne esistono in numero illimitato: jQueryUI, jEasyUI, jQuery Mobile, ecc.)
  • possono essere usati componenti di ausilio per il layout (ad es. bootstrap)

La scelta effettuata ha consentito di ottenere alcuni risultati eccezionalmente utili:

  1. lo sviluppo avviene utilizzando il browser come sistema di debug (in particolare, il debugger Chrome in modalità device)
  2. non è necessario acquisire altri skill al di fuori di quelli utili alla realizzazione di una moderna applicazione Web
  3. l’App può essere costruita per essere aggiornabile “on the fly”, cioè può ricevere aggiornamenti e correzioni senza bisogno di essere ripubblicata (da server si possono acquisire porzioni di HTML e scripts che vanno automaticamente a sostituire le parti corrispondenti del pacchetto)

In sostanza, questo tipo di metodologia di sviluppo rigetta gran parte delle nuove strumentazioni nate specificatamente per lo sviluppo cross-platform, ma utilizza fortemente tutte le innovazioni nate per il web 2.0, a partire da HTML5 e CSS3. Componente fondamentale rimane però Apache Cordova, il vero asso nella manica dello sviluppatore.

L’esperienza con FarmaCross ha consentito di trarre alcune importanti conclusioni:

  • è il sistema di sviluppo più semplice e maneggevole tra quelli utilizzati finora
  • la quantità di codice comune a tutte le piattaforme è praticamente il 100%
  • le App sono più lente delle corrispondenti App native

Quest’ultimo punto è ovviamente importante: intendiamoci,  non parliamo di giochi interattivi, né di realtà virtuale, né di applicazioni stile Whatsapp. Nel nostro caso si tratta di applicazioni  principalmente di consultazione, dotate di un database locale, di modalità di colloquio con un server e di qualche funzione di notifica; questo restringe il numero di possibili problemi di prestazioni, ma si è dovuto comunque tenerne conto nel progettare la user experience. 

Il caso più tipico è la presentazione di liste a scorrimento: in un’applicazione iPhone nativa (come ad es. la nostra Comuni d’Italia), una lista può tranquillamente contenere migliaia di righe senza che l’utente percepisca il minimo rallentamento. Una lista di migliaia di righe realizzata con HTML su uno smartphone è semplicemente una cosa da evitare, a causa del tempo necessario al browser per effettuare il rendering della pagina.

Il futuro

Mentre Logica Informatica si ingegna, il settore delle App continua ad essere in piena effervescenza, anche se le statistiche indicano che solo una minima parte delle App realizzate (in tutto il mondo più di 2 milioni) producano introiti sufficienti a mantenerle. In quest’ottica, diventa essenziale avere strumenti migliori per ridurre tempi e costi di sviluppo e ci si aspetta quindi un crescente numero di proposte in tal senso.

Già oggi esistono una serie di possibilità che non abbiamo ancora esplorato a fondo:

  • application makers: si tratta di strumenti o più spesso siti che permettono di costruire un’App in modo guidato, usando modelli e componenti predefiniti. Spesso viene proposto un canone, che prevede anche servizi di monitoraggio. Il numero di offerenti è enorme (vedi ad es. https://www.websitetooltester.com/en/blog/app-makers) ed è oggettivamente difficile capire quanto siano efficaci senza sperimentarli sul serio.
  • piattaforme di sviluppo complete: in particolare Google Firebase e altre (Syncano, Telerik, Intel), propongono ciascuna un proprio ecosistema che si “sposa” o si rigetta in toto.
  • altri framework basati su Javascript: due dei più diffusi sono Ionic e React Native; quest’ultimo presenta qualche aspetto innovativo interessante.

Secondo la mia personale opinione, la strada maestra dovrebbe comunque basarsi sulle stesse tecnologie del Web 2.0, cioè HTML, CSS e Javascript, per motivi pratici e anche di principio: si tratta in fondo solo di due canali lievemente diversi che portano agli stessi contenuti e servizi.

Con l’evolvere delle capacità degli smartphone, il fattore velocità (lentezza) diventerà meno rilevante, così come tenderanno a sparire le differenze tra i diversi “motori” di rendering e interpreti Javascript. In prospettiva, mi aspetto che gli stessi “motori” siano via via incorporati ad un livello sempre più vicino al “core” del sistema operativo e all’ hardware, portando di fatto ad una convergenza tra programmazione Javascript e programmazione nativa.