Reportage del Delphi Day Padova Edition 2018

Dopo il successo del Delphi Day primaverile di Piacenza, giovedì 22 novembre ha avuto luogo l’edizione dedicata al nord-est Italia, il Delphi Day Padova Edition 2018.

Come di consueto, l’evento è stato diviso in due momenti principali: uno dedicato a seminari di approfondimento, che si è svolto al mattino, l’altro dedicato alla conferenza vera e propria, nel pomeriggio.

L’affluenza è stata molto buona, con sale gremite sia al mattino che al pomeriggio, un successo che non potrà fare altro che piacere agli organizzatori, ovvero ai ragazzi e ragazze dello staff di Wintech Italia.

I seminari

I seminari organizzati al mattino hanno toccato un paio di tematiche fra quelle più attuali, anzi si potrebbe dire addirittura “scottanti”: quello della famigerata Fatturazione Elettronica, e quello dello sviluppo di applicazioni modulari e flessibili.

Fabio Codebue ha curato il seminario sulla tanto detestata (e detestabile) Fatturazione Elettronica, la cui obbligatorietà (salvo rinvii dell’ultimo minuto) è sempre più vicina. La scadenza imminente costringe gli sviluppatori software a correre ai ripari: bisogna trovare in fretta soluzioni per consentire a qualsiasi software che possa emettere fatture di generare il tracciato XML secondo gli standard dettati dall’Agenzia delle Entrate.

Assieme a Fabio abbiamo esplorato la storia, talvolta contraddittoria, delle normative uscite nel corso degli ultimi mesi riguardo la struttura del file XML che contiene i dati della fattura vera e propria e delle interazioni previste con il cosiddetto Sistema di Interscambio (SdI), che dovrebbe smistare le fatture tra i soggetti privati e comunicare l’esito delle operazioni.

Fabio ha poi presentato eInvoice4D, una soluzione open source per la Fatturazione Elettronica scritta in linguaggio Delphi.

La libreria è stata rilasciata nottetempo, appena prima della conferenza. E’ attualmente ospitata su GitHub ed è stata sviluppata dal team di delphiForce, un gruppo di volenterosi programmatori Delphi che ha unito le forze per creare questo progetto in grado di gestire le fasi di generazione del file XML e l’invio a uno o più intermediari diversi (es. Aruba).

L’utilizzo della libreria è estremamente semplice: con poche righe di codice, è possibile creare una nuova Fattura Elettronica in memoria, compilarla con dati di esempio o con i dati reali presi dal proprio applicativo o da un’altra fonte, e generare il file XML, ad esempio per esportarlo su disco. In alternativa, è possibile inviare direttamente la fattura al proprio intermediario, purché questo sia supportato da un apposito provider registrato nella libreria; al momento è disponibile solo il provider per Aruba, ma è ipotizzabile che ben presto la rosa degli intermediari supportati si arricchisca con nuovi fornitori, anzi il team stesso invita a partecipare al progetto e a creare nuovi provider a beneficio di tutti.

Il pacchetto comprende inoltre un servizio Windows pronto all’uso (completo di codice) che debitamente configurato (ad esempio, indicando qual è il proprio provider di riferimento) è in grado di monitorare una cartella e procedere all’invio dei file XML contenenti le fatture non appena si presentano: questo permette di ridurre al minimo il codice da scrivere, soprattutto in versioni datate di Delphi, limitandosi a generare il file XML e a salvarlo su disco.

Grazie poi al contributo di altri sviluppatori che hanno collaborato al progetto, il pacchetto si è arricchito di un visualizzatore, e anche il set di icone rappresentanti le fatture, i relativi stati e così via è stato reso disponibile separatamente.

Che cosa volete di più? 😉

Come sempre, mi dispiace non aver potuto seguire il seminario di Maurizio Del Magno e Luca Minuti sullo sviluppo di software che possano accettare di buon grado i cambiamenti, sull’applicazione dei principi SOLID e dei Design Pattern più utili, in breve sulla realizzazione di architetture che siano il più possibile disaccoppiate fra loro allo scopo di aumentarne la manutenibilità e il riuso.

