Archives for giugno 2016

giugno 30, 2016 - No Comments!

Quando usare React Native? Una nostra analisi

react native

React Native è un framework per lo sviluppo di applicazioni su piattaforme native che permette di unificare l'esperienza di sviluppo su diversi sistemi operativi.

React Native è un progetto basato su ReactJS, che adotta un nuovo approccio allo sviluppo Web.

Attualmente è disponibile per lo sviluppo di applicazioni iOS e Android, ma a breve dovrebbe essere rilasciata la compatibilità con la piattaforma Windows.

Le peculiarità

I Componenti

ReactJS si basa sul concetto di componente. Il Componente è qualcosa che ha uno stato, che può accettare delle proprietà e che ha un suo ciclo di vita.

Questo approccio di sviluppo "atomico" risulta perfetto per effettuare Unit Test o per creare componenti più complessi includendone altri più semplici.

Approccio funzionale e Virtual-DOM di React

I React Components possono essere visti come funzioni pure e idempotenti, infatti l'interfaccia di un componente viene espressa chiamando il suo metodo render() che può accedere allo stato corrente ed alle proprietà.

Il flusso di aggiornamento di ogni componente avviene in questo modo:

  1. La gestione del Virtual DomSi esegue il metodo render() che riceve dei dati in input e restituisce un albero di contenuti da visualizzare (Virtual-DOM).
  2. Il metodo render() viene eseguito ad ogni modifica dei dati e genera un nuovo Virtual-DOM.
  3. React calcola le differenze tra il Virtual-DOM corrente e quello relativo allo stato precedente del componente ed applica le minime operazioni necessarie per avere il DOM reale aggiornato.

Questo approccio ha le caratteristiche della programmazione funzionale, infatti può essere visto come una funzione che prende in input 2 DOM e restituisce una lista di operazioni da eseguire sul DOM Reale per applicare in modo corretto i cambiamenti necessari.

Nessuna WebView

La WebView è uno strumento basato sul motore Webkit che permette di renderizzare correttamente pagine web formate da Javascript, Html e Css.

Molti framework ne fanno uso perchè permette di unificare lo sviluppo di una app che può quindi essere pubblicata sia su Apple Store che su Play Store, senza grandi modifiche.

L'aspetto negativo di questo strumento è che ha bisogno di molte risorse, quindi le applicazioni risultano meno performanti rispetto a quelle sviluppate con una UI nativa.

A differenza delle classiche WebApp, React Native mappa ogni suo componente attraverso l'interfaccia utente nativa della piattaforma iOS o Android.

L'approccio iniziale

Per un primo approccio a React Native può essere di aiuto avvalersi di un progetto ben configurato con un'impostazione modulare e Test Friendly per lo sviluppo.

PepporoniUn progetto interessante è Pepperoni: un modello open source che include una serie ditool già pronti all'uso.
Fornisce uno scaffolding sempre aggiornato di React Native, una struttura modulare ed è predisposto per effettuare Unit Testing con Mocha e Enzyme.

Mocha è uno strumento per il testing unitario di Javascript solitamente associato ad una potente libreria Chai.js, Enzyme invece è un tool che semplifica il testing dei componenti ReactJS.

Pepperoni, inoltre, integra delle librerie come Redux e ImmutableJS per la gestione dello stato dell'applicazione.

Supporta anche il caching dello stato applicativo che permette il funzionamento offline e l'apertura più rapida dell'applicazione.

Oltre ad un sistema di autenticazione (OAuth), ha molti altri strumenti che semplificano notevolmente la configurazione iniziale del progetto.

Pro

  • Di facile utilizzo
    Una volta capito l'approccio di React Native diventa molto semplice sviluppare nuovi componenti.
  • Più performante grazie all'interfaccia nativa
    React Native guadagna molto in termini di performance rispetto alle comuni WebApp, perché fa uso di un'interfaccia nativa e non delega alla WebView il rendering della UI.
  • Un ciclo di sviluppo molto rapido
    React native è a tutti gli effetti una applicazione nativa che interpreta la business logic scritta in javascript, questo permette di velocizzare notevolmente il ciclo di sviluppo: ad ogni modifica del codice non è necessario ricompilare l'intera applicazione.
  • Virtual Dom
    Questo approccio permette di calcolare il minor numero di operazioni da effettuare per apportare le modifiche al DOM guadagnando velocità nel rendering della UI.
  • Semplifica lo sviluppo di test unitari
    Grazie alla sua struttura a componenti atomici risulta più semplice e più rapido lo sviluppo di test unitari.

Contro

  •  E' comunque un'astrazione
    Nonostante la UI sia nativa, la business logic viene comunque interpretata, quindi risulta meno performante delle applicazioni native.
  • Permette minor controllo rispetto alle applicazioni native
    Nelle applicazioni native si ha un maggior controllo soprattutto sulla gestione delle performance.
  • Attualmente non supporta la piattaforma Windows
    A breve dovrebbe essere disponibile il supporto per Universal Windows Platform.

