Personal tools
CodeJam: Cutting edge web application development

On The Edge Of The Edge!

Dec 18, 2014

CodeJam: Cutting edge web application development

Il 2 e il 3 dicembre ho avuto la fortuna e il piacere di partecipare al CodeJam, un workshop dedicato alle tecnologie più moderne e promettenti in circolazione

Il CodeJam è un workshop organizzato da Avanscoperta a cui sono stato particolarmente contento di prendere parte.

Sappiate che ero parzialmente prevenuto verso alcune delle tecnologie descritte nel programma: alcune di queste non era qualcosa mi sarei aspettato di usare a breve termine ma penso sia sempre importante guardarsi attorno e respirare cose nuove.
Come vedrete a breve molti, se non tutti, i miei dubbi sono stati velocemente crocifissi facendomi tornare in ufficio letteralmente con la bava alla bocca e la voglia di sperimentare quanto visto.

... ma andiamo con ordine.

Il (nostro) team

Tre spauriti programmatori Python:

Location

Campus Living BononiaL'evento si è svolto al Camplus Living Bononia a Bologna, una location eccellente.
La connessione wireless non ha dato nessun tipo di problema, è presente una mensa interna, vari salottini sparsi qui e là per la struttura e la piccola sala conferenze accogliente, il tutto immerso in un ambiente prettamente universitario.
Ottima scelta!

Il Cast

L'evento è stato brillantemente portato avanti dalla coppia Sandro Paganotti (AKA: l'Uomo del Front-End) e Gabriele Lana (AKA: l'Uomo del Back-End).

Le competenze dei due e la sinergia con cui hanno organizzato ed integrato gli argomenti del corso ha reso l'esperienza estremamente piacevole e fruttuosa. Ho assistito ad una ben orchestrata staffetta alla tastiera, per comporre passo dopo passo una piccola applicazione piena di interessanti funzionalità.

Infine: nell'Ombra si muoveva discreto Fabio Fabbrucci, qui in veste di organizzatore ma che avevo già avuto il piacere di vedere in azione al Codemotion 2013 (per quelli che c'erano: sarete felici di sapere che il suo odio per i designer sembra essere parzialmente rientrato).

On The Edge Of The Edge

Velocità Smodata!Il programma del corso era stato preparato vari mesi prima dell'evento vero e proprio ma ci troviamo pur sempre in un mondo che cambia alla Velocità Smodata.
E' stato quindi con sommo piacere scoprire che il reale programma del corso differiva sostanzialmente da quanto descritto.
Lo scopo dichiarato delle nostre guide era quello di poterci fornire la miglior visione possibile dello stato attuale (e del prossimo futuro) delle tecnologie Web: ho trovato questo ragionamento ineccepibile se non un segno di grande professionalità. Bravi.

Front-End

Sandro ha in buona parte soppresso quella parte del programma relativa ad AngularJS, il cui destino è lungi dall'essere vicino alla fine ma in profonda fase di trasformazione, sostituendo il tutto con Web Components.

Dei Web Components si legge di tutto in rete e c'è sicuramente un grande fermento, assai simile a quello generato dall'avvento delle prime bozze relative ad HTML 5 qualche anno fa.

Spiegati in due parole informali: i Web Components sono un nuovo standard che permette di distribuire nuovi componenti HTML (custom elements) perfettamente pacchettizzati ed integrabili, evitando il clashing (CSS e JavaScript) con altri componenti dello stesso tipo o con elementi nativi della pagina Web ospitante.
Che sia la volta buona che vedremo sparire gli iframe dalle nostre pagine?

Al momento il supporto "puro" dei browser è piuttosto limitato, ma ci sono varie librerie che possono aiutare ad accelerare l'adozione. Quella che ci è stata presentata è la nota Polymer.

Polymer logo

Polymer ha una doppia funzione: rendere più semplice e cross-browser l'adozione dei Web Components (rubando una citazione di Sandro: vedetela un po' come il "jQuery dei Web Components") e fornire uno strato di polyfills, ossia simulare con tecnologie odierne funzionalità che il browser ancora non ha implementato.
Infine (ma non è stato approfondito) il progetto Polymer comprende anche Paper, un set di componenti per la creazione di interfacce utilizzando material design...

...se il cervello già vi fuma: non siete i soli.

