martedì 8 novembre 2016

Licenze open source

Una delle caratteristiche che ha sempre contraddistinto Delphi è l'ampia disponibilità di componenti e librerie di terze parti, sia gratuite che a pagamento. Molti di questi hanno da sempre dato la possibilità di ottenere i sorgenti. Al giorno d'oggi è possibile trovare molto materiale interessante sui principali siti di condivisione di codice tra i quali ricordiamo: GitHubSourceForgeBitbucket e l'ormai pensionato Google code. Questi siti ospitano codice open source, che ricordo non è sinonimo di gratis, ma significa che è possibile ottenere e modificare il sorgente a patto di rispettare le varie clausole imposte dalla licenza.


Visto che molti di noi usano, e qualche volta contribuiscono alla sviluppo di questo tipo di codice, mi sembrava giusto scrivere un breve vademecum sulle licenze più usate.

Innanzitutto volevo ribadire il fatto che open source non significa gratis. Dipende ovviamente dalla licenza specifica, ma per esempio potete tranquillamente vendere un software con licenza GPL a patto di rilasciare i sorgenti a chiunque abbia una copia del vostro software. Certo, per come funziona la GPL, il licenziatario del vostro software può tranquillamente a sua volta modificare o rivendere il vostro software, di conseguenza alcuni modelli di business non sono praticabili.