Alternative

  • Ionic
    ionicUn framework javascript molto comune che si basa su Cordova e AngularJS per la creazione di applicazioni mobile. A differenza di React Native, si avvale di una WebView che rende l'applicazione meno performante. Con Ionic, però, è possibile sviluppare una sola applicazione ed effettuare il deploy sia su Android che iOS (Develop once, deploy anywhere).
  • Xamarin
    xamarinUn framework C# per lo sviluppo di applicazioni native. Xamarin permette di scrivere una sola volta la logica di business modificando solo la UI in base al sistema operativo. E' già presente il supporto per Windows e, utilizzando XamarinForms, è possibile scrivere una singola UI per Android, iOS e Windows. Rispetto a React Native è uno strumento certamente più complesso ed è pensato per un team di sviluppatori già orientato allo sviluppo mobile.
  • nativescriptNative Script 2.0
    E' un framework TypeScript e AngularJS. Native Script permette di sviluppare applicazioni native senza utilizzare la WebView.

Conclusioni

React Native è sicuramente un ottimo framework che permette di sviluppare applicazioni con buone prestazioni ed una interfaccia paragonabile a quella delle app native. Questo strumento, però, ha indubbiamente alcuni svantaggi che si rispecchiano sia nelle prestazioni (anche se migliori di altri framework JS) sia nella possibilità di controllare tutte le funzionalità che una applicazione nativa può offrire.

React Native può essere una soluzione ideale per un team più orientato allo sviluppo in javascript. Questo perché offre degli strumenti che facilitano e, in qualche modo, unificano la logica di business e il deploy sulle varie piattaforme mobile.

Per uno sviluppatore di applicazioni native, invece, React Native può non essere il framework più adatto perché ha un approccio differente e potrebbe non rispondere a tutte le esigenze di uno sviluppatore mobile esperto.

Per sviluppare un MVP in poco tempo e con buone prestazioni rimane un'ottima soluzione, soprattutto se a sceglierlo è un team di sviluppatori Javascript.

giugno 16, 2016 - No Comments!

AWSome Day Bologna

paolo latella awsome day

Nella suggestiva location del Multisala Odeon abbiamo partecipato al capitolo bolognese dell'AWSome Day, una giornata di formazione gratuita per chi si avvicina ad Amazon Web Services per la prima volta e vuole approfondirne la conoscenza.

desk

Eravamo presenti sia come speaker sia con il desk di training dove abbiamo incontrato molti AWS enthusiast e presentato il nostro nuovo calendario dei corsi AWS.

corsi xpeppers

Dopo l'estate si riprende con Milano, Padova e Roma!

giugno 15, 2016 - No Comments!

Cos’è la discovery in un progetto agile

Screenshot 2016-06-15 12.42.58

L’attività di discovery è un insieme di pratiche che permettono di condividere, tra tutto il team di persone che seguirà un progetto, gli obiettivi dell’attività e di avere una immagine condivisa chiara del progetto che sta per partire. Queste pratiche servono ad esplorare i requisiti e a mettere lo sviluppo del progetto sul binario giusto prima ancora di incominciare a scrivere codice. Obiettivo dell’attività è condividere le informazioni tra team di sviluppo e stakeholder, elaborare i requisiti con un livello di dettaglio sufficiente per poter elaborare le prime stime, definire i mockup statici del progetto. All’incontro partecipano gli stakeholder del progetto in modo che possano contribuire costruttivamente alla definizione del progetto e dei requisiti condividendo le loro necessità. E’ consigliabile che all’incontro partecipano anche tutti i referenti delle varie funzioni aziendali che saranno coinvolte dal progetto.

Obiettivi della discovery

L’obiettivo dell’attività è duplice:

  • descrivere il progetto con un dettaglio tale da poter elaborare una stima di effort necessario alla realizzazione del progetto e formulare un preventivo di tempi e costi individuando la soluzione ottimale per le esigenze del cliente;
  • creare le condizioni necessarie per poter gestire il processo di sviluppo tramite le metodologie agili, rilasciando software in maniera incrementale e gestendo il cambiamento come un elemento del progetto

Modalità

La raccolta delle necessità del cliente e delle informazioni necessarie alla realizzazione del software e del preventivo sarà effettuata in parte utilizzando il formato del workshop interattivo utilizzando pratiche agili di visualizzazione delle informazioni e facilitazione della discussione. L’utilizzo di queste metodologie permette di creare un momento di riflessione condivisa con gli stakeholder di progetto e la parte di sviluppo in modo da fornire allo sviluppo le informazioni necessarie per realizzare il prodotto giusto: conoscere e rispettare le priorità di business, realizzare un processo di rilascio incrementale abbracciando il cambiamento e permettendo un “time-to-market” ristretto.

Deliverables

discovery

I deliverables dell’attività descrivono le informazioni utili a dimensionare il progetto e sono funzionali alla realizzazione dell’offerta di sviluppo:

- Mappatura e definizione di tutti gli stakeholder

- Impact mapping del progetto (definizione dell’impatto del sistema sui vari stakeholder)

- User story mapping (definizione del percorso e delle operazioni che compiono gli utenti)

- Mockup statici dei principali flussi dell’applicazione

- Documento di raccolta delle informazioni relative al progetto (requisiti, vincoli tecnologici, tempistiche, priorità)

- Offerta di sviluppo per la realizzazione del software

Questa documentazione sarà parte del progetto e accompagnerà tutto il processo di sviluppo.