L’importanza dei database NoSql per l’utilizzo dei Big Data nel mondo connesso dell’Internet of Things



A cura di Ermanno Guardo, il


L’importanza dei database NoSql per l’utilizzo dei Big Data nel mondo connesso dell’Internet of Things

L’Internet of Things (IoT), definita oggi come la quarta rivoluzione industriale, rappresenta una radicale evoluzione di internet in una rete di oggetti interconnessi che raccolgono informazioni dall’ambiente e interagiscono con il mondo fisico per fornire servizi per il trasferimento di informazioni, analisi, applicazioni e comunicazioni. L’IoT, pertanto, ha la caratteristica di generare enormi quantità di dati ad una velocità incredibile, aprendo le porte al fenomeno dei Big Data. Quando si parla di Big Data e si considera una vasta gamma di dispositivi eterogenei non è possibile stabilire né uno schema fisso e nemmeno garantire lo stesso formato e gli stessi tipi di dati, anche tra due dispositivi del medesimo produttore. Nasce pertanto la necessità di come gestire questa enorme mole di informazioni mantenendo tempi di risposta bassi ed elevata disponibilità del servizio.

In questi scenari, i database relazionali non sempre riescono a gestire in maniera ottimale una tale quantità di dati, se non al prezzo di performance limitate e costi elevati.

Per far fronte a queste sfide, la soluzione più adatta sembra provenire dai database non relazionali (NoSQL). Essi forniscono un container schema-less per consentire l’archiviazione di dati eterogenei su larga scala in maniera indipendente da struttura o tipo.

I database NoSQL forniscono il concetto di schema on read”, che ritarda l’utilizzo di uno schema fino a quando i dati non vengono effettivamente utilizzati dall’applicazione. Questo ha enormi implicazioni sulla progettazione sia di applicazioni che di database. In questo modo, infatti, differenti sistemi possono condividere lo stesso pool di dati ed utilizzare un proprio schema in base alle esigenze.

Tuttavia questo non significa che i dati non subiscano alcuna modellazione, ma al fine di qualsiasi tipo di analisi essi dovranno essere organizzati in una struttura che sarà sicuramente adatta ad una evoluzione nel tempo con la possibilità di aggiungere facilmente nuovi campi.

Un’altra caratteristica di rilievo dei database non relazionali è legata alla possibilità di scalare orizzontalmente, aggiungendo semplicemente nuovi server per un’elaborazione parallela senza rischi operativi.

In base alle strutture con cui i dati vengono archiviati è possibile distinguere differenti tipologie di database NoSQL:

Column Store (Cassandra, HBase): i dati vengono memorizzati in colonne, in coppie chiave/valore e sono solitamente utilizzati per archiviare i dati i modo distribuito.

Document Store (MongoDB, Couch DB): progettati per organizzare i dati in documenti, solitamente in formato BSON (Binary JSON) o XML, a cui si accede tramite API per le interrogazioni. Sono molto utilizzati nelle applicazioni web.

Key/Value Store (Membase, Redis): i dati sono memorizzati in una hash table come coppia chiave-valore. Sono indicati per applicazioni con carichi di lavoro molto elevati come social network, videogiochi o sistemi di caching.

Graph Data Store (Neo4J, InfoGrid): l’archiviazione dei dati avviene seguendo un modello a grafo e l’accesso ad archi e nodi avviene attraverso algoritmi di ricerca su grafo. Sono molto utilizzati nei social network.

I database NoSQL non nascono per sostituire quelli relazionali ma come alternativa ad essi perché risolvono alcuni limiti dei precedenti come la scalabilità, offrendo una migliore gestione di grossi volumi di dati, tipico degli scenari IoT in cui le informazioni provenienti dai sensori attivi 24 ore su 24 diventano rilevanti. In altre circostanze i database relazionali rimangono la scelta migliore soprattutto quando si desidera una maggiore affidabilità e sicurezza delle transazioni effettuate o maggiore supporto al verificarsi di un problema.

Non esiste quindi una tipologia migliore dell’altra e pertanto la scelta sarà strettamente legata allo scenario applicativo che si intende sviluppare.

Continua a leggere





UX: dall'operatività all'usabilità



A cura di Marina Masi, il