Del resto, purtroppo, non ho la possibilità di sdoppiarmi (anche se pare io abbia maturato quella di… raddoppiare). 😄

La conferenza

Nel pomeriggio, dopo la consueta procedura di registrazione (e il pranzo per chi era presente già dal mattino), i partecipanti hanno preso posto nella sala principale per l’avvio dei lavori della conferenza vera e propria.

Anche il pomeriggio ha visto una presenza cospicua, una sala quasi piena di persone e con un trend di partecipazione sempre in crescita, sintomo della maturità della community e della voglia di partecipare agli eventi che la coinvolgono.

Il rilascio di Delphi Rio e il futuro di Embarcadero

Il giorno appena prima della conferenza è stato rilasciata la nuova versione di RAD Studio (Delphi e C++Builder), ovvero la 10.3, nome in codice “Rio”: non poteva quindi mancare una sessione interamente dedicata alle numerose novità introdotte in questa nuova release.

Prima di questa però, concluse le rituali presentazioni e saluti iniziali, Paolo Rossi ha riepilogato le ultime acquisizioni fatte da Idera, la società a capo di Embarcadero, che nella sua campagna acquisti – oltre alla più nota Sencha – ha fagocitato anche Froala (creatori di un editor JavaScript molto funzionale) e Whole Tomato (che producono un tool di refactoring per linguaggio C++ in Visual Studio). Esiste quindi una possibilità che il know-how di queste realtà porti nuove feature all’interno dei prodotti Embarcadero. Nel frattempo uno dei tool acquisiti dedicato all’amministrazione di database in diversi formati, Aqua Data Studio, è già incluso nella licenza Architect di RAD Studio 10.3 Rio, assieme a una licenza multi-site di RAD Server e una licenza Sencha ExtJS Professional. Sono ottime notizie: il costo relativamente alto dell’edizione Architect trova finalmente una giustificazione rinnovando la propria offerta e includendo prodotti – come ExtJS – che un tempo venivano acquistati separatamente per essere usati in combinazione con Delphi, mentre oggi fanno già parte della stessa famiglia e vengono distribuiti con esso.

L’argomento successivo non poteva che essere la nuova versione di Delphi appena rilasciata. Delphi Rio 10.3 porta con sé diverse novità che si notano fin da subito, appena l’IDE viene lanciato. Buona parte dell’aspetto grafico è stato ridisegnato per rimuovere alcuni difetti congeniti nello stesso, come doppi bordi, colori di primo piano e di sfondo poco evidenti, toolbar che fluttuano in modo disordinato o che contengono pulsanti che vanno a capo lasciando ampi spazi vuoti, altezze disomogenee e così via. Tutto l’ambiente di lavoro ha quindi subito un re-design, con finestre di dialogo migliorate e filtri incrementali per cercare le opzioni e gli elementi al loro interno.

Anche il linguaggio Delphi è stato esteso, forse con una delle possibilità più insolite per il linguaggio Pascal: la possibilità di dichiarare variabili inline, ovvero all’interno del corpo di procedure, funzioni e metodi, e all’interno di blocchi, limitando la loro visibilità a quell’ambito e senza la necessità di dichiarare tutte le variabili esclusivamente nell’apposita sezione a cui siamo abituati. Si può inoltre usare la Type Inference: non c’è bisogno di indicare esplicitamente il tipo della variabile, poiché questo viene determinato automaticamente in base al valore dell’assegnazione.

Sono state inoltre migliorate le performance di alcune classi e routine della RTL, i cui effetti sono visibili nel lancio e nell’uso dell’ambiente di sviluppo oltreché a run time; la parte dei LiveBindings ha subito delle velocizzazioni, rendendo più veloce l’aggiornamento della visualizzazione dei bindings all’interno del Live Designer.

