4 Luglio 2019
Intré Camp – 20 anni – 21 e 22 Giugno 2019

Bentrovati cari lettori!

Siamo a Giugno, ed è tempo di camp aziendale.
Non un camp qualunque. Siamo nel 2019 ed Intré è stata fondata nel 1999, quindi

quest'anno Intré compie 20 anni!

Per l’occasione è stata organizzata una 2 giorni tutti insieme, nella splendida cornice dell’agriturismo La Filanda a Manerba del Garda, così organizzata:

  • Venerdì 21 Giugno: giornata di camp aziendale e cena con brindisi celebrativo presso il ristorante Santo Gusto
  • Sabato 22 Giugno: attività di team building.
Venerdì 21 Giugno

La giornata non poteva iniziare senza una bella colazione.

Dopo aver posato zaini e valigie nella camere, ci siamo riuniti nel salone per iniziare ufficialmente la giornata.

Francesco Rigillo, Head of Network Operations nonché CEO di Intré, ha aperto le danze facendo ascoltare l’inno di Mameli.
Diverse emittenti radiofoniche iniziano la giornata con l’inno nazionale, perché non farlo anche noi?

Riprendendo il payoff aziendale

Learn / Code / Deploy Value

Cosa può fare Intré per questo mondo, per il nostro Paese?
Vivere la nostra quotidianità nel modo migliore possibile, con una certa etica (avere rispetto per gli altri).
Intré non vende competenze specifiche, ma team.
E’ importante come valore, anche perché ASSIEME scriviamo e rilasciamo codice, che è il nostro valore.
La convivenza e la capacità di essere team è fondamentale, deve andare oltre ogni altro aspetto. Lo è da 20 anni, e lo sarà anche per i prossimi 20.

Francesco ha proseguito ripercorrendo le tappe della storia dell’azienda, dalla sua fondazione nell’oramai lontano 1999 sino ad arrivare ad oggi, alla struttura organizzativa attuale.
E’ stato per certi versi emozionante vedere il video celebrativo, una collezione di fotografie che immortalano le persone che hanno fatto parte e che compongono Intré tra camp aziendali, cene, e matrimoni.

Tornando al presente, questa l’agenda della giornata:

  • unconference
  • icebreaker
  • presentazione dei lavori delle gilde
  • definizione delle nuove gilde
  • chiusura

Unconference

Una unconference è conferenza organizzata al momento.
In una prima fase infatti, vengono proposti degli argomenti. Chiunque può proporne uno, collocando un post-it sul foglio di una flipchart dove è rappresentata una griglia orari\spazi (solitamente 3 aule).
Non solo proposte, ma anche richieste di aiuto su qualunque argomento o tematica. L’intento è ottenere 3 sessioni di talk di durata di 45 minuti l’uno.

Damiano ha ricordato come ci si dovrebbe comportare durante una unconference.

C’è una sola legge, la Legge dei 2 piedi: andiamo dove possiamo trarre / apportare valore, e 4 principi:

  • quando comincia è il momento giusto
  • chiunque venga è la persona giusta
  • quando è finita, è finita
  • qualsiasi cosa accada, è l’unica che poteva accadere

E come i calabroni e le farfalle, spostiamoci di stanza in stanza, trasportando in questo caso informazione e conoscenza.

Sotto con le proposte, dunque:

Come sempre, sono arrivate diverse proposte tutte interessanti che hanno portato alla seguente composizione (dopo un momento di market place):

 

OpenHAB

Il nostro collega Carlo ci ha presentato OpenHAB (acronimo di Open Home Automation Bus), una piattaforma open source di automazione domestica.
Si tratta di un software modulare sviluppato in Java che permette di configurare e gestire in maniera automatica un gran numero di dispositivi.

OpenHAB si basa su questi semplici concetti:

  • Things: sono i dispositivi che possono essere integrati all’interno del sistema.
  • Channels: sono gli insiemi di valori e funzionalità messe a disposizione da una thing.
  • Bindings: pacchetti software che si occupano di gestire la comunicazione con i dispositivi.
  • Items: rappresentazione logica di un oggetto all’interno del sistema.
  • Links: sono i collegamenti tra gli item e i channel.
  • Sitemaps: utili per raggruppare i diversi item per categoria o in base alla loro posizione (es. soggiorno, camera da letto, ecc.).
  • Rules: permettono di eseguire delle operazioni al verificarsi di determinate condizioni.

Questo schema mostra tutti i componenti appena descritti.

Il sistema può essere configurato in tre modi diversi:

  • manualmente, creando tutti i file necessari (il linguaggio usato si basa su Xbase e Xtend);
  • da interfaccia, tramite una procedura guidata;
  • automaticamente, sfruttando la funzionalità di thing discovery.

Carlo ci ha mostrato come avviare OpenHAB in pochi minuti usando una delle immagini Docker disponibili.
Successivamente ha aggiunto tramite interfaccia una lampadina Philips Hue, configurando delle regole per l’accensione e lo spegnimento automatico.
Infine ci ha illustrato le possibili integrazioni con sistemi sviluppati da terze parti, come ad esempio Google Assistant. In questo modo ha dimostrato come sia possibile interagire da remoto con tutti i dispositivi installati a casa tramite i comandi vocali di Google Home.

Kubernetes – How to start

Fabio Fortini ha organizzato questo talk con l’intenzione di introdurre Kubernetes a chi ancora ne fosse all’oscuro.

Kubernetes è un argomento il quale, col passare del tempo e con la complessità sempre crescente dei progetti e sistemi software, acquisisce sempre più peso: non appena nasce un nuovo progetto si cerca subito di applicare le pratiche di Continuous Integration – Continuous Deployment (CI/CD).
Dopo un’introduzione riguardante i principali concetti, Fabio ha dimostrato come in pochi passaggi è possibile arrivare ad avere risultati concreti. Precisamente, ha eseguito un client git in locale con lo scopo di configurare una pipeline di CI/CD per un progetto creato da zero.
Tutto il talk, fatta eccezione per la demo, è basato sul libro Kubernetes in Action di Marko Luksa per il quale Fabio ne consiglia la lettura.