UX: dall

L’esperienza utente di un applicativo software costituisce uno degli elementi fondamentali per la buona riuscita e la piena soddisfazione del committente o dell’utente finale. Per quanto “sotto la scocca” possano essere implementati i più sofisticati, evoluti e perfettamente funzionanti algoritmi, l’elemento che rimane impresso nella mente dell’utilizzatore è proprio questo: la percezione personale su aspetti quali l’utilità, la semplicità nell’utilizzo e l’efficienza complessiva.

Dal punto di vista dello sviluppo, invece, l’evoluzione di piattaforme “low-code” permette di ottimizzare le risorse, lasciando da parte una serie di complicazioni tecnologiche e permettendo quindi di dedicare una maggiore attenzione agli aspetti di UX (User eXperience). Quando gli sviluppatori lavorano senza alcuna direttiva sulle interfacce utente, le domande a cui sono portati a rispondere sono semplicemente di natura tecnica: “Funziona? Funziona senza errori?”. La prospettiva cambia sostanzialmente quando, oltre ai quesiti riguardanti l’operatività, si aggiungono le questioni di usabilità: “Come funziona quando lo utilizza un utente che ci lavora 100 volte al giorno? E’ intuitivo? E’ fruibile?”.

Nei momenti principali dello sviluppo, quali analisi dei requisiti, programmazione e testing, ci sono specifiche domande che uno sviluppatore, attento alla UX, dovrebbe sempre porsi.

Fase di Analisi dei requisiti

Durante questa fase preliminare, il primo compito è quello di tenere sempre a mente per quale motivo l’utente ha necessità di utilizzare l’applicativo. Questa domanda aiuta lo sviluppatore contemporaneamente a rispettare le specifiche tecniche e a tenere presente lo scopo che l’utente finale deve raggiungere. Ad esempio, quando si crea una vista su un database da 100 colonne, nel decidere quale sottoinsieme di queste ultime dovrà essere visualizzato, sarebbe interessante chiedersi: cosa sta cercando l’utente? Perché dovrebbe scorrere tutta la lista? Cosa lo potrebbe aiutare ad accelerare il processo di ricerca?

Un aspetto da non trascurare rispetto a quanto affermato, è quello relativo alla cadenza di utilizzo. Se l’applicazione è mirata ad un utilizzo frequente, bisogna tener conto del fatto che l’utente apprenderà presto ad utilizzarlo in maniera corretta. In questo caso ci si aspetterà quindi una elevata efficienza ed una serie di accorgimenti (utilizzo di scorciatoie da tastiera, operazioni di massa sui dati) volti a ridurre eventuali colli di bottiglia (si pensi ad una applicazione B2B, nella quale degli agenti devono riempire form di ordini per centinaia di clienti e prodotti).

Al contrario, quando l’applicazione deve essere orientata all’utilizzo da parte di utenti poco esperti o sporadici, bisogna puntare su semplicità ed intuitività, anche al costo di sacrificare l’efficienza. Ad esempio, in un’e-commerce, conviene guidare l’utilizzatore con una serie di passaggi obbligati.

Fase di Sviluppo

Durante la programmazione è fondamentale osservare i seguenti due principi: ordine e coerenza. Una interfaccia utente con un layout povero, con elementi male allineati e confusionario, trasmette all’utente una sensazione di sfiducia, abbassando la percezione della qualità del prodotto, indipendentemente dalle “magie” che avvengono dietro le quinte. Per migliorare la consistenza è necessario assicurarsi che, in tutti i punti dell’applicativo, vengano usate le stesse convenzioni (chiamare le stesse cose con lo stesso nome) e che elementi con la stessa funzionalità vengano posizionati sempre allo stesso modo. Per avere un’idea chiara del “look-and-feel” che l’applicativo avrà alla fine, è importante inoltre che lo sviluppatore abbandoni la cattiva abitudine di popolare, al fine dei test, i campi con dati casuali e del tutto non rappresentativi (“test1”, “test2”, “xxxxxx”, …).

Fase di Testing