I compilatori ora includono il supporto per le nuove piattaforme mobile iOS 12 e Android 9, assieme a nuove funzionalità che sfruttano le API di Windows 10.

Altre novità di Delphi 10.3 Rio sono riportate nella pagina del prodotto, oltre che nella documentazione (anch’essa rivisitata con un nuovo tema grafico).

Q&A con Marco Cantù

Dopo l’irrinunciabile pausa del coffee break, la platea ha potuto bombardare di domande Marco Cantù, Product Manager di Delphi presso Embarcadero, collegato da remoto.

Selezionando le domande e le risposte più interessanti, è emerso come il team sia impegnato con priorità alta sullo sviluppo del compilatore Mac a 64 bit, molto richiesto.

Qualcuno ha chiesto notizie sui piani per un IDE a 64 bit: Marco ha risposto che al momento non è previsto (del resto, lo stesso Visual Studio è a 32 bit) ma è possibile che vengano portate a 64 bit alcune parti dello stesso (es. compilatore, analisi del codice, ecc.) che verranno scritti per questa architettura laddove porta un effettivo beneficio.

Un po’ di lamentele (giustificate) sono state espresse sui difetti congeniti di LiveBindings: Marco ha confermato che si sta valutando una sua completa re-ingegnerizzazione, piuttosto che l’apporto di pochi e semplici ritocchi. Delphi Rio include comunque già diverse migliorie che riguardano questa tecnologia, segno che l’impegno su questo fronte c’è.

Sono seguiti poi un paio di demo live su altre feature introdotte in Delphi 10.3 Rio: il supporto ai monitor ad alta risoluzione (4K) con l’API di Microsoft PerMonitorV2, l’uso di funzioni che finalmente forniscono valori corretti per le metriche di sistema e che tengono conto delle effettive caratteristiche del monitor in uso, e un demo del nuovo componente VirtualImageList che permette di sostituire la classica “Image List” con una lista di immagini virtuali, ossia generate dinamicamente, a partire da una nuova “Image Collection” che permette di salvare immagini in diverse versioni e dimensioni, adatte a essere ridimensionate con la minor perdita di qualità possibile, un difetto che si nota soprattutto quando queste vengono ingrandite.

Riguardo la versione Community di Delphi, rilasciata durante l’estate, essa è stata aggiornata alla versione 10.3: per gli studenti, gli hobbisti e i curiosi è possibile quindi scaricare una versione completamente gratuita di Delphi, con le stesse feature dell’edizione Professional e con tutte le novità introdotte in Rio.

PWA con Delphi ed ExtJS

Nella sessione seguente, Luca Minuti ha mostrato il demo di una Progressive Web App (PWA) realizzata con ExtJS e Delphi.

Le PWA sono una nuova tipologia di applicazioni Web su cui Google sta spingendo particolarmente, grazie al supporto offerto dal browser Chrome sia su dispositivi mobile che su desktop (ma gli altri browser si stanno gradualmente adeguando).

Per poter essere definite tali, le PWA devono poter offrire un set di caratteristiche particolari: innanzitutto, devono utilizzare la rete senza fare mai comparire la pagina di connessione assente grazie al lavoro svolto da un “service worker”, una sorta di thread in background che esegue in parallelo, scritto in JavaScript, che contiene il codice vero e proprio di gestione dell’applicazione; esso intercetta le chiamate provenienti dall’interfaccia utente, realizzata con i classici HTML e CSS, e gestisce le chiamate per il recupero dei dati, che possono essere scaricati dal server o prelevati dalla cache. Le PWA sono talvolta installabili sul device o sul desktop, vengono avviate in tempi brevissimi, sono performanti, immersive e coinvolgenti; in breve, mimano quasi alla perfezione il comportamento di un’applicazione nativa.