Simplicity e Lottie.js

I colleghi Marco Loregian e Giacomo Nava hanno parlato rispettivamente di semplicità e Lottie.js, sfruttando uno degli spazi esterni dell’agriturismo.

Simplicity

Cosa si intende per semplicità?
L’arte di massimizzare la quantità di lavoro non svolto, che è essenziale.
Marco ha preso spunto dal libro Le leggi della semplicità di John Maeda, designer del MIT.

Chi è John Maeda?
Si tratta di uno dei più famosi designer mondiali che lavora sul confine stimolante dove si intersecano tecnologia e designer.
Solo per dare un esempio dei suoi lavori, è colui che ha firmato la famosa tastiera circolare dell’ipod.

Il libro è una sorta di guida fatta di 10 regole e consigli pratici per rendere semplice quello che ad una prima vista non sembra.
Il libro parte da una vista da designer che si pone come primo obiettivo quello di rendere semplice ed utilizzabile qualsiasi dispositivo che invece è tecnologicamente complesso, ma la sua esperienza può essere adottata in qualsiasi altro ambito: professionale e personale.

Elenchiamo le 10 leggi della semplicità:

  • Riduci
  • Organizza
  • Tempo
  • Impara
  • Differenze
  • Contesto
  • Emozione
  • Fiducia
  • Fallimento
  • Unica legge

L’idea di Marco è di ragionare sulle leggi e discuterne relativamente ai progetti nel quale lavoriamo o abbiamo lavorato.
Delle 10 elencate, abbiamo visto le prime 3:

  • RIDUCI: di fronte alla complessità, la prima regola (la più ovvia) è quella di “scomporla” secondo l’approccio coniato SHE (shrink, hide, embody). Ovvero rimpicciolisci, nascondi ed incorpora. In sintesi riduci quello puoi e nascondi tutto il resto senza perdere il senso del valore. Quindi… semplifica e accorpa
  • ORGANIZZA: l’organizzazione aiuta sempre. Permette di chiarire tanti concetti, magari confusi (e quindi complessi) nella nostra mente. Quindi…. organizza le tue idee
  • TEMPO: esiste uno stretto legame tra tempo e complessità. Qualsiasi cosa che richieda maggior tempo ci risulta più complessa rispetto ad un’altra che ne richiede la metà. A partire dalla preparazione di un dolce fino alle pratiche burocratiche. Questo è dovuto all’importanza che la nostra società attribuisce al tempo. Quindi… risparmia sempre tempo.

Lottie.js

E’ una libreria sviluppata dai designer di Airbnb che permette di utilizzare animazioni vettoriali per applicazioni web, iOS e Android.

Le animazioni vettoriali, come quella dei 20 anni di Intré visibile nella sezione in alto a sinistra di ogni pagina del sito aziendale, vengono realizzate con Adobe After Effects e di conseguenza utilizzate nella pagina web grazie al plugin Bodymovin grazie al quale è possibile creare un file JSON e un file Javascript da importare all’interno dell’html della pagina appunto.

Automate boring stuff with bash…and some nerdiness

Con Alex, partner e CTO di Intré,  abbiamo visto come poter utilizzare bash per automatizzare dei task ripetitivi anche in ambito gestionale e non prettamente di sviluppo.

In particolare, l’architettura mostrata è basata su un NAS Synology con WebDav, un server Aruba VPS e alcuni script e permette di archiviare automaticamente pdf di fatture o scontrini.
Per fare questo viene analizzato il contenuto del file, vengono estratte le informazioni rilevanti (tipo di fattura o scontrino, data di emissione, etc) e quindi il file viene catalogato nella cartella corretta.
Queste cartelle sono poi sincronizzate sul NAS che provvedere all’archiviazione. Il NAS, a sua volta, esegue un backup su Amazon Glacier, tutto molto nerd; non dite che non vi avevamo avvisato!

Qualche informazione in più la trovate nella presentazione.

Cypress.io

Io ho tenuto una presentazione su Cypress.io, suddivisa in una prima parte introduttiva del framework e la seconda parte dedicata a live coding.

Oggigiorno esistono diverse soluzioni che aiutano lo sviluppatore nella scrittura di casi di test end-to-end, cioè quei tipi di test che simulano l’interazione utente con una applicazione web. Uno dei più noti è Selenium.
Installarlo non è sufficiente; bisogna scegliere ed installare altre librerie per le asserzioni, framework e per il wrapper di Selenium (ad esempio Webdriver).

Cypress.io viene in aiuto proponendosi come all-in-one testing framework che wrappa alcune tra le più note librerie di testing quali:

  • Mocha: fornisce sintassi per i nostri casi di test: la direttiva describe per definire una suite di test e it per ogni singolo test. Con le direttive before, beforeEach, after, afterEach si gestiscono rispettivamente il setup e teardown delle nostre suite di test
  • Chai: assertion library per scrivere asserzioni secondo la metodologia BDD (direttiva should ed expect) e la più classica TDD (direttiva assert)

Durante la parte di live coding, ho scritto alcuni test semplici di interazione di elementi della pagina Kitchen Sink di Cypress, facendo notare la comodità di Test Runner, applicazione open source che permette di eseguire suite di test in locale direttamente nel browser.

Ho mostrato anche i comandi cypress open per eseguire il Test Runner e di conseguenza una suite di test, e il comando cypress run per eseguire tutte le suite di test (o una specifica) in modalità headless. In questa modalità, Cypress realizza un video dell’esecuzione della suite di test, in formato mp4.

Se siete interessati alla presentazione, potete scaricare le slide da questo link.

XP o non XP?

Damiano ha recentemente letto Extreme programming explained (colloquialmente noto come Il libro bianco) di Kent Beck, per irrobustire un po’ le sue basi su XP (eXtreme Programming).
In questo fondamentale testo del 1999, vengono introdotti e spiegati i valori princìpi e pratiche XP.