Se privo di informazioni sul contesto, lo sviluppatore tende a programmare per se stesso, allontanandosi dal profilo tipico dell’utente. Lo scenario ideale sarebbe quello di condurre dei test di usabilità ma, molto spesso è sufficiente, almeno in una fase iniziale, far provare l’esperienza del software ad un utente, senza guidarlo in alcuna maniera attraverso i passaggi che deve compiere. Questa semplice manovra può portare ad una visione più approfondita delle problematiche o, addirittura, ad cambio del paradigma utilizzato.

Gli sviluppatori a volte peccano di attenzione nei confronti di questi aspetti a cui sono meno “dedicati” per formazione e vocazione intrinseca. Bisogna invece comprendere che la buona riuscita di prodotto è affidata per una grossissima percentuale a quanto intuitiva, veloce ed agevole è l’esperienza utente. Questa semplice “check list” può fornire un piccolo spunto di riflessione volto ad porre maggiore attenzione su una disciplina dietro cui si cela una vera e propria scienza (fatta di criteri e regole ben precise) ma che troppo spesso viene trascurata e lasciata al caso. E’ molto importante guidare gli sviluppatori a migliorare la qualità dei loro prodotti, riducendo l’impatto sull’utente finale in termini di curve di apprendimento e riuscire in questo modo ad evitare e/o arginare eventuali richieste di modifiche ed adattamenti futuri.

 

[Fonte UX Magazine – The Developer’s UX Checklist, Gonçalo Veiga]

 

Continua a leggere





Mobile testing: come migliorare la tua app



A cura di Martina Manuello, il


Mobile testing: come migliorare la tua app

Negli ultimi anni si è assistito ad una crescita esponenziale di applicazioni, spesso con le stesse funzionalità e gli stessi servizi.

A questo punto la domanda è: perché scegliere un’applicazione piuttosto che un’altra?

Sarà capitato a tutti di aver scaricato un’applicazione sullo Smartphone e di averla eliminata dopo un paio di minuti. Gli utenti hanno ormai aspettative altissime sulla qualità e velocità delle app. Una brutta GUI, troppa confusione nell’UX o una serie di chiamate API interminabili sono i principali motivi di frustrazione che portano l’utente a rimuoverla rapidamente dal proprio dispositivo, impedendole di conseguenza la possibilità di progredire sul mercato. Il successo o l’insuccesso di un’app è misurata non solo dal numero di download e dai commenti (positivi o negativi), ma soprattutto dal “passaparola”. Una cattiva opinione dell’app, infatti, può divulgarsi molto velocemente diminuendo la possibilità di competizione con altri prodotti simili.

Ma come è possibile garantire il successo di un’app?

L’attività di testing è un ottimo strumento che permette di migliorare il software. È finalizzata a garantire il massimo raggiungimento degli obiettivi per cui le app sono state create e di conseguenza la piena soddisfazione dell’utente al suo utilizzo.

I test vengono effettuati per valutare carenze di correttezza, completezza e affidabilità delle componenti.

Esistono diverse tipologie di test, ma ci concentreremo solamente su alcuni: quelli riguardanti la funzionalità, l’usabilità e le prestazioni.

Il test funzionale assicura che l’applicazione funzioni secondo le esigenze e verifica se sia stata disegnata e implementata secondo ciò che l’utente si aspetta, eliminando tutti i possibili bug e difetti. Si preoccupa di cosa fa il software piuttosto di come lo fa.

Il test sull’usabilità valuta la facilità di reperire contenuti e funzionalità all’interno dell’applicazione. Obiettivo dell'usabilità è quello di rendere la tecnologia sottostante trasparente all'utente, il quale deve potersi concentrare esclusivamente sul compito, anziché sull’interfaccia. Un’app può contenere tante funzionalità, servizi e risorse utili, ma se queste non sono organizzate secondo le aspettative e i bisogni dei destinatari, possono addirittura essere introvabili, e di conseguenza inutilizzate. È un tipo di test che non deve essere messo in atto solo dopo il completamento dell’applicazione, ma già dalle prime fasi della progettazione.

Il test sulle prestazioni controlla il comportamento dell’applicazione in determinate condizioni, come ad esempio la batteria scarica, la scarsa copertura di rete o la poca memoria disponibile. Le prestazioni possono essere influenzate sia da lato server (nel caso in cui l’applicazione abbia anche questa componente) che da lato client; per tale motivo è necessario che la verifica venga effettuata per controllare entrambi.