In effetti la maggior parte di chi sviluppa in questo ambito guadagna tramite sponsorizzazioni o supporto tecnico a pagamento.

    GPL e LGPL

    «Le licenze per la maggioranza dei programmi hanno lo scopo di togliere all'utente la libertà di condividerlo e di modificarlo. Al contrario, la GPL è intesa a garantire la libertà di condividere e modificare il free software, al fine di assicurare che i programmi siano "liberi" per tutti i loro utenti.»

    Queste sono le prime righe riportate nel preambolo della licenza. È abbastanza evidente il forte messaggio che Richard Stallman voleva dare. Fondamentalmente la licenza impone di rendere disponibili sempre i sorgenti insieme ai file binari di un software. I sorgenti poi possono essere modificati senza particolari limiti se non che versioni derivate dal software originale devono rimanere con la medesima licenza.

    La licenza di solito viene considerata piuttosto restrittiva perché per "codice derivato" si intende anche software completamente separato (come un'altro eseguibile) che usa il software licenziato sotto GPL. Questo di fatto impedisce ad un software commerciale closed source di usare una libreria GPL.

    Proprio per questo esiste anche una versione della GPL più "debole", la LGPL, che non richiede che software linkato al programma sia rilasciato con la stessa licenza. Questo tipo di licenza infatti viene di solito usata dalle librerie. Con questa licenza modifiche alla libreria devono essere rilasciate con la stessa licenza, ma applicazioni separate che usano la libreria non hanno questo vincolo.

    Riferimenti: Testo originale delle licenza, Traduzione non ufficiale in italianoFAQ

      Apache license

      La Apache License nasce con l'omonimo web server. Come la GPL permette di usare il software, modificarlo e ridistribuirlo, ma a differenza di quest'ultima non è necessario che il software derivato abbia la stessa licenza. L'unico requisito necessario è includere un'informativa sul tipo di licenza usata.

      Per quanto riguarda l'uso di librerie sotto licenza apache da parte di applicazioni proprietarie l'unico vincolo è includere nella distribuzione due file: uno in cui si dà credito agli autori della libreria e l'altro con una copia della licenza stessa.

      Riferimenti: Testo originale della licenza

      BSD license

      La licenza BSD è molto simile alla Apache License, di conseguenza è anch'essa estremamente permissiva. Tanto che il software con cui è nata la licenza, il sistema operativo Unix  Berkeley Software Distribution (BSD), è stato incorporato da Apple in Darwin che è a tutti gli affetti un OS closed source.

      La licenza consta di soli quattro punti che riporto testuali dalla traduzione italiana:


      1. Le ridistribuzioni del codice sorgente devono conservare la nota di copyright sopra riportata, questa lista di condizioni e la seguente limitazione di responsabilità.
      2. Le ridistribuzioni in forma binarie devono riprodurre la nota di copyright sopra riportata, questa lista di condizioni e la seguente limitazione di responsabilità nella documentazione e/o altri materiali forniti con la distribuzione.
      3. Ogni materiale pubblicitario che riporti caratteristiche o uso di questo software deve mostrare la seguente attestazione: Questo prodotto include software sviluppati dalla <organizzazione>.
      4. Né il nome della <organizzazione>, né i nomi dei suoi collaboratori possono essere utilizzati per avallare o promuovere prodotti derivati da questo software senza uno specifico permesso scritto.


      Di conseguenza le uniche accortezze per chi usa librerie con questa licenza sono contenute negli ultimi due punti: la necessita di citare gli sviluppatori originari ma senza che questo faccia intendere che questi ultimi promuovono il prodotto finale.

      Riferimenti: Testo originale della licenza

      MIT license

      La licenza MIT è stata creata dal Massachusetts Institute of Technology (MIT) ed è addirittura più permissiva della BSD. Chi licenzia software sotto MIT license deve solo includere il file di licenza, mentre chi lo usa a tutti gli effetti non ha nessun limite particolare. In pratica la licenza contiene solo una generica clausola di esclusione di responsabilità.

      Riferimenti: Testo originale delle licenza

      MPL

      La licenza MPL (Mozilla Public License) è stata creata da Netscape Communications Corporation durante lo sviluppo del browser open source Mozilla. La licenza nasce come un ibrido tra le licenze molto permissive come MIT/BSD e più restrittive come GPL.

      In pratica è permessa la modifica dei file sorgenti originali del prodotto solo a condizione che siano resi disponibili a chiunque abbia la versione binaria del codice con lo stesso tipo di licenza. È invece possibile aggiungere nuovi file al prodotto con licenze diverse e senza la necessità di ridistribuirli.

      Riferimenti: Testo originale della licenzaFAQ

      lunedì 7 novembre 2016

      Conferenza Delphi Porte Aperte 2016



      Wintech-Italia s.r.l. organizza anche quest’anno l’evento Delphi Porte Aperte, un incontro, gratuito, di mezza giornata per un aggiornamento sullo stato attuale di Delphi.

      L'evento in edizione 2016 raddoppia! Al pomeriggio il classico evento gratuito di mezza giornata dedicato a tutti i programmatori Delphi ansiosi di conoscere le novità dello strumento di sviluppo. Al mattino sono previsti due seminari a pagamento ad alto contenuto tecnico tenuti da Paolo Rossi e Luca Minuti.

      Conferenza: Lo stato dell'arte di Delphi


      L'incontro offre una panoramica sullo "stato dell'arte" di Delphi, a partire dagli aspetti più generali, per affrontare elementi architetturali (come linguaggio e librerie), per parlare anche delle novità più recenti con particolare attenzione all'apertura multipiattaforma di Delphi (MacOSX, iOS, Android, Linux). L'incontro si propone di essere fondamentalmente un momento di scambio e discussione tra i partecipanti.

      Il biglietto di ingresso gratuito comprende l'ingresso alla conferenza del pomeriggio e il coffee break
      Eventbrite - Delphi Porte Aperte 2016


      Seminari: Applicazioni stabili e sicure


      Nella Sala A si terrà il seminario dal titolo: Eccezioni e debug: avere il controllo delle applicazioni
      Quante volte una vostra applicazione in deployment dal cliente ha dato errori oppure si è bloccata in modo anomalo senza alcuna indicazione? Quante volte avete perso ore nel tentativo di debuggare codice complesso senza venirne a capo?
      Seguendo questa sessione imparerete tutti i trucchi per avere il controllo completo delle vostre applicazioni soprattutto quando queste diventano instabili, vedremo come tenere sotto controllo anche le applicazioni che girano sulle macchine dei clienti senza più avere errori "sconosciuti"


      Nella Sala B si terrà il seminario dal titolo: Sviluppare applicazioni (più) sicure
      La possibilità di accedere alle applicazioni fuori dalle mura aziendali ha portato una serie di problematiche sia nelle applicazioni web che in quelle tradizionali. In questo seminario parleremo dei problemi di sicurezza più rilevanti dal punto di vista dello sviluppatore. Verranno presentate le tecniche di hacking più comuni (come SQL Injection e XSS) e i metodi per prevenirle. Inoltre parleremo di sicurezza dei dati, delle password e qualche accenno sui protocolli di rete e sulla crittografia. In dettaglio, vedremo come sviluppare applicazioni più sicure

      Il biglietto di ingresso per i seminari comprende l'ingresso ai seminari, alla conferenza, al pranzo e ai coffee break
      Eventbrite - Delphi Porte Aperte 2016





      Agenda conferenza
      13:45Registrazione dei partecipanti
      14:20Delphi: Presente e Futuro
      Paolo Rossi - Wintech Italia
      Il punto della situazione sulla salute di Delphi e dell'ecosistema. Le nuove piattaforme supportate, la roadmap di Delphi in dettaglio, tutto l'occorrente per predire il futuro del nostro strumento di sviluppo
      15:00RTL: Cosa vi siete persi nelle ultime versioni di Delphi
      Luca Minuti - Wintech Italia
      Siamo abituati ad associare ogni nuova release di Delphi ad un numero limitato di caratteristiche rilevanti: il supporto ad una nuova piattaforma, un nuovo modello di sviluppo (web, mobile, ..) o l’integrazione con qualche nuovo DB. In realtà ogni nuova versione comprende tante piccole aggiunte e migliorie che sommate assieme possono cambiare il modo in cui scriviamo il codice. In questa sessione faremo una carrellata su alcune di quelle più rilevanti
      15:50Coffee Break
      16:10Delphi per Linux: Come preparare il proprio codice
      Paolo Rossi - Wintech Italia
      Delphi per Linux sta per arrivare, ma voi siete pronti a compilare il vostro codice per questa piattaforma? In questa sessione vedremo in dettaglio come cominciare già da subito a scrivere codice compatibile con la piattaforma Linux
      17:10Application Server REST con WiRL
      Paolo Rossi, Luca Minuti - Wintech Italia
      Per lo sviluppo multipiattaforma (Mac OS, Android iOS e Linux) e per lo sviluppo web l'application server è diventato un elemento basilare delle architetture software. In questa sessione vedremo come utilizzare una delle più moderne librerie REST per Delphi (WiRL) per costruire facilmente un servizio REST
      17:50Domande e discussione finale
      Spazio per le vostre domande
      18:15Conclusione



      Agenda seminari
      08:45Registrazione dei partecipanti
      09:20Track 1: Eccezioni e debug: avere il controllo delle applicazioni
      Paolo Rossi - Wintech Italia

      Quante volte una vostra applicazione in deployment dal cliente ha dato errori oppure si è bloccata in modo anomalo senza alcuna indicazione? Quante volte avete perso ore nel tentativo di debuggare codice complesso senza venirne a capo?

      Seguendo questa sessione imparerete tutti i trucchi per avere il controllo completo delle vostre applicazioni soprattutto quando queste diventano instabili, vedremo come tenere sotto controllo anche le applicazioni che girano sulle macchine dei clienti senza più avere errori "sconosciuti":
      • Le eccezioni queste.. sconosciute??
      • Salvataggio di file di log e di report sulle eccezioni
      • Il ruolo dello stack nella gestione delle eccezioni
      • L'uso di strumenti esterni di gestione delle eccezioni
      • Procedure di debug basilari ed avanzate
      • Debugging di applicazioni multithread
      • Debugging remoto con Delphi
      09:20Track 2: Sviluppare applicazioni (più) sicure
      Luca Minuti - Wintech Italia

      La possibilità di accedere alle applicazioni fuori dalle mura aziendali ha portato una serie di problematiche sia nelle applicazioni web che in quelle tradizionali. In questo seminario parleremo dei problemi di sicurezza più rilevanti dal punto di vista dello sviluppatore. Verranno presentate le tecniche di hacking più comuni (come SQL Injection e XSS) e i metodi per prevenirle. Inoltre parleremo di sicurezza dei dati, delle password e qualche accenno sui protocolli di rete e sulla crittografia.

      In dettaglio, vedremo come sviluppare applicazioni più sicure:
      • (SQL) Injection, XSS
      • Validazione dell'input
      • Social engineering
      • Sicurezza delle password
      • Sicurezza dei dati
      • Crittografia, Connessioni SSL
      • OTP, password, biometriche
      • Autenticazione e autorizzazione
      11:00Coffee Break
      12:30Conclusione e Pranzo


      La conferenza ed i seminari si svolgeranno presso:
      Hotel Sheraton Padova (Four Points)
      Corso Argentina 5
      35129 Padova

      mercoledì 19 ottobre 2016

      FireMonkey o VCL, questo è il dilemma!

      Inauguriamo con questo articolo una sezione del blog dedicata alle traduzione in italiano degli articoli più interessanti pubblicati sul blog #Embarcadero! Abbiamo l'onore di battezzare questa rubrica proprio con un articolo di Jim McKeeth, Lead Developer Evangelist, su un tema molto discusso: FireMonkey o VCL?

      FireMonkey vs VCL.

      Di frequente, quando parlo di VCL o FireMonkey, ricevo alcune tra le domande più comuni:
      • La VCL è obsoleta?
      • È migliore FMX o VCL?
      • Se iniziassi a pensare ad un app oggi, dovrei usare VCL o FMX?
      Alla prima domanda è facile dare una risposta, le altre due sono un po’ più difficili. 

      La VCL (o Visual Component Library) non è obsoleta, e non lo sarà nemmeno a breve. Finché ci saranno Windows e le Windows API, ci sarà la VCL. Di recente, Marco Cantù nel webinar su Windows 10 dice: “La VCL è la miglior libreria per lo sviluppo Windows desktop e sfrutta pienamente Windows 10”.
      La VCL ha molto spesso nuovi componenti e caratteristiche e i suoi bug vengono corretti, ma forse non così spesso come per FireMonkey. La ragione è che la VCL è un framework maturo, mentre FireMonkey va via via crescendo rispetto alle versioni passate (sebbene ultimamente si sia stabilizzato molto e stia raggiungendo uno stato più maturo).
      Dunque qual è meglio usare? Non c’è una risposta inequivocabile, posso però dirvi i vantaggi di ciascuno, così che possiate fare una scelta consapevole per il vostro prossimo progetto.

      Visual Component Library (VCL)


      La VCL è stata rilasciata con la prima versione di Delphi. 

      Si tratta più che altro di un wrapper sui controlli Windows API. Ma include anche molti controlli Owner Draw. Usa gli handle di Windows ed è basata sui Windows Messages. Ciò la rende soggetta allo stesso comportamento del 90% delle altre applicazioni Windows. Se vuoi, puoi trasferire un pulsante VCL dalla tua app ad un’altra o inoltrare i messaggi inviati ad un’app differente e reindirizzarli alle tue.
      Come già detto, la VCL è una libreria matura, così come i componenti di terze parti. Ci sono migliaia di controlli, librerie e componenti VCL di alta qualità.

      Probabilmente i più notevoli sono le griglie. Le griglie VCL sono le migliori nel settore e, per ovvie ragioni, i nostri partner tecnologici hanno creato griglie VCL prima che qualche altra piattaforma avesse l’idea del controllo sulle terze parti. Dunque, se vuoi la migliore griglia al mondo, devi probabilmente usare la VCL (sebbene le griglie di FireMonkey stiano guadagnando terreno velocemente).
      Siccome la VCL è più che altro un wrapper sui Windows API, le applicazioni sono molto più piccole di quelle di FireMonkey.  Ad ogni modo, questo non sarebbe un grosso vantaggio vista la velocità di download e le grandi dimensioni di dischi di oggi. Ma se vuoi un’applicazione piccola e leggera, allora VCL potrebbe essere una buona scelta.
      Dato che la VCL è uscita da un po’, è possibile trovare pezzi di codice già scritti da integrare nella tua applicazione. Puoi usare una utility come Mida converter per convertirli per FireMonkey, o anche Monkey Mixer o TFireMonkeyContainer per mettere insieme FireMonkey e VCL.
      Generalmente, se sto costruendo una semplice applicazione con dbgrid e so che girerà su Windows, allora userò VCL, oppure se ho bisogno di manipolare un controllo di terze parti, o elementi di Windows API che richiedono dei messaggi Windows. Sebbene sia sempre meno frequente.


      FireMonkey Cross Platform Framework (FMX)


      Dato che FireMonkey è un framework più nuovo, tendi a vederlo più sicuro.

      Molte persone stanno ancora imparando ad usarlo e come affrontare lo sviluppo della cross platform. Il vantaggio principale di FMX è che è stato pensato da cima a fondo per essere un cross platform development. Questo ti permette di definire un’interfaccia singolo utente che giri bene e si adatti a Windows, iOS, macOS e Android. Ma non è l’unica ragione per usare FireMonkey.

      FireMonkey è basato sugli ultimi framework GPU: DirectX per Windows e OpenGL per gli altri.

      Supporta modelli rendering sia 3D che 2D, entrambi “hardware accelerated”. Se vuoi effetti grafici d’impatto o il 3D, allora FireMonkey dovrebbe essere la tua prima scelta. Ne esistono di potenti anche per VCL, ma FireMonkey ce li ha radicati nel suo “DNA”.
      FireMonkey è anche molto flessibile.  Puoi integrare ogni altro controllo con FireMonkey. L’abilità di costruire controlli eterogenei trasforma il più piccolo set di controlli che FireMonkey include in un set di controllo molto più consistente. Ci sono anche animazioni ed effetti che ti permettono di costruire, con il mimino sforzo, ricche interfacce utente.
      VCL ha un set di containers e alignments di tutto rispetto, ma quello di FireMonkey lo è molto di più e, di nuovo, è molto più flessibile. Un’altra grande differenza è che FireMonkey usa un numero preciso di "floating point number" invece di integrarli nel laying out dei controlli.

      Una precisione molto più elevata, ma in genere questo non è molto interessante. Ciò che fa la differenza è che quando fai una scala su FireMonkey, questo supporta una densità multi-pixel.
      La ragione più ovvia per usare FireMonkey è se stai pensando di indirizzarti verso le multi piattaforma o se pensi di farlo in futuro (il che è molto probabile). Altre ragioni sono se vuoi una UI più flessibile o se sta pensando di approfittare dei vantaggi che hanno il 3D o altri effetti che FireMonkey fornisce.

      Conclusione


      In breve, VCL è incredibile è continua ad avere correzioni e nuovi elementi. È il miglior framework interfaccia utente che esista, eccetto forse FireMonkey. 
      Perciò, potresti utilizzare VCL quando destini a Windows i tuoi progetti o quando non hai bisogno del 3D, degli effetti o della flessibilità di FireMonkey. Potresti invece usare FireMonkey quando sei indirizzato verso le multi piattaforme, o hai bisogno di più flessibilità, specie per la parte grafica.

      Entrambi i framework resisteranno a lungo. Se li userai entrambi potrai capire quale utilizzare in ogni circostanza.

      venerdì 15 luglio 2016

      MongoDB & Delphi

      In questo articolo vedremo come utilizzare MongoDB con Delphi.

      Questa non vuole essere una guida dettagliata a MongoDB, potete trovare ovunque una marea di informazioni, partendo ad esempio dal sito ufficiale: https://docs.mongodb.com/


      Cos'è MongoDB

      è un database nosql, orientato al documento, per fare un paragone con un database relazionale:

      RELAZIONALE (Oracle, Firebird, ...)
      MongoDB
      TABELLA
      Collection
      RECORD
      Document
      COLONNA
      Field
      SELECT * FROM ANAGRAFICA
      db.anagrafica.find()
      INSERT INTO ANAGRAFICA
      db.anagrafica.insert({}}


      I punti di forza di MongoDB e i motivi principali per cui utilizzarlo sono:

      • Scalabilità
      • Performance
      • Alta affidabilità, grazie ai replica set
      • Flessibilità, non esiste il concetto di schema di una tabella, ogni documento di una collection può essere diverso dall'altro

      Personalmente ho trovato vincente un approccio misto, utilizzando molte tabelle di un classico database relazionale e solo poche collection in un db nosql, dove sono contenuti dati dernomalizzati per un accesso rapido alle informazioni.

      MongoDB utilizza il formato JSON per la visualizzazione dei dati e il linguaggio JavaScript, è quindi vivamente consigliato conoscere entrambi.

      Esempio di documento in JSON:

      {
             "nome": "Luca",
             "indirizzo": "Via del Popolo 20",
             "figli": [
                   { "nome": "Annamaria", "eta": 3 },
                   { "nome": "Luigi", "eta": 2 }
             ]
      }


      Installazione
      (Windows)



      dal prompt del dos, eseguire:

      mongod


      per poter accedere alla console interattiva, da cui è possibile fare operazioni CRUD, aprire un altro prompt del dos e digitare:

      mongo

      use anagrafica


      // Create:
      db.anagrafica.insert({
          "nome": "Mario",
          "indirizzo": "Via Veneto 10",
          "hobby": "Calcio"
      })

      // Read:
      db.anagrafica.find()

      // Per visualizzare meglio il risultato:
      db.anagrafica.find().pretty()

      // Update:
      db.anagrafica.update({}, {
           $set: {"nome": "Luigi"}
      })

      // Delete: (all)
      db.anagrafica.drop()


      Alcune considerazioni:
      • Il comando use <nome-database> permette di passare al db in questione o a crearne uno nuovo se non esiste
      • Ogni comando CRUD inizia con "db."
      • Il comando insert su una collection che ancora non esiste (ad esempio db.anagrafica.insert({})) crea prima automaticamente la collection
      • Le operazioni di default che compongono i comandi iniziano con il simbolo di $
      • Il comando update, esegue l' update del primo record trovato


      Delphi

      Per l'utilizzo con Delphi esistono diverse soluzioni:

      In questo articolo utilizzerò i componenti FireDAC con Delphi 10.1 Berlin.

      Ho creato un semplice progetto demo CRUD:




















      In particolare per la lettura dei dati utilizzo il componente visuale:
      FDMongoQuery
      utilizzandolo come un DataSet standard:


      while not FDMongoQuery.Eof do
      begin
        LogMessage('Record: ' + FDMongoQuery.FieldByName('name').AsString);
        FDMongoQuery.Next;
      end;


      Per l'inserimento dei dati utilizzo questi oggetti (non visuali):
      TMongoConnection, TMongoDocument, TMongoEnv

      che utilizzano un approccio fluent per la creazione del documento MongoDB:

          MongoDoc := MongoEnv.NewDoc;
          try
            MongoDoc
              .Add('name', 'Name ' + IntToStr(i) + ' - Record ' + IntToStr(i))
              .Add('age', IntToStr(i));
            MongConn[DB_NAME][COLLECTION_NAME].Insert(MongoDoc);
          finally
            MongoDoc.Free;
          end;


      Per ulteriori approfondimenti vi consiglio di vedere questo video:
      https://www.youtube.com/watch?v=_YxKUFSyV7U

      Il codice sorgente si trova qui:

      In particolare il file principale è questo:



      lunedì 20 giugno 2016

      Usare OpenSSL da Delphi

      Per chi ha fretta

      Su bitbucket (principale) o github (copia) è possibile scaricare una libreria Delphi che consente di usare alcune funzioni crittografiche di OpenSSL.

      Introduzione

      Nei mesi scorsi mi è capitato di dover cifrare dei messaggi tramite un algoritmo a chiave pubblica, in particolare RSA. Inizialmente, vista anche l'esegua mole di dati, abbiamo scelto di lanciare da linea di comando OpenSSL. Ovviamente non eravamo particolarmente soddisfatti della soluzione e appena abbiamo trovato un po' di tempo abbiamo creato una piccola collezione di classi attorno a libeay32, la libreria che espone tutte le API di OpenSSL.


      openssl1.png

      Funzionalità

      Le funzionalità al momento si riducono alla cifratura con RSA (quindi a chiave pubblica) e con AES (chiave simmetrica). Visto che il progetto era nato chiamando OpenSSL attraverso la linea di comando anche le classi sono state modellate seguendo le funzionalità offerte da OpenSSL.EXE. In particolare l'area OpenSSL RSA è implementata dalla classe TRSAUtil, mentre l'area OpenSSL ENC da TEncUtil.


      Le idee per il futuro sono diverse, innanzitutto togliere le dipendenze dai componenti Indy, infatti al momento, uso le unit IdSSLOpenSSLHeaders e IdSSLOpenSSL che contengono alcune dichiarazioni necessarie (prototipi, record, costanti, ecc). Poi implementare le restanti funzioni di RSA, in particolare firma e verifica della firma. Inoltre aggiungere altri algoritmi di cifratura a chiave simmetrica.

      Licenza di Delphi-OpenSSL

      Delphi-OpenSSL è distribuita secondo i termini della Apache License che consente di usare il software senza restrizioni di sorta, di distribuirlo, modificarlo e di distribuire versioni modificate del software.


      La Licenza Apache NON richiede che versioni modificate del software siano distribuite secondo i termini della stessa licenza o come software libero ma solo che si includa un'informativa del fatto che si è utilizzato software licenziato secondo i termini della Licenza Apache.

      Licenza di OpenSSL

      Dovete tenere anche conto che per usare Delphi-OpenSSL sicuramente dovrete installare anche OpenSSL stesso. La licenza è un po' particolare ma fondamentalmente potete farci quello che volete a patto che includiate da qualche parte questa dicitura: "This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit".


      Leggetevi bene anche il README.txt compreso nella distribuzione di OpenSSL perché in alcuni paesi, per esempio gli Stati Uniti, ci sono delle restrizione sull'esportazione di tecnologie crittografiche.

      Luca Minuti

      martedì 19 aprile 2016

      La nuova versione di Delphi: 10.1 Berlin

      RAD Studio10.1 Berlin


      Da poche ore è stata rilasciata la nuova versione di Delphi/C++/RAD Studio: 10.1 Berlin.

      La prima sorpresa nel nome, dopo che sulla roadmap era stata segnalata con il code name "BigBen", ecco invece che il nome ufficiale vira sul teutonico Berlin :-)

      Fortunatamente non è l'unica novità da segnalare, anzi in quest'articolo mi soffermerò solo su quelle che ritengo più interessanti, per una lettura completa vi rimando quindi all'elenco delle novità di questa versione.

      Nuovo installer

      La novità più visibile (anche perchè è la prima che si incontra) è il nuovo installer, completamente rifatto e sensibilmente più veloce e snello.

      Opzioni installer

      Dopo una prima selezione di percorso di destinazione e alcune opzioni generali, viene installata in pochissimi minuti una prima versione di RAD Studio (funzionante, è possibile infatti usarla come generico editor), in seguito verrà presentata una finestra per selezionare le successive funzionalità che si desidera installare.

      Feature Installer: platform selection
      Come potete vedere adesso è possibile selezionare in modo chiaro le piattaforme da installare salvando quindi spazio su disco e tempo di installazione.
      Con una successiva finestra è poi possibile scegliere di installare alcuni componenti aggiuntivi come l'help, gli esempi ed alcuni componenti tipicamenti distribuiti con Delphi.

      Feature Installer: option selection
      L'aspetto interessante è che, se in un secondo momento volessimo aggiungere ulteriori piattaforme basterebbe invocare ancora il "Feature Installer/Manager" per aggiungerla alla nostra installazione.
      Ricordatevi, una volta terminata l'installazione, di lanciare GetIt per installare componenti opzionali che prima invece erano parte dell'installer (CodeSite, IoT, ecc...)


      GetIt Package Manager - IoT components

      Personalmente mi sembra un enorme passo in avanti rispetto all'attuale "esperienza di installazione".

      Il nuovo installer funziona solamente "online" (per questa versione almeno), se qualcuno avesse bisogno di una installazione offline può usare il vecchio installer che sarà comunque possibile scaricare.

      IDE


      Floating Form Designer

      Un gradito ritorno, adesso Delphi può essere usato anche in modalità "floating" (alla Delphi 7 per intenderci), per abilitare la modalità andate nel menu:
      Tools -> Options > Form Designer e togliete il check sull'opzione Embedded Designer

      FireUI Live Preview

      FireUI Live Preview

      Fa la comparsa in 10.1 Berlin un nuovo strumento, la FireUI Live Preview, che serve a vedere come si presenta l'applicazione sui diversi device, tutto ciò mentre si lavora nell'IDE, Un tool davvero molto potente che IMO amplia ulteriormente il divario di Delphi rispetto ad altri strumenti di sviluppo per app mobile per quanto riguarda la progettazione visuale delle viste.

      Lo strumento si basa sull'architettura client/server dove l'IDE funge da server accettando connessioni dai client (i vari device) per spedire "live" la form in progettazione.

      La tecnologia usata per realizzare questo tool la conosciamo già bene: App Tethering, framework di comunicazione introdotto in Delphi XE6.

      High DPI Awareness

      L' IDE è adesso completamente DPI-aware. Una feature richiesta a gran voce soprattutto con l'introduzione degli schermi ad altissima densità di pixel (maggiore di 96 PPI)

      Bookmark Stack

      Questa è un'interessante funzionalità per una navigazione nel codice più potente e allo stesso tempo semplice. E' possibile ora definire una serie di bookmark che verranno visualizzati in una pila (stack)  potendo navigare, con una logica LIFO, su questi bookmark.

      Selection Expansion

      Da fanatico della tastiera quale sono questa funzionalità mi fa molto piacere, premendo Ctrl-W  è possibile espandere la selezione dall'identificatore, alla riga selezionata, al blocco di statement, all'intera procedura, alla sezione implementation fino ad arrivare all'intera unit. Ho qualche perplessità solo sulla scelta del tasto rapido, visto che in altri sistemi operativi e (anche in molte applicazioni Windows) questo tasto rapido corrisponde alla chiusura della finestra attiva!

      Method Toxicity Metrics


      Metrica Method Texicity

      Altra cosa molto interessante che dovrebbe essere usata a tappeto su tutti i metodi delle nostre applicazioni. E' una metrica che ci suggerisce quando un metodo avrebbe bisogno di refactoring, ovvero di una bella.. rivisitata. La metrica si basa su parametri quali: la lunghezza (numero di righe), il numero di parametri, il numero di livelli di if, dando come risultato un numero che ci dice appunto quanto il metodo sia.. "tossico" :-)

      Come tutte le metriche ricordate che cercano solo di aiutarci a migliorare la struttura del nostro codice cercando di farci abbandonare quelle "brutte abitudini" e farci adottare uno stile di scrittura del codice più... sano, quindi, usatele!

      Altre modifiche migliorie nell'IDE includono:

      • Structure View Improvements for C++
      • Android Service Improvements
      • Support for Running iOS Ad hoc Applications
      • Customizable info.plist File
      • Design-Time Improvements for Android Smart Watches
      • GetIt Dependencies
      • New Options Page for File Associations
      • New Option to Show Information Messages from the Delphi Compiler


      Utilities


      The Java2OP.exe tool now works with JDK 8.
      New SdkTransform.exe tool. It can be used to convert Objective-C or C++ headers to Delphi headers.

      Per tutti quelli che abitualmente si devono interfacciare con codice scritto in altri linguaggi questi due tool sono fondamentali soprattutto (per quanto mi riguarda) il nuovo strumento SdkTransform che (promette) di convertire automaticamente gli header C++ in Pascal. Sono curioso di testarlo, staremo a vedere.

      FireMonkey


      Supporto Android 6.0

      Supporto ufficiale per Android 6 (API Level 23)

      Componente TAddressBook


      Address Book
       Per le piattaforme mobile è disponibile un nuovo componente (TAddressBook) che permette alle app di accedere alla rubrica :


      • Sending a request to access a device Address Book and getting the access status.
      • Accessing all sources defined in the device Address Book.
      • Fetching all or individual contacts from specified source.
      • Fetching all contacts from specified group(s).
      • Editing or removing existing contacts and groups.
      • Creation of new contacts, creation of new groups.



      Improved Style Designer


      Style Designer

      Altra cosa attesa da tutti gli sviluppatori FireMonkey: un deciso miglioramento allo Style Designer con una finestra di preview, il supporto allo zoom e il supporto alla multi selezione nella vista struttura.

      New ListView Item Designer

      ListView Item Designer

      Sempre su FireMonkey, il controllo ListView ha un nuovo tipo di ItemAppearance: DynamicAppearance che si può usare per personalizzare il contenuto di ogni singolo item. In aggiunta se si clicca con il pulsante destro la ListView nel Form Designer e si seleziona la voce Toggle DesignMode, è possibile visualizzare un editor che consente di editare visualmente i controlli piazzati sugli item.

      Altre migliorie/novità sulla piattaforma FireMonkey:

      • Extended Clipboard Support Service
      • Improvement on the Image List Editor
      • TGrid Improvements
      • High DPI Support on Windows
      • Improved Support for Accelerator Keys
      • Support for Extended Font Styles
      • Hint Property Changes
      • Simplified Dialog API


      RTL


      Miglioramenti su TStrings e TStringList

      C'è poco da dire, TStringList è forse la classe più utilizzata di tutta la RTL. E' sempre stata una classe versatilissima adatta a diversi "task" e, anche se ultimamente è stata affiancata dalle altrettanto utili classi: liste di oggetti, dictionary, stack e queue, la string list è indubbiamente quella più usata.

      Dalla versione 10.1 Berlin la classe TStrings guadagna queste funzionalità:

      • Metodo AddPair, per aggiungere coppie key-value alla lista potendo anceh usare lo stile "fluent": LList.AddPair('Nome', 'Paolo').AddPair('Cognome': 'Rossi');
      • Proprietà KeyNames, per ottenere una lista di key da una lista di stringhe in formato key-value
      • Proprietà Options, per controllare le opzioni associate alla stringlist
      • Metodo SetStrings, per copiare stringhe da un altro oggetto TStrings. E' simile al metodo Assign ma SetStrings copia solo le stringhe senza toccare le altre proprietà (che invece Assign copia)
      • Proprietà TrailingLineBreak, determina se la proprietà deve contenere un line break alla fine oppure no.
      • Proprietà di sola lettura Updating, indica se la lista è impegnata in una operazione di update
      • Proprietà UseLocale, determina quali funzioni sono usate per il confronto delle stringhe, se True vengono usate AnsiCompareStr/AnsiCompareText, se False vengono invece usate CompareStr/CompareText
      • La classe TStringList ha nuovi costruttori (overloaded) che consentono maggior libertà in fase di inizializzazione

      Miglioramenti sulla classe TMemIniFile

      Per chi usa la classe TMemIniFile queste sono interessanti aggiunte, vediamole:
      • E' possibile adesso specificare la proprietà CaseSensitive nel costruttore
      • La nuova proprietà Modified indica se il file INI è stato modificato dal suo caricamento da disco.
      • La nuova proprietà AutoSave determina se l'istanza di TMemIniFile deve automaticamente salvare su disco i cambiamenti al momento della sua distruzione.

      Supporto buffering per la classe TFileStream

      Un grazie a FireDAC che "regala" alla RTL una sua classe, la classe TFDFileStream è stata infatti spostata nella unit System.Classes ed è stata rinominata in TBufferedFileStream.
      La classe TBufferedFileStream è un TFileStream discendente che ottimizza sensibilmente brevi letture o scritture consecutive, ovvero, aggiunge il supporto al buffering ai file stream.

      Support Bluetooth LE e Beacon su Windows 10


      Finalmente la possibilità di usare Bluetooth LE e Beacon anche in Windows 10, per me molto utile soprattutto per testare un'applicazione BluetoothLE/Beacon in Windows senza continuamente passare per il deploy sul device. Il supporto in Windows 10 include:
      • Improved Bluetooth LE Discovery Performance
      • Bluetooth LE Includes New Events to Handle Subscriptions to Characteristics
      • Eddystone Beacon Format Support
      • Improved Beacon Scan Performance
      • TBeaconDevice Component Supports Eddystone Beacon Format

      Ottimizzazione delle Regular Expressions

      Buonissimo risultato di ottimizzazione delle RegEx (che uso sempre di più nella gestione di stringhe). L'ottimizzazione è sia sul tempo di esecuzione sia sull'uso di memoria!
      Se guardate la wiki mostra una prova in cui il tempo di esecuzione di una serie di match passa da 5900ms a 29ms, un guadagno di oltre 300 volte!

      Ottimizzazione sulla funzione StringReplace 

      Le performance della funzione StringReplace sono state particolarmente ottimizzate, può sembrare un miglioramento insignificante ma in tutti i programmi che ho visto StringReplace è pesantemente utilizzata e quindi... benvenuta a questa miglioria.

      Migliorie App Tethering

      App Tethering è una interessante tecnologia che, introdotta in Delphi XE6, ha conosciuto release dopo release significanti aggiunte, migliorie e ottimizzazioni. Vediamo quelle in questa release:
      • Due nuovi network adapters che forniscono il supporto multicast per IPv4 e IPv6.
      • E' possibile specificare un range di indirizzi IPv4 come target del remote manager per l'auto discovery.
      • Supporto per il Log filtering. E' adesso possibile dis/abilitare il log per uno specifico item dell'architettura app tethering.
      • I profili possono permettere o meno connessioni da profili remoti.

      Comunicazione HTTP, web programming

      Le prossime funzionalità sono particolarmente interessanti a tutti quelli che si occupano di programmazione web oppure di framework di comunicazione (come la libreria REST MARS). Nel dettaglio:
      • Supporto per le operazioni asincrone HTTP
      • Supporto per i file ZIP criptati
      • Supporto per i client HTTP per la decompressione automatica di un contenuto "gzippato" spedito dal server
      • Migliorie sulla connessione HTTP
      • Funzioni di URLEncode/URLDecode
      • Le stringhe UTF8String and RawByteString sono adesso supportate anche sulle piattaforme mobile (iOS, Android)


      Compilatore


      Anche queste aggiunte e migliorie sono "nascoste" ma comunque importantissime, vediamole nel dettaglio.

      Miglioramenti delle performance nella compilazione dei generics

      I compilatori Delphi hanno visto numerosi cambiamenti che riguardano la gestione dei generici risultanti in diversi miglioramenti:
      • Il parsing dei generici è adesso fino a 3 volte più veloce
      • Le performance dei compilatori DCC32, DCC64 e DCCOSX quando linkano progetti che usano estensivamente i generici estensivamente sono decisamente aumentate.

      Attributi supportati da tutti i compilatori

      Adesso tutti i compilatori Delphi supportano i seguenti attributi:
      • unsafe: permette di annotare il risultato di una funzione per non farla gestire al sistema ARC
      • volatile: utile per annotare un campo di classe che possono essere cambiati dall'interno di differenti thread (il codice quindi per questi campi non viene ottimizzato dal compilatore copiando il contenuto nei registri CPU)
      • weak: Utile per annotare un campo come una "weak reference" ovvero che non incrementa il reference count del'oggetto a cui punta

      Modifica su class e record helper

      Attenzione! Questa modifica potrebbe avere un impatto sul codice già scritto se avete usato (o usato da librerie impiegate da voi) i class e record helper. Dalla versione 10.1 Berlin infatti gli helper non hanno più visibilità siu membri privati. A mio avviso una chiusura di una falla logica (non sicuramente un bug vero e proprio) che rischiava di far nascere codice "sporco".

      Altre migliorie sui compilatori Delphi

      • The memory allocated to conditional symbols has been extended from 256 bytes to 4096 bytes.
      • The size of Extended is now 16 bytes to be compatible with BCCOSX

      EMS (Enterprise Mobility Services)

      EMS System Diagram

      EMS sta conoscendo un'evoluzione costante da quando è stato introdotto e, pur avendo una policy di deployment che non è graditissima alla stragrande maggioranza dei programmatori Delphi, dobbiamo dire che tecnologicamente si appresta a diventare un framework davvero interessante. Le aggiunte e migliorie in questa release;
      • Apache Server Support
      • Cross-Domain API Calls to the EMS Server
      • EMS EdgeModules
      • EMS EdgeModules Resource
      • ThingPoints Overview
      • EMS API Resource
      • Custom API Documentation

      (Mie) Opinioni sulla release 10.1 Berlin


      Ovviamente adesso posso giudicare solo sulla carta tutte queste novità e funzionalità, è chiaro che il responso definitivo verrà espresso dopo un adeguato uso di questa versione.
      Ma... vedendo la lista di novità e l'impegno effettivo nel bug fixing e in una generale revisione anche di dettagli (ma sempre importanti) si denota un'attenzione reale verso il prodotto e non solo focalizzata sulle "selling features". Date uno sguardo anche all'impressionante lista di bug fissati in questa release!

      Concludo la recensione della release 10.1 Berlin puntandovi al documento della feature matrix per avere un dettaglio (anche troppo) su tutte le funzionalità divise a seconda della edition (Starter, Professional, Enterprise) in vostro possesso.

      Embarcadero focalizzata sugli sviluppatori

      L'ultimo paragrafo è relativo ad un recente annuncio.

      Embarcadero, da poco acquisita da IDERA (leggi qui l'articolo), dopo aver svelato la roadmap per i prossimi mesi annuncia di focalizzarsi esclusivamente sugli strumenti di sviluppo (Delphi, C++ Builder, RAD Studio, Interbase) mentre gli strumenti database entreranno a far parte del portafoglio prodotti di IDERA.

      Per prevenire eventuali dubbi, faccio notare che per prodotti database non si intendono FireDAC o altri componenti DB per Delphi/C++ Builder ma solo i prodotti originali di Embarcadero: E/R Studio, DB Change Manager, ecc...

      Speriamo che questa svolta consenta ad Embarcadero di concentrarsi su Delphi e C++ rilasciando versioni sempre più stabili e ricche di funzionalità.


      Un saluto.