Damiano è rimasto particolarmente colpito dall’analisi delle situazioni che rendono difficile o impossibile l’applicazione efficace di questa metodologia…e di altre, come da lui rimarcato.
Da qui l’esigenza di riportare in una breve presentazione alcuni di questi impedimenti, per poi lasciare spazio ad una discussione aperta.

Cedo ora la parola a Damiano:

Vediamo questi problemi nel nostro lavoro di ogni giorno?
In che modo ci impediscono di lavorare al meglio (in termini di soddisfazione sia dello sviluppatore sia del cliente) e di consegnare il prima possibile il prodotto migliore possibile?
Come possiamo mitigare alcuni problemi e dove invece è necessario essere consapevoli della loro esistenza ed accettare degli inevitabili compromessi affinchè il business possa avere successo?

Faccio solo un esempio: se in un progetto passano mesi dallo sviluppo al rilascio al cliente finale, sarà molto difficile ottenere feedback utile a “correggere la rotta” prima di allontanarsi troppo dalle necessità dell’utente che magari non sono inizialmente chiare nemmeno all’utente stesso.
Quali passi possiamo compiere per abbreviare il ciclo di feedback anche in questa situazione?

Dalla discussione sono emerse opinioni diverse e molto interessanti da persone che ricoprono ruoli diversi in Intré. Colleghi che lavorano su diversi progetti e sono parte del team Intré chi da più tempo chi da meno…grazie a tutti quanti, questo tipo di confronto è sempre un grande arricchimento.
Un grazie particolare a Fabio Ghislandi, Francesco Rigillo e Giulio Roggero per aver partecipato alla discussione portando i punti di vista dei soci Intré.
Non solo.
Li ringrazio per il reality check sul fatto che la situazione “ideale” è un obiettivo da perseguire senza illusioni utopiche, e per le rassicurazioni sul futuro di Intré e la chiarezza sui pain points attuali.

MIA-Platform live coding

Giulio Roggero, Chief Strategy e partner di Intré, ci ha guidato in una sessione di live coding alla scoperta di Developer Console, uno strumento di MIA-Platform, azienda di sviluppo software del quale è fondatore e CTO.

Developer Console è uno strumento che aiuta a governare il ciclo di vita dei nostri prodotti digitali. Oggigiorno infatti si è abituati a lavorare in team relativamente ristretti e autonomi: nonostante ci si basi su principi e pratiche condivise è facile che lo sviluppo di differenti progetti software prenda pieghe diverse.

Come fare allora per mantenere tutto il lavoro sotto controllo?

Giulio ha mostrato la homepage della Developer Console, che presenta subito le differenti fasi di sviluppo del codice:

  • Infrastructure Setup
  • Design
  • Test & Debug
  • Deploy
  • Metrics
  • Monitoring
  • Docs
  • Marketplace

Lavorando sul caso studio dello sviluppo di un sito web per un food delivery, Giulio ha attraversato le varie sezioni ed esplorato le numerose funzionalità.

Abbiamo visto come creare un nuovo CRUD che potesse servire agli utenti per recensire i piatti appena acquistati. Facendosi guidare dalla console, sono state definite le proprietà della nostra collezione e il relativo tipo, è stato esposto l’endpoint e infine è stata creata la pagina collegata nel CMS di back-office del sito.

Dopo aver salvato la configurazione Giulio ha rilasciato in ambiente di produzione il nuovo servizio con un semplice click nella sezione Deploy e potuto così vedere la funzionalità implementata nel CMS di MIA-Platform.

Dal menù di Deploy è possibile accedere alla storia dei rilasci, per avere una visione chiara degli ultimi deploy e accedere alle relative versioni e log su git.

Nell’ultima parte del talk, Giulio ha mostrato il portale Docs che permette di consultare la documentazione delle varie API, automaticamente generata e sempre testabile.

Conclusa così la demo per la creazione di un CRUD, è stata fatta una rapida scorsa sui custom plugin che la piattaforma offre a disposizione per la creazione di microservizi nei propri linguaggi preferiti ed esplorato altre sezioni del menù di Developer Console:

  • Test & Debug: aiuta a impostare i test end-to-end e i test di sicurezza
  • Metrics: consente di visualizzare le dashboard di monitoraggio impostate dall’utente, ad esempio i grafici di Kibana
  • Monitoring: permette di controllare i Pod e lo stato dei servizi (come mostrato nell’immagine seguente)
  • Marketplace: offre diversi template già pronti per accelerare lo sviluppo software

Grazie a questo talk di Giulio abbiamo visto alcune tra le varie funzionalità offerte dalla Developer Console e capito come uno strumento di questo tipo possa aiutare team differenti e persone ad avere il controllo sul codice scritto (ad esempio mantenere un metodo tecnico ben preciso, adottare pipeline di rilascio simili, avere un controllo versione rigoroso, mantenere la documentazione sempre aggiornata) ed accelerare lo sviluppo senza aumentare il debito tecnico.

Extensibility

Che cosa si intende per estensibilità di un progetto?
Francesco e Daniele Cammarata hanno portato la loro esperienza in merito.

L’estensibilità è un principio di ingegneria del software che prevede una crescita futura del sistema.
Può essere considerata come la misura della capacità di estendere un sistema e il livello di sforzo richiesto per implementare l’estensione.
Le estensioni possono essere l’aggiunta di nuove funzionalità o la modifica delle funzionalità esistenti. Il principio prevede miglioramenti senza compromettere le funzioni di sistema esistenti.

L’idea quindi è di applicare una sorta di architettura a plug-in, estendibile da altri sviluppatori senza comprometterne le funzionalità esistenti e la logica dei dati.

Francesco ha mostrato alcuni strumenti validi in tal senso.

JSON Schema