I test si distinguono ulteriormente tra quelli manuali e quelli automatici. Il test manuale è realizzato da una persona fisica che analizza attentamente il funzionamento dell’applicazione, provando differenti combinazioni di utilizzo e confrontando il risultato con il comportamento atteso. Il test automatico, tramite l’assistenza di particolari software, intercetta i bug automatizzando circa l’80% del test. È un approccio molto più veloce ed efficiente rispetto a quello manuale, utile soprattutto se si sta testando un’applicazione di grandi dimensioni.

L’operazione di test nelle applicazioni mobile può essere talvolta complessa, soprattutto per la grande varietà di dispositivi che dovranno accoglierla. L’incremento di produzione di nuovi device sta portando ad una crescente frammentazione del sistema: ci si trova a far fronte a dispositivi che possiedono periodicamente caratteristiche hardware, prestazioni e OS differenti. Attualmente infatti esistono più di 24.000 modelli solo sulla piattaforma Android. È quindi fondamentale testare l’app sul più alto numero possibile di device concentrandosi sui modelli più popolari.

Solitamente prima di rendere pubblica l’app si realizzano dei piccoli prototipi durante la fase di sviluppo in modo fa avere rapidamente dei riscontri e individuare eventuali anomalie e correggerle subito, in quanto sarebbe troppo dispendioso farlo solo alla fine dell’implementazione.

È impossibile dunque ignorare l’importanza della fase di test ed è bene considerarlo come elemento chiave per il successo di un’app mobile.

 

Continua a leggere





WEB APP OFFLINE



A cura di Marina Masi, il


WEB APP OFFLINE

Oggi, nell'era di Internet, comprare un'automobile, una borsa, un paio di pantaloni è un'operazione oltremodo semplice ed “a portata di click”, pagare un bollettino postale non richiede necessariamente ore di interminabile fila allo sportello, conoscere nuovi amici all'altro capo del mondo ed interagire con loro è quanto mai semplice ed immediato. Anche il concetto di Web App ha rivoluzionato il modo di gestire operazioni e processi altrimenti più lenti e molto più complessi, garantendo accessibilità da qualunque punto del mondo e con qualsiasi client si abbia a portata di mano, a patto ovviamente di poter usufruire di una connessione ad Internet.

Questa "condicio sine qua non" potrebbe a prima vista non apparire un grosso problema visto che siamo ormai perennemente on line, grazie anche alle sempre più diffuse connessioni a pacchetto. Nella pratica è però non inusuale ritrovarsi nelle condizioni in cui una mancanza di campo e di relativa connessione (soprattutto quando ci colleghiamo attraverso dispositivi mobili) possa metterci di fatto nell'impossibilità di utilizzare le nostre web app. Proprio per ovviare a questo tipo di problemi, si sta sempre più diffondendo l'idea di fare in modo che le applicazioni web siano in grado di funzionare anche in modalità offline. “Web” ed “online” sono due parole molto strettamente correlate l'una all'altra, se non addirittura sinonime.

Come è possibile dunque parlare di tecnologie web offline?

Innanzitutto è importante fare un distinguo tra applicazioni completamente offline ed applicazioni “online/offline”. Nel primo caso ci troviamo di fronte a degli applicativi che girano all'interno di un browser senza mai connettersi ad internet (ma rappresentano una rarità). Nella stragrande maggioranza dei casi, l'approccio utilizzato è infatti quello di fare in modo di conservare una copia locale dei dati che consenta all'applicazione di girare in maniera indipendente anche in assenza di connessione per periodi più o meno lunghi, per poi “sincronizzarsi” ed aggiornare i dati, non appena c'è la possibilità di entrare nuovamente in rete.

Le applicazioni online/offline pagano certamente il prezzo di una maggiore complessità implementativa ed è quindi importante chiedersi a priori se una scelta di questo tipo sia giustificata e per quali motivi.