Un altro elemento fondamentale delle PWA è il cosiddetto “manifest”: un file che specifica le caratteristiche dell’applicazione, come il titolo da attribuire, una descrizione, una icona che la contraddistingue, i colori scelti per la barra degli indirizzi (che può essere anche nascosta), i colori per lo sfondo e per il primo piano; in breve, si tratta di un file di configurazione contenente elementi standard e riconosciuti dal browser di turno che forniscono informazioni sull’applicazione e permettono di personalizzare l’esperienza utente.

Si da il caso che ExtJS contenga un template in grado di generare automaticamente un file manifest.json valido e widget già disponibili che, essendo responsive, sono perfettamente adatti a sviluppare una PWA.

Il codice dell’applicazione è scritto in JavaScript, mentre Delphi ha il ruolo di contenere la business logic, fornire eventualmente una Web API invocabile (usando una delle tante librerie disponibili, anche di terze parti, oppure lo stesso RAD Server distribuito con Delphi) e i file statici delle risorse (pagine HTML, fogli di stile, script, immagini, ecc.) che vengono memorizzati nella cache del browser per consentire alla PWA di avviarsi istantaneamente.

Il termine PWA e le specifiche che sottintende sono ancora in fase di definizione e in continua evoluzione, ma è senz’altro una tecnologia da tenere d’occhio per la rapidità con cui si trasforma una applicazione Web in una app mobile (o un app desktop) molto simile a quelle native e ben integrata nell’ambiente operativo.

Delphi Performance Diagnostic

I tempi stretti accumulati nel corso della giornata hanno rubato un po’ di spazio alla sessione di Paolo Rossi sulla diagnostica delle performance delle proprie applicazioni scritte in Delphi.

L’obiettivo della sessione (a mio avviso comunque perfettamente raggiunto) era quello di sensibilizzare gli sviluppatori sull’importanza di misurare il proprio codice e le sue tempistiche di esecuzione: molto spesso si parla di rendere una routine più veloce o più performante, ma in assenza di strumenti che assicurino il “timing” di queste procedure, è impossibile rilevare se una modifica – ad esempio – ha incrementato o diminuito l’efficienza dell’algoritmo o la velocità della procedura stessa.

Oltre alla misura delle prestazioni, un altro suggerimento molto valido è stato quello di registrare e salvare i risultati ottenuti in un archivio permanente, ad esempio in un database; salvando questi dati a ogni modifica, è possibile determinare con maggiore precisione il momento in cui può aver avuto inizio l’eventuale degrado delle performance monitorate, e identificarne quindi la causa in modo mirato.

Ovviamente, per misurare le prestazioni in modo efficace, è necessario utilizzare lo strumento adeguato in base alle esigenze: se dobbiamo calcolare il tempo di esecuzione di una procedura che impiega giorni, una banale differenza tra l’ora corrente e quella di inizio può restituire un time stamp con una precisione sufficiente, poiché senz’altro i millisecondi non sono significativi; per quantificare tempistiche molto più ristrette, potrebbe essere utile ricorrere alla funzione QueryPerformanceCounter() oppure usare la classe TStopWatch presente in Delphi all’interno della unit Diagnostics.

Per un maggiore approfondimento di questa tematica e delle altre trattate durante i seminari e la conferenza, potete scaricare slide e materiale dal sito ufficiale del Delphi Day.

Conclusioni e saluti

La conferenza si è conclusa con l’estrazione di alcuni premi gentilmente offerti dagli sponsor e con il consueto arrivederci al prossimo evento.

Di certo, ce n’è uno a cui non è possibile mancare: la prima conferenza dedicata alla libreria Spring4D, utilizzata da molti sviluppatori Delphi, che si terrà in Italia nell’aprile 2019 e che ha già un sito dedicato da consultare per maggiori informazioni e per registrarvi in anteprima.

Per tutti inoltre c’è l’appuntamento annuale con la “big conference” online organizzata da Embarcadero, CodeRage, ai nastri di partenza nel momento in cui scrivo.

Detto questo, non mi resta che augurare buona programmazione con Delphi Rio e al prossimo Delphi Day! 👌