JSON schema è una specifica per la definizione della struttura dei dati JSON, che porta i seguenti vantaggi:

  • descrive il formato dati esistente
  • fornisce una documentazione chiara, leggibile dall’uomo e dalla macchina
  • fornisce una validazione strutturale completa , utile per i test automatici.
  • fornisce una convalida strutturale, convalida dei dati inviati dal cliente.

Tra le diverse librerie esistenti, Francesco porta come esempio react-jsonschema-form, un componente React in grado di creare moduli HTML da uno schema JSON di input sfruttando la semantica Bootstrap come default.

Web components

Negli ultimi anni abbiamo assistito ad un interessante crescendo di strumenti, sotto forma di librerie e framework, per lo sviluppo di interfacce Web: da Angular a React, da Vue a Ember.
L’effetto involontario generato dalle librerie e dai framework JavaScript per semplificare la creazione di interfacce Web è stato, sotto certi aspetti, proprio quello di complicarla.
Gli elementi delle nostre interfacce sono spesso legati indissolubilmente alla libreria o al framework che ci ha semplificato la vita per realizzarle.

Cosa possiamo fare allora per evitare questa complessità?
C’è un modo per realizzare componenti Web tali che possano essere utilizzati in qualsiasi applicazione indipendentemente dalla libreria o framework utilizzato?
I Web Component sono un insieme di specifiche standard per la creazione di elementi HTML personalizzati e riutilizzabili in pagine ed applicazioni Web.
Allo stato attuale i Web Component non si basano più su specifiche a se stanti, ma fanno riferimento agli standard di HTML e DOM.
Oltre alla possibilità di creare elementi HTML personalizzati, i Web Component supportano un meccanismo di incapsulamento che consente il loro riutilizzo all’interno di una qualsiasi applicazione Web o framework senza rischio di interferenze con il codice esistente.
Sono basati essenzialmente su 3 funzionalità:

  • Custom element : rappresentano un insieme di API JavaScript per la creazione di elementi del DOM personalizzati associati ad uno specifico tag HTML
  •  Shadow DOM : un insieme di API JavaScript che consentono di gestire un DOM specifico per un componente, indipendente dal DOM della pagina Web, realizzando il meccanismo di incapsulamento a cui accennavamo prima
  •  HTML template : si tratta di un’integrazione alle specifiche dell’HTML che consente di definire porzioni di markup che non viene interpretato al caricamento della pagina Web, ma che viene istanziato a runtime

Nel progetto al quale sta lavorando, Francesco utilizza e suggerisce LitElement, una semplice classe base per la creazione di componenti web veloci e leggeri che funzionano in qualsiasi pagina web con qualsiasi framework.
LitElement utilizza lit-html, una libreria Javascript per creazione di template HTML, per eseguire il rendering nello shadow DOM e aggiunge API per gestire proprietà e attributi. Le proprietà vengono osservate e gli elementi vengono aggiornati in modo asincrono quando cambiano le proprietà.

Nell’ultima parte di questo interessantissimo talk, Daniele ha curato una demo su GraphQL, un linguaggio di query per le API che a runtime soddisfa tali query con i dati esistenti.
GraphQL fornisce una descrizione completa e comprensibile dei dati nella API, offre ai clienti la possibilità di chiedere esattamente ciò di cui hanno bisogno e nient’altro, semplificando lo sviluppo e l’evoluzione delle nostre API.

Condivisione codice tra progetti

Fabio Grieco ha proposto un momento di confronto riguardo a quali azioni poter compiere per rendere condiviso tutto quel codice che è uguale o molto simile tra i vari nostri progetti.
Tale condivisione porterebbe diversi vantaggi quali:

  • risparmio di tempo
  • evitare di dover risolvere problemi già risolti magari da qualcun altro
  • avere a disposizione del codice ben incapsulato e già testato

Fabio, assieme ad altri componenti del team, ha già provato a realizzare questa idea adottando una libreria di componenti condivisi tra il suo team e altri ma purtroppo, forse per scarsa esperienza in questa attività e l’aver sottovalutato i vari problemi di incompatibilità ovviamente emersi, questo lavoro si è arenato.
Fare tesoro anche di questa esperienza, la discussione ha ispirato la proposta di una gilda dal nome share-tested-code.
Ai posteri l’ardua sentenza…tra 4 mesi, sempre che la gilda trovi sufficienti adesioni.

Dopo aver pranzato abbiamo ripreso le attività riuniti in salone, non prima di aver partecipato ad un icebreaker.
Fabio, Executive Agile Coach nonché partner di Intré, ha preso spunto da un icebreaker di un docente di architettura degli elaboratori.

Cloud, virtualizzazione, container, serverless, blockchain…tool che utilizziamo nella nostra quotidianità.
Quanto ne sappiamo dell’architettura che sta dietro? Ancora meglio, quanto ne sappiamo del computer, lo strumento che utilizziamo?
Ci ricordiamo (forse) che al suo interno abbiamo microchip a loro volta composti da miliardi di TRANSISTOR.

Ecco, il transistor.
Il componente che permette o impedisce il transito della corrente all’interno di un circuito: il sistema può dunque assumere il valore binario di 0 o 1, permettendo di realizzare i circuiti elettronici digitali alla base della logica booleana.
In questa sua veste è utilizzato in campo informatico: ogni microchip (processore o memoria) è composto da miliardi di transistor che permettono di archiviare dati o eseguire le istruzioni e gli algoritmi dei vari software informatici.

Perché quindi non ricreare un sistema di calcolo binario su 3 file di 11 persone l’una? Numeri non a caso.

3 file per avere 2 dati di ingresso e 1 di uscita. Per ogni fila Fabio ha disposto 11 persone rappresentanti i bit da 2 alla 0 (1) a 2 alla 10 (1024).