HTML5 fornisce una serie di features che rendono il web offline una realtà: l'offline caching e l'offline storage (o “client-side” storage) innanzitutto. Gli sviluppatori possono utilizzare l'application cache (AppCache) per specificare le risorse che il browser deve memorizzare in cache e renderle poi disponibili all'eventuale utente offline. L'utilizzo dell'AppCache fornisce il beneficio di garantire che l'esperienza di navigazione possa continuare anche in modalità offline con prestazioni migliori (poiché le pagine sono memorizzate in locale e  vengono caricate con maggiore velocità) e notevole riduzione del carico sul server. Per abilitare l'application cache, è necessario includere l'attributo manifest nell'elemento <html> delle pagine dell'applicazione, come mostrato nella figura seguente:

 

L'attributo manifest fa riferimento ad un cache manifest all'interno del quale sono elencate tutte le pagine che il browser deve memorizzare. L'utilizzo di questo tipo di cache va a modificare il flusso del normale caricamento dei documenti: il documento e le risorse ad esso associate vengono infatti caricate direttamente dalla cache, senza accedere in rete. Contemporaneamente però il browser controlla se il cache manifest sul server è stato aggiornato ed in questo caso scarica la nuova versione e le risorse in esso elencate. Ma tutto questo potrebbe non essere sufficiente. HTML5 ha di fatto introdotto il concetto di “offline storage”, ovvero la possibilità di memorizzare e gestire le informazioni direttamente sul dispositivo dell'utente, con la possibilità di recuperare quanto salvato quando e come si desidera. Le “Storage APIs” messe a disposizione dai moderni browser sono di gran lunga superiori rispetto alle tecniche utilizzate in passato (potrebbero esserci però dei problemi in termini di retrocompatibilità per vecchi browser).

Tra le Web APIs più utilizzate abbiamo:

  • Web Storage: fornisce semplicemente un mapping di tipo key/value (localStorage[“name”] = username;).
  • Web SQL Database: Fornisce tutto il potere (e per contro anche la complessità) di un database relazionale SQL.
  • IndexedDB: E' un ibrido tra il Web Storage ed il Web SQL Database. Come il Web Storage è un mapping di tipo chiave/valore ma supporta gli indici come i db relazionali e quindi introduce maggiore velocità.
  • File Access: E' una API per la lettura di file Javascript. Dato un set di file, è possibile leggerne il contenuto o referenziarlo come un URL.

E' importante dunque comprendere come l'app caching e l'offline storage lavorino in maniera complementare rispettivamente per memorizzare le pagine html e le risorse da queste utilizzate (css, javascript, immagini ..) e per mantenere i dati da queste visualizzate (all'interno di uno storage locale), aprendo nuove possibilità e scenari che, per quanto più complessi, danno vita a soluzioni di gran lunga più funzionali e performanti.

 

Continua a leggere





Le principali evoluzioni delle interfacce grafiche negli ultimi anni



A cura di Martina Manuello, il


Le principali evoluzioni delle interfacce grafiche negli ultimi anni

Chi sviluppa o propone nuove interfacce utente deve tenere conto delle specificità hardware dei dispositivi su cui verranno utilizzate, ma soprattutto conoscere e capire le esigenze dei clienti. Nel mercato tecnologico vengono immessi continuamente nuove tipologie di dispositivi informatici interattivi, talvolta con caratteristiche comuni, ed è importante essere capaci di costruire interfacce capaci di generare user experience tali da fare la differenza nell’acquisto di un dispositivo.

Ma iniziamo ad analizzare a piccoli passi le evoluzioni dell’UI e delle tendenze più importanti degli ultimi anni.

Con il lancio del primo iPhone nel 2008, la Apple ebbe la necessità creare un’interfaccia grafica estremamente intuitiva. Il dispositivo infatti era completamente nuovo per chiunque e doveva rapportarsi al mondo reale in modo da essere compreso e usato da tutti. L’idea era quella di riprodurre quasi fedelmente gli oggetti ben conosciuti nella realtà a partire dai materiali di cui sono fatti (pelle, vetro, legno, carta) e imprimergli consistenza e solidità (spessore, rotondità, profondità, volume), in modo tale che l’utente potesse familiarizzare velocemente con le interfacce del mondo digitale. Questo tipo di approccio prende il nome di scheuomorfismo.