Di Web Components, Shadow DOM e Polymer ci aveva già parlato il nostro caro collega Nicola dopo il suo viaggio alla DotJS conference, ma non avevo compreso fino in fondo la profonda trasformazione che tutto questo porterà nel Web a breve (non dimentichiamo che Nicola viene dal Veneto e non parla perfettamente l'italiano!).

Da tutto questo calderone di tecnologie "edge" è iniziato il nostro viaggio, seguito dalla soddisfazione di capire come l'uso di queste funzionalità sia una realtà già oggi e già in uso (vedasi GitHub).

nn-annotable previewIl risultato del lavoro svolto è stato un nuovo custom element nn-annotable. Pagine Web possono utilizzarlo per rendere una parte della pagina commentabile (una specie di piccolo forum di discussione agganciato ad un elemento del DOM).

Per non farci mancare nulla, il thread viene poi automaticamente aggiornato in presenza di nuovi commenti da parte di altri utenti (perché mai farci mancare i WebSocket?).

Come avrete notato abbiamo esplorato argomenti estremamente attuali! Alla nostra (volutamente ironica) domanda "ma tutto questo va con Internet Explorer 8" sul volto di Sandro si è dipinta un'espressione traducile in "... ma esisteva anche la versione 8?".

E AngularJS?

Come brevemente accennato sopra, quelli di AngularJS (e Google) non sono certo degli stupidi. Ci sono stati vari rumors e malcontenti dopo l'intervento a ng-europe ma sebbene le scelte di mancata retro-compatiblità siano discutibili, lo scopo finale è certamente quello di arrivare ad avere un AngularJS completamente nuovo, probabilmente più leggero perché integrerà ciò che i Web Components stanno portando avanti, per non parlare di altri novità parallele come ECMAScript 6 e i Mutation Observer.

Un buon articolo sull'argomento che ho letto qualche giorno dopo è stato "Preparing for the future of AngularJS".

Back-End

Ovviamente questi commenti devono pur essere persistenti e salvati da qualche parte, giusto?

Non meno importante ed estremamente interessante è stata la parte gestita da Gabriele, concentrata sull'uso di Node.js, per la precisione usando il framework Express.

Se il corso fosse durato un giorno in più probabilmente mi avrebbe convinto a rasarmi la testa e rinnegare Python!

JS RantOra... per quanto io apprezzi tantissimo alcune delle funzionalità di JavaScript (non ho mai rinnegato l'uso delle closure, che sono in giro da secoli e, lasciatemi dire, sono una figata pazzesca) non sono un grande estimatore del linguaggio di per sé, sebbene già sapessi quanto la programmazione ad eventi e totalmente asincrona di Node.js abbia enormi livelli di prestazioni.

Gabriele ci ha gentilmente offerto la sua introduzione di node.js, che più o meno è stata questa.

Dato che JavaScript (sul client) a differenza di tutti gli altri linguaggi non implementa in nessun modo input/output o meccanismi di importazione di moduli, questa è stata l'occasione per implementare tali funzionalità in un modo completamente moderno:

  • I/O completamente asincrono
  • possibilità di importare altri moduli ed assegnare questa operazione a variabili (questo permette di importare all'interno del codice versioni differenti della stessa dipendenza senza nessun problema.

Tutto questo, assieme al ben congegnato design di Express (middleware e callback a go-go!), mi ha fatto condividere l'idea che Node.js sia davvero "Tanta Tanta Roba!" (cit.).

Ma per me le sorprese lato back-end non sono finite qui: lo storage utilizzato è stato Mongodb, un tipo di database a cui ho sempre riservato lo stesso sguardo di disgusto con cui mia nonna fissava i miei pantaloni strappati sulle ginocchia.
Con questo non voglio dire che da domani il mio modo di operare cambierà totalmente (se il workshop fosse durato un altro giorno... può darsi!) mandando a morte PostgreSQL e lo ZODB ma l'idea che avevo è stata fortemente messa in discussione.

E' nato prima l'uovo... o il suo test?

Una breve nota relativa ai test automatizzati (il TDD ha ovviamente guidato tutto il lavoro svolto).

Uno sforzo vincente portato avanti durante questa esperienza, che probabilmente fa capire come in alcuni casi non sia poi tanto male avere lo stesso linguaggio sul back-end e sul front-end, è stato quello di avere lo stesso sistema di test sia per la parte client che per la parte server.
Ovviamente il test runner era differente, ma una ben congegnata configurazione di Grunt ha reso il tutto estremamente... armonioso!

Ho potuto così apprezzare tanti nuovi tool, come Mocha e Karma (questo già noto agli estimatori di AngularJS).

Free-time

Break timeCome molto spesso accade durante questi eventi, molte cose interessanti emergono anche dai rapporti umani, coffe-break e dalle pause pranzo.

A parte discussioni filosofiche estremamente importanti ("Ma Netflix quando arriva in Italia?") e discutibili episodi di spoiling ("...ma nel finale di Interstellar, quando succede che...") è stato interessante sentire esperienze di lavoro aliene o capire che cosa ha portato professionisti del settore a dove sono oggi.

Il fatto che fossimo tutti più o meno d'accordo nel dire che "si stava meglio quando si programmava tutti in Visual Basic 5" dovrebbe farci ragionare!

Conclusioni

L'adozione di quanto visto in questa due-giorni fitta di informazioni non sarà immediata, ma di certo il nostro trio di tartarughe è tornato in-quel-di-Ferrara estremamente affascinato e motivato.

Ed infine un nuovo ringraziamento alle persone che hanno reso così piacevole questa esperienza!

Alla prossima!

comments powered by Disqus