Il gioco consiste nell’eseguire somme\sottrazioni binarie. Ma come simuliamo i comandi di ogni transistor?

  • Se ricevi un colpetto sulla testa, alza il braccio destro
  • Se ricevi un altro colpo sulla testa, abbassa il braccio
  • Se hai un numero dispari di mani appoggiate sulla spalla, tendi il braccio sinistro
  • Se hai un numero pari di mani appoggiate sulla spalla, abbassa il braccio sinistro
  • Se il numero di mani appoggiate sulla spalla è maggiore di 1, alza il braccio destro verso destra

Potete immaginare lo scompiglio generato provando ad eseguire somme o sottrazioni di numeri a 3 cifre, giusto per complicare un po’ il tutto.

Terminato l’icebreaker, siamo rientrati in salone per proseguire la giornata di camp.
Prima di partite con lo spazio dedicato alle gilde, c’è stato un momento di annunci.

Emanuele, head del team di UX designer della venture Thanks Design, ha mostrato una preview di quello che sarà il nuovo video di Intrè, frutto delle riprese negli uffici di Monza e Seriate.

Alberto e Fabio hanno colto l’occasione per presentare un nuovo servizio a disposizione di Intré, books.intre.it.
Nientepopodimeno che una biblioteca online dal quale è possibile consultare libri e manuali tecnici, con la possibilità di lasciare recensioni.

Infine Ferdinando ha ricordato l’imminente l’evento Working Software, del circuito Italian Agile Venture di Italian Agile Movement, che si terrà  3 Luglio al Vodafone Theatre a Milano. Saremo main sponsor, non mancare anche per fare 2 chiacchiere e perché no, lasciarci la tua candidatura. Intré is hiring!

Ora davvero, è tempo di vedere come sono andate le gilde nate nel corso dell’ultimo camp.

GILDA TRANSAZIONI DISTRIBUITE: SAGHE

Carlo Ballabio, Marco Rotondi e Claudio si sono occupati di approfondire il tema delle transazioni distribuite, riassumibile con il termine saga.

Non solo saghe, anche event sourcing, CQRS e DDD.

Il punto di partenza delle saghe è un’analisi dettagliata, la definizione dei domini e delle competenze, in poche parole la base è il DDD, cioè Domain Driven Design.

Una saga è un meccanismo che garantisce la consistenza dei dati tra i servizi. In caso di errore la saga riporta i dati ad uno stato equivalente (quindi, non identico) a quello di partenza.

La saga definisce una serie di transazioni ognuna delle quali implementa una parte delle business logic (T). Per ogni transazione bisogna prevedere una transazione di compensazione (C) che riporti i dati elaborati da T ad uno stato equivalente a quello di partenza.

Una saga quindi risulta semplice da sviluppare se e solo se supportata da un’analisi architetturale dettagliata del sistema.
Grazie al corso che hanno seguito durante la gilda, Carlo e gli altri componenti hanno fatto chiarezza sull’argomento, con il senno di poi forse è troppo piccolo per essere affrontato in una gilda di 4 mesi.
Un altro aspetto positivo ha riguardato la presenza di persone esterne durante il corso svolto. Questo ha aiutato nei rapporti con gli stessi e ha dato inoltre maggior visibilità su quello che fa Intré per quanto riguarda la formazione.

ALEXA SKILL

La gilda al quale ho partecipato assieme a Marco Ranica, Matteo Balestrini, Alberto, Alessandro, Andrea Caglio Marco Loregian e Marina.

Una skill Alexa è un’ applicazione che permette di estendere le funzionalità base di ciascun dispositivo della serie Amazon echo e trarre il massimo dall’assistente digitale Alexa, incorporato in questi dispositivi.

Obiettivo della nostra gilda è stato quindi l’implementazione di una skill per la gestione della lista spesa, con le seguenti funzionalità:

  • aggiunta di un prodotto
  • eliminazione di un prodotto
  • lettura della lista
  • eliminazione di tutti i prodotti presenti
  • invio della lista della spesa via e-mail
  • gestione della lista tramite un bot di Telegram

E’ stato molto interessante ed istruttivo dato che ciascuno di noi ha accresciuto le competenze sull’ecosistema Amazon Web Services, sull’utilizzo delle Lambda AWS nonché la comprensione dell’architettura di una skill:

  • invocation name: l’espressione con il quale ci si rivolge agli utenti, ad esempio apri spesa
  • intent: l’azione che la skill di Alexa esegue nel momento in cui un utente usa un determinato schema linguistico, ad esempio aggiungi 3 banane

Siete curiosi di vedere, meglio sentire che abbiamo combinato con Alexa? A voi il video della demo tenuta al camp

REACTIVE CANVAS

Gabor, Manuel, Roberto e l’ex-collega Gianni si sono occupati di reactive programming e utilizzo di canvas.

Per reactive programming si intende un nuovo paradigma di programmazione in cui si fa uso di flussi di dati asincroni.
I flusso, o stream, è l’elemento centrale nelle tecnologie reactive come RxJS perché può essere, oltre che creato, combinato con altri filtri o filtrato. In buona sostanza un flusso può essere usato come input per un altro flusso ed anche flussi multipli posso essere combinati come input oppure può essere effettuato un merge. Inoltre ai flussi possono essere applicati filtri al fine, magari, di recuperare solo gli eventi che ci interessano ed infine i valori di un flusso possono essere mappati su un altro flusso.

Aggiunto con HTML5, Canvas, o meglio HTML <canvas> è un elemento che può essere usato per disegnare elementi grafici tramite script (di solito JavaScript). Per esempio, può essere usato per disegnare grafici, creare composizioni fotografiche, creare animazioni e perfino realizzare elaborazioni video in tempo reale.

L’obiettivo della gilda è stato la realizzazione del gioco della battaglia navale, con tanto di grafiche relative a cielo, mare e navi e soprattutto l’animazione del missile lanciato da una nave e in caso l’esplosione quando una nave veniva colpita :). Per i più attenti durante la demo (2 istanze di Google Chrome e un web server), le onde del mare si muovevano