In ambito informatico, sono scheumorfici tutti quegli elementi che vanno ad emulare il reale funzionamento o l’aspetto di un oggetto fisico. Centinaia sono gli esempi a riguardo, basti pensare ai calendari solitamente rappresentati con le fattezze di un taccuino, o le app per prendere appunti con una grafica che rimanda ai post-it o ad una pagina di un’agenda, o un qualsiasi software di lettura in cui viene riprodotto il libro e si simula il gesto di sfogliare le pagine: il passaggio tra una pagina e l’altra è reso così realistico da far percepire il dispositivo come se fosse un vero e proprio libro. Alle volte vengono anche inseriti effetti sonori. Gli scheumorfismi, infatti, riguardano non solo la modalità di interazione e l’aspetto visivo, ma anche la percezione uditiva. Pensiamo ad esempio al rumore dello scatto quando uno smartphone fa una foto.

Tra il 2008 e il 2012 nel mondo della grafica c’è stato un proliferare quasi incontrollato dello Skeumorphic Design sulla scia del modello Apple, rivelandosi decisamente funzionale in quanto rendeva la fruizione del sistema molto più semplice e intuitiva. Se pur in quegli anni fu una vera e propria rivoluzione, con il tempo lo si accusò di essere troppo distante dalle nuove tendenze visuali e con inutili ornamentalismi, oltre che estremamente pesante e lento nel caricamento. Era diventato necessario ottimizzare il design delle interfacce in relazione alle risorse. Si soppiantò questo tipo di tendenza e si adottò una nuova filosofia grafica, il Flat Design.

Se l’avvento dello scheumorfismo si può ricollegare ad Apple, quello del Flat Design è sicuramente attribuibile al rebranding di Microsoft dal 2010 in poi. Proprio per differenziarsi dal design della Apple, Microsoft utilizzò uno stile completamente personalizzato basato sul minimalismo e la rappresentazione degli oggetti tramite forme piatte e monocolore organizzate in griglie: il Metro style (quello che vediamo da Windows 8 in poi e su Windows Phone). I vezzi grafici, come ombre e sfumature, vennero ridotti al minimo facendo sparire qualsiasi cosa richiamasse alla tridimensionalità e alla matericità dell’elemento grafico.

Questo stile si differenzia dal precedente proprio per la tendenza a rompere ogni legame con il mondo reale. Colori primari, riquadri perfetti con transazioni secche e immediate, tipografia studiata con font di grande impatto visivo e lettering elaborati sono i pilastri dell’idea Microsoft. Inoltre, la sua semplicità lo rende molto più adattabile, leggero e perfetto per il mobile. Mentre era in atto la grande contesa sulla scena della UI fra le case Apple e Microsoft, rispettivamente con il loro Skeuomorphic e Flat, Google si è inserita silenziosamente presentando il 25 giugno 2014 durante la Google I/O un nuovo design che sintetizza i precedenti prendendo i migliori aspetti da ciascuno e creando qualcosa di estremamente innovativo: Il Material Design.

L’idea di base è quella di rendere “materiali” gli elementi grafici, che non sono più piatti e senza ombre come nel Flat Design, ma assumono uno spessore e una fisicità nello spazio simile al realismo dello Scheumorfismo. Le view acquisiscono profondità e realismo in quanto tutti gli elementi vengono posizionati su diversi layer (uno sopra l’altro) dando a ciascuno il giusto collocamento in base alla sua importanza. In questo modo l’utente focalizza la sua attenzione solo sugli elementi in primo piano, quali pulsanti o il menu di navigazione.

Anche le animazioni sono fortemente studiate. Sono sensate e coerenti, la conseguenza di un gesto, e quindi di un’intenzione dell’utente. Il movimento delle forme geometriche ne definisce le caratteristiche fisiche, ci fa comprendere il peso, la rigidità e la flessibilità di un oggetto. Anche in questo caso torna la metafora del materiale: il movimento deve richiamare il comportamento degli oggetti fisici nel mondo reale.

Il Material Design è destinato ormai a rivoluzionare l’aspetto grafico dei mondi web e mobile. Ha già contagiato il restyle di alcune app e siti web. Android ha addirittura sviluppato un sistema interamente basato su questo nuovo design con Lollipop. Ma questo è solo l’inizio di un evidente successo che porterà ad un totale rinnovamento.

 

Continua a leggere





 1