Come hanno ottenuto questo fantastico risultato?
Dapprima c’è stato uno studio sulle potenzialità e limiti dell’utilizzo di canvas.
Dopodiché hanno realizzato il gioco del tris e infine quello della battaglia navale, mantenendo lo stesso server.
La comunicazione client server è stata gestita tramite websockets mentre per gestire le animazioni 3d all’interno della pagina del browser hanno utilizzato three.js, una libreria Javascript cross-browser che fornisce anche un API.

GILDA LAMBDA, argomento FUNCTIONAL PROGRAMMING

Carlo, Fabio Fortini, Daniele Cammarata, Lorenzo, Luca, Ferdinando, Marco Testa e Alex hanno approfondito l’argomento della programmazione funzionale.

La gilda è stata suddivisa in 2 momenti:

  1. lettura del libro Domain Modeling Mode Functional di Scott Wlaschin
  2. esercizi di applicazione di programmazione funzionale, magari facendo refactoring di codice già scritto

Il libro è stato per certi versi una scoperta, dato che è per lo più incentrato sul Domain Driven Design. Ma è stato utile leggerlo, per capire in quali contesti applicare functional programming.
Inoltre la lettura individuale libera è stata utile per gestirsi i tempi (anche extra-gilda) e per permettere ai nuovi collaboratori Daniele e Marco di entrare in corsa 🙂

Per quanto riguarda il lato pratico, il gruppo ha svolto esercizi utilizzando il linguaggio C# (nonostante nel libro gli esempi siano scritti in F#).
Vista la dispersione geografica dei componenti (un po’ a Monza, un po’ a Seriate), sono stati svolti incontri da remoto, portando per ogni esercizio lo sviluppo di 2 soluzioni diverse ma in parte convergenti.

USER RESEARCH TOOLS

I colleghi UX designer Diego, Andrea, Giacomo Nava ed Emanuele hanno svolto un lavoro di ricerca di nuovi tool da utilizzare in fase di ricerca utente per:

  • Raccogliere gli insight da user testing in maniera efficiente.
  • Far convergere e organizzare i feedback raccolti attraverso i diversi strumenti (es. Interviste, user testing, questionari,…).
  • Definire uno standard a livello di report di usabilità.

Vediamo quali strumenti hanno trovato e provato:

  • hotjar: è un tool che consente di rilevare il comportamento degli utenti di siti/web app unendo le funzionalità di un’analisi quantitativa (es. Google Analytics) ad un’analisi qualitativa. In pratica si registra una sessione di un utente che naviga un sito, per tirare fuori delle statistiche
  • UsabilityHub: è una piattaforma che consente al designer di effettuare user testing da remoto attraverso una suite di strumenti volti a far emergere problematiche legate all’usabilità ed a facilitare il processo progettuale. Propone diversi test quali navigation test, five second test, first click test.
  • User Testing: tool simile a UsabilityHub, infatti permette di condurre user testing remoto:
    • permette di definire rapidamente una serie di task da testare con gli utenti
    • consente agli utenti di lasciare anche feedback vocali e video
  • Airtable: piattaforma accessibile online, che permette di creare e gestire spreadsheet (fogli di calcolo) contenenti sia testo che non (immagini, video…). E’ semplice creare connessioni tra contenuti di tabelle diverse nonché la possibilità di creare report stampabili

PROPOSTE GILDE

Morta una gilda, se ne fa un’altra.
Non recita così il detto, dopotutto?
Sotto con le proposte quindi:

  • Gilda agiLEGO: la gilda ha come obiettivo quello di produrre materiale informativo relativamente alle cerimonie agili, utile a membri di Intré ma anche all’esterno
  • Gilda Machine Learning: l’obiettivo è studiare più approfonditamente l’argomento
  • Gilda Experience mapping tool: proposta dai colleghi designer, l’obiettivo è realizzare una app per il mapping dell’esperienza utente
  • Gilda Svolazzare: realizzare una app nativa Android e iOS con l’utilizzo del framework Flutter
  • Gilda GraphQL: per studiare e sperimentare GraphQL, dimostrato da Daniele Cammarata durante l’unconference
  • Gilda Machine Learning + Python: l’obiettivo è trattare ed approfondire l’argomento machine learning utilizzando come linguaggio di programmazione Python
  • Gilda New frontiers of testing: l’obiettivo è esplorare nuove tecniche quali mutation testing, property-based testing, approval testing.
  • Gilda Share the love for code: l’obiettivo è produrre 1 o più librerie di utility
  • Gilda XP school: gilda che si pone come obiettivo quello definire un programma di studio sulle pratiche eXtreme Programming
  • Gilda Open source software: l’obiettivo è confrontarsi e contribuire su piattaforme come Exercism
  • Gilda Google Home: sull’onda del successo della gilda Alexa skill, l’obiettivo è ha lo sviluppo su un dispositivo Google Home, per poi appunto fare un confronto con il mondo Amazon
  • Gilda Gatsby.js: GatsbyJs è un tool per realizzare velocemente siti web, basato su GraphQL. L’obiettivo è approfondire l’argomento magari confrontando con altri tool simili

Tantissime proposte, come sempre. Quante e quali gilde nasceranno? Lo scoprirete tra qualche mese, leggendo l’articolo del prossimo camp.

La giornata volge al termine, ma non prima dell’ultimo icebreaker.
Dato che per il giorno seguente era prevista un’attività all’aperto, e le previsioni meteorologiche non promettevano nulla di buono, Fabio ha pensato di organizzare una sorta di danza scaccia pioggia facendosi simulare sì l’arrivo della pioggia ma anche la fine.

Prima della cena tutti insieme, c’è stato un momento di svago per ognuno di noi.

C’è chi ha usufruito dei servizi dell’agriturismo, magari per fare un bel tuffo in piscina o come il sottoscritto per giocare a calcetto assieme ad altri colleghi.

C’è chi invece ne ha approfittato per farsi una bella passeggiata fino alla croce, godendo del meraviglioso panorama offerto.

Buon compleanno Intré

Come vi dicevo, questo è stato il camp celebrativo dei 20 anni, e per l’occasione è stata organizzata una bella cena tutti insieme presso il ristorante Santo Gusto, a pochi passi dall’agriturismo.

E’ stata davvero una bella serata, tra chiacchiere e risate. Sembrava essere in vacanza con gli amici piuttosto che con dei colleghi.

Non c’è compleanno senza una torta, perciò

Auguri per i tuoi primi vent’anni, Intrè!

Sabato 22 Giugno

Dopo una bella dormita e una ricca colazione, ci siamo riuniti nel cortile interno dove ad attenderci c’erano 3 persone in tenuta atletica, munite di cronometro, fischietto e megafono.
Ammetto, ero tra coloro che nutrivano dubbi quali:”non penseranno di sottoporci a prove atletiche, vero?“.

Per rompere il ghiaccio, sono stati organizzati 2 mini giochi.

Siamo in tanti, presentiamoci! Disposti in fila, ognuno doveva presentarsi all’altro. Tutto nel più breve tempo possibile.

Ora che ci siamo presentati, testiamo il nostro livello di collaborazione.
Immaginate di trovarvi sulla vetta di una montagna, in bilico su di un dirupo.
Per simulare questa condizione, siamo stati disposti sempre in fila ma con i piedi sopra una corda.
Ciò che dovevamo fare era riorganizzarci in ordine alfabetico, spostandoci sempre pensando di essere su di un percorso molto stretto. Attenzione quindi a poggiare i piedi sempre sulla corda, e spostarsi tenendosi al compagno a fianco.
Il tutto chiaramente nel più breve tempo possibile.

Bene! Il ghiaccio è stato rotto, è arrivato il momento dell’attività di team building.

Siamo un’azienda che fa del lavoro in team uno dei punti di forza.
Ecco quindi l’idea di dividerci in squadre che come obiettivo hanno la realizzazione, la sponsorizzazione e l’utilizzo di un prodotto, nel caso un’automobile.
Automobile che parteciperà ad una gara in un circuito creato all’interno dell’agriturismo.
Verrà decretato il vincitore sulla base di un punteggio ottenuto sommando i risultati di 4 categorie:

  • grido di battaglia
  • slogan
  • prodotto
  • tempo in gara

Dal momento che attualmente Intré ha un team di UX designer composto da 5 persone e che il design, l’estetica di un prodotto è molto importante per il suo successo, è stato deciso di creare 6 squadre, 5 delle quali con un designer.

Ogni squadra è caratterizzata da un colore (giallo per quanto riguarda la mia) ma anche da un nome e uno slogan, un urlo di battaglia.
Ecco quindi che abbiamo iniziato l’attività riuniti in team per definire nomi e slogan appunto. Momento terminato con le presentazioni di ogni team.

E’ tempo di progettare e costruire l’automobile!

In un’ora di tempo, si doveva dapprima progettare il prototipo, rispettando il colore della squadra e la parola chiave assegnata.
Ad esempio, la mia squadra aveva come parola VALORE.
Dopodiché si doveva realizzare il prodotto e pensare ad uno spot per il suo lancio.
Ogni team aveva a disposizione un kit base:

In aggiunta era possibile acquistare materiale extra spendendo dei crediti. Occhio agli sprechi dunque, e sotto con i lavori.

Terminata la fase di realizzazione del prodotto, è arrivato il momento di presentare i risultati, un team alla volta, sotto l’attento occhio della giuria (e anche degli ospiti dell’agriturismo che di tanto in tanto passavano per il cortile interno).

La creatività e la fantasia, unità allo sforzo e collaborazione tra i componenti del team, hanno portato davvero dei gran bei risultati.

Non rimane che accendere i motori…meglio, attivare i muscoli e dare il via alla gara.
Un veicolo alla volta, si doveva portare a termine il percorso nel più breve tempo possibile.
Per ogni auto si è stabilito un pilota e 2 motori, cioè persone che devono trainare il veicolo.
Occhio alle penalità! Attenzione a non calpestare i cinesini lungo il percorso, non alzare il carretto, non andare fuori pista. Ognuna di queste infrazioni costa un certo numero di secondi.

Pronti, via dunque!

Chi con poche difficoltà, chi con qualche fuori pista, la gara si è conclusa senza feriti e con tanti sorrisi.
Dopo aver decretato il team vincitore, abbiamo concluso questa bellissima attività con un momento di condivisione su quanto appreso.

In un progetto, fin dalla fase di analisi, è bene che tutti i componenti del team partecipino dando la propria opinione.
Il feedback è importante, perciò sin da subito testare ciò che si sta realizzando (diversi team hanno testato l’auto, solamente dopo aver montato le ruote del carretto).
Più l’obiettivo finale del progetto è chiaro, e più è alta la partecipazione e la qualità del lavoro svolto da tutto il team.
Non aver paura di fallire, anzi sbagliare sin da subito, perché il fallimento porta al miglioramento.

A nome di tutta Intré, vorrei ringraziare le 3 persone che hanno organizzato questa divertentissima nonché istruttiva attività.

Dopo gli sforzi, anche vista l’ora di pranzo imminente, tutti a mangiare dell’ottima carne grigliata, accompagnata perché no da un po’ di birra.

La giornata si è conclusa in salone, dove tutto è iniziato, con l’inno del nostro Paese e un discorso di chiusura da parte di Francesco.
E come se non fosse già abbastanza questa 2 giorni assieme, un regalo per tutti. Graditissimo aggiungerei, un bello zaino per i nostri laptop, con tanto di spazio porta borraccia.

Liberi tutti dunque, e arrivederci anche a voi cari lettori.

Mi permetto di chiudere con questa foto scattata durante il momento libero dopo il camp

 

Ne ha fatta di strada Intré in questi 20 anni, la salita è stata faticosa ma ne è valsa la pena. Ma non accomodiamoci, ci sono altre vette da raggiungere e per farlo dobbiamo continuare a dare il meglio.

Tutti insieme, come sempre.

Tag
A serendipitous journey in an uncertain world

Il racconto dell'esperienza di viaggio del collega Marco Testa nell'incerto mondo dei progetti software

Agile Venture Vimercate 2019

Il racconto della giornata di conferenza tenutasi a Vimercate.

Gildonferenze – Marzo 2019

Resoconto delle conferenze del 12 Marzo e 19 Marzo per approfondire alcuni temi trattati durante le ultime gilde.

Intré Camp – 5 Marzo 2019

Racconto del camp aziendale svoltosi ad Arcore, agriturismo La Bergamina.

IAD Brescia – 10 Novembre 2018

Racconto della giornata di conferenza svoltasi presso l'Università degli Studi di Brescia.

Intré Camp – 30 Ottobre 2018

Racconto del camp aziendale svoltosi a Erba, castello di Casiglio.

Intré Camp – 26 Giugno 2018

Racconto del camp aziendale svoltosi all'agriturismo La Camilla

Agile Venture Prato 2018

Il racconto della giornata della prima edizione di un agile venture in quel di Prato.

A reactive programming example
Milan Kotlin Community Conf

The first Kotlin related Italian conference made from the community to the community!

Let's see how was it...

DroidCon IT, Turin, 19 & 20 April 2018: our report
Milan Kotlin Community Conference

How, why and what has lead us to the Milan Kotlin Community Conference.

Intré Camp – 13 Febbraio 2018

Racconto del camp aziendale svoltosi a Pontida, agriturimo Polisena

Vert.x – 4o articolo su Mokabyte!

4o articolo sul mondo Vert.x a cura di Marco

Vert.x – 3o articolo su Mokabyte!

3o articolo sul mondo Vert.x a cura di Marco

NoSlidesConf 2017

NoSlidesConf: una conferenza diversa dal solito

Vert.x – 2o articolo su Mokabyte!

2o articolo sul mondo Vert.x a cura di Marco

Vert.x – 1o articolo su Mokabyte!
IAD Urbino 2017 – Conferenza 18 Novembre

Racconto della conferenza presso l'università degli studi Carlo Bo di Urbino

IAD Urbino 2017 – Unconference 17 Novembre

#IAD17: Racconto della giornata di unconference presso l'Università degli Studi Carlo Bo di Urbino

Intré Camp – 5 Ottobre 2017

Racconto del camp aziendale svoltosi all'agriturismo La Camilla

Intré Camp – 18 Maggio 2017

Resoconto del camp aziendale svoltosi all'Oasi di Galbusera Bianca

CloudConf Torino 2017

CloudConf 2017 a Torino. Come è andata?

Mini IAD Vimercate 2017

Il racconto della giornata al Mini Italian Agile Day tenutasi a Vimercate.

Codemotion Milano 2016

Nel week-end del 25-26 novembre 2016 si è svolto il Codemotion Milano 2016.
Francesco Sacchi e Ferdinando Santacroce ci raccontano com'è andata.

Angular Conf 2016

Il racconto della nostra giornata alla Angular Conf 2016 a Torino, sia come spettatori e soprattutto come sponsor.

Intré Camp – 3 Novembre 2016

Un racconto di come è andata la nostra giornata di team building, tra sorrisi e battaglie ;)

Node.Js Italian conference – V edition

Cronistoria sulla nostra partecipazione alla 5^ edizione della Node.Js Italian Conference, con tante belle foto, stickers e...leggete :)

Business24 TV: Fabio Ghislandi presenta Intré

In questo breve intervista viene presentata Intré e il suo innovativo approccio allo sviluppo di software.

Come cambia il mondo dei linguaggi
WebRTC – #1 Video-Chat in javascript

Con la tecnologia WebRTC (Real Time Communication www.webrtc.org) è possibile integrare, all’interno di applicazioni che comprendono javascript, funzionalità di audio e video-chat, registrazione chat, condivisione schermo e signaling.

Future e Promise in Scala

Primo post sulla programmazione in Scala dedicato a future e promise, due costrutti fondamentali per la programmazione concorrente.

Come inviare dati live da un’applicazione C# Desktop al web usando le WebSocket

Questa è una guida passo passo su come esporre dati live da un'applicazione C# console ad un web browser usando le WebSocket. L'esempio è stato testato su Windows 7.

IOS Push notifications iOS 6 con Sencha Touch 2.2

Se state cercando di inviare una Push Notification al vostro iOS6 iPhone/iPad usando Sencha Touch 2.2 probabilmente avrete incontrato diversi problemi. In questo articolo vedremo passo passo come configurare i certificati, impostare il file Sencha package.json ed inviare una push notification con uno script PHP o C#.

Creare una issue in Jira con i sub-task predefiniti

E' possibile programmare script in Atlassian Jira usando Groovy. Questi script possono essere eseguiti allo scattare di un evento come alla creazione di una issue o al suo aggiornamento. Sfruttando questo principio vediamo come creare uno script che crea i sub-task in automatico alla creazione di una Issue.

Lego controllato con Cloudfoundy via WebSockets

Questo è un breve test di come è possibile controllare Lego Mindstorm con Cloudfoundry usando HTML5 e WebSockets.

Beaglebone how-to. Come cambiare lo stato di una pagina web premendo un pulsante con node.js

Questo articolo descrive come intercettare l'interrupt GPIO di una beagle bone e aggiornare, via web sockets, una pagina web usando node.js.

youSCADA presentato al Graphical Web 2012

Come controllare e monitorare i device usando una piattaforma Cloud? La soluzione è stata presentata al Graphical Web 2012 a Zurigo.

Chiamare una REST API con node.js

Node.js sta rivoluzionando il modo di programmare le piattaforme software. Basato sul Google V8 JavaScript Engine permette di scrivere codice lato server in JavaScript.

Top
Ogni nostro Sprint ha l'obiettivo di massimizzare il Valore per l'utente finale
Il tuo browser non è aggiornato!
Aggiornalo per vedere questo sito correttamente.Aggiorna ora

×