giovedì 7 settembre 2017

IDERA acquisisce Sencha




Di qualche giorno fa la notizia che IDERA ha acquisito Sencha, leader nello sviluppo di framework per Web application. Sencha andrà quindi ad affiancare Embarcadero come provider di strumenti di sviluppo.

Dalle parole di Atanas Popov, General Manager di Embarcadero, Sencha condivide la mission del gruppo IDERA di consegnare degli agili strumenti di sviluppo alla crescente comunità di programmatori. Questo, oltre ad ampliare i linguaggi supportati aggiungendovi JavaScript, farà nascere delle nuove sinergie con il portfolio dei prodotti già esistenti. Per esempio, proprio Sencha Ext JS, fornirà un potente Web Framework per RAD Studio a completamento dei framework nativi, compresi VCL per Windows e FMX per il Mobile.

La notizia è dunque sicuramente positiva visto che entra in Embarcadero una fortissima competenza di sviluppo frontend web. In più la libreria JavaScript Ext JS, molto usata in ambito business, potrebbe costituire la controparte di Delphi per quanto riguarda lo sviluppo web.

Esistono infatti già alcuni framework Delphi che usano Ext JS come frontend, il più famoso dei quali è la libreria UniGUI che consente di sviluppare applicazioni web usando l'approccio RAD tipico di Delphi.

Per correttezza bisogna dire che la prima libreria Delphi ad utilizzare Ext JS come frontend era stata ExtPascal progetto ora abbandonato (autore Wanderlan Santos dos Anjos) ma ancora interessante (contiene anche un'implementazione di FastCGI).

Personalmente, per lo sviluppo di applicazioni web, uso Ext JS fin dalla versione 3 e penso ancora che per costruire complesse app web sia lo strumento in assoluto più versatile e potente!

La domanda sorge quindi spontanea, a quando l'integrazione di Ext JS con Delphi?? 😀



Se vivete in Italia e siete interessati ad approfondire il tema dello sviluppo di applicazioni web con Sencha Ext JS e Delphi, Wintech Italia, uno dei pochi qualificati fornitori di corsi su Ext JS in Italia, organizza un corso il 12 e 13 ottobre 2017 in sede Wintech a Parma.



domenica 9 aprile 2017

Le novità di Delphi 10.2 Tokyo in dettaglio



Alla fine di marzo è stata rilasciata la versione 10.2 (Tokyo) di Delphi, vediamo nel dettaglio la serie di novità che ha portato.

Benvenuto Linux!


La principale feautore di Delphi 10.2 Tokyo è ovviamente il supporto di Linux 64 bit (server -side) tra i target di compilazione (per sfruttare questa caratteristica è però necessaria almeno la versione Enterprise di Delphi).


Con questa versione di Delphi è possibile creare applicativi (console, dll, package) nativi per Linux che possono girare in qualsiasi distibuzione Linux per architettura x86 a 64bit.

Non c'è (per ora) il supporto a FMX per Linux, non si possono cioè realizzare applicativi con interfaccia utente.. vedremo se questo verrà aggiunto nelle le prossime release.

Il supporto ufficiale delle distribuzioni è limitato a Ubuntu e Red Hat ma personalmente ho già provato i binari prodotti su un elevato numero di distribuzioni senza nessun problema.

Per lo sviluppo invece consiglio di installare le distribuzioni ufficialmente supportate se volete evitare qualsiasi intervento manuale di configurazione dell'ambiente.


Tecnicamente la compilazione e il deployment per Linux usano le stesse tecniche e strumenti delle altre piattaforme.



Nello specifico:
  1. Compilazione su Windows con il compilatorre Delphi (basato su LLVM)
  2. Pachettizazione usando le informazioni di deployment
  3. Spedizione alla macchina Linux target usando il PAServer (da installare sulla macchina Linux)
  4. Debug (eventuale) nell'IDE usando PAServer

E comunque possibile prendere il binario generato, copiarlo e lanciarlo su una qualsiasi macchina Linux (attenzione ai permessi del file quando lo copiate)


Come accennato prima, il compilatore Linux è basato su LLVM come quello per i sistemi operativi mobile (iOS e Android) quindi dovete ricordarvi alcune cose quando scrivete il codice sorgente:

  • ARC (Automatic Reference Count) per gli oggetti (non dovete quindi distruggerli)
  • Le stringhe non sono sempre 1-based come nel compilatore tradizionale ma:
    • Sono 0-based nei compilatori iOS e Android
    • Sono 1-based nel compilatore Linux

Se a prima vista la scelta per le stringhe può sembrare un po'.. fuorviante, devo dire che mi trova daccordo: Nella costruzione di applicazioni mobile il porting di grosse porzioni di codice Win32 è piuttosto raro, nel caso di Linux invece, è proprio una delle caratteristiche più interessanti. In questo caso dover rifattorizzare completamente l'accesso alle stringhe sarebbe un lavoro lungo e pericoloso. Come consiglio usate comunque gli helper per i tipi base per usare le stringhe 0-based su tutte le piattaforme.

Il livello di compatibilità del codice sorgente è ottimo, ho già compilato su Linux la mia libreria JWT (https://github.com/paolo-rossi/delphi-jose-jwt) e il progetto WiRL (https://github.com/delphi-blocks/WiRL) senza particolari problemi.

Altre novità nella 10.2

Ci sono anche altre novità nonostante sia una release incentrata principalmente su Linux. Di seguito elenco solamente queste novità riservandomi di espanderle in altri articoli. In particolare il prossimo articolo verterà su RTL e linguaggio comparando i sorgenti rispetto alla versione 10.1 Berlin per evidenziare tutte le modifiche.

FireDAC


Il componente TFDMemTable guadagna un design time editor che consente di visualizzare e modificare i dati della memory table a design-time!


Altre feature in FireDAC:

  • Supporto per MariaDB (v5.5)
  • New GUID access for TField
  • Supporto per la versione 5.7 di MySQL
  • Support Firebird per Direct I/O
  • Grazie al BLOB streaming ridotta memoria sui client
  • Il componente VCL TDBImage supporta direttamente i formati JPEG e PNG

IDE


Il menu View dell'IDE è stato completamente riorganizzato per consentire una miglior categorizzazione delle numerose voci (nelle passate versioni rischiavano di uscire dallo schermo!)


Anche il supporto per le alte risoluzioni è stato migliorato, ormai i monitor High DPI sono arrivati a prezzi accessibili ed è sempre più facile che ci chiedano supporto nelle nostre applicazioni.

Altre funzionalità nell'IDE:
  • Migliorato supporto per Azure e AWS con nuove API
  • Il compilatore a riga di comando supporta ora large-memory-address
  • Supporto per il debugging e simulatore nei nuovi macOS e iOS

FireMonkey


  • Supporto Multi-Threading per le classi TBitmap, TCanvas e TContext3D
  • Maggior velocità dell'interfaccia utente (UI) Android grazie ad un miglior supporto multi-thread
  • Migliorata l'esperienza utente in TMultiView
  • Possibilità di modifica di SystemStatusBar.Color in iOS tramite nuove proprietà nella classe TForm
  • Nuovo stile FMX per macOS e Android

RTL


  • Nuova proprietà SynchronizeEvents per le classi TTetheringManager e TTetheringProfile per controllare la sincronizzazione con il thread principale
  • Supporto delle funzioni di hashing MD5 e SHA1 per file e stream

Installer/GetIt


L'installer basato su GetIt è ulteriormente migliorato come velocità ed esperienza utente. Consiglio a tutti l'installazione di Delphi con questo nuovo strumento che oltre ad una esperienza di installazione sicuramente migliore consente anche di aggiungere/rimuovere piattaforme e funzionalità in un quasiasi momento.

Anche GetIt sta guadagnando sempre più consenso in quanto l'installazione di componenti tramite questo tool è facile e immediata.

In questo momento sono già presenti una buona selezioni di componenti/expert già aggiornati a RAD Studio 10.2 Tokyo.



Considerazioni finali

Per me la 10.2 Tokyo è un'importantissima release grazie all'introduzione di Linux come target ma introduce anche una buona lista di feature in altre aree e una lista di bug fissati decisamente lunga.

Avendo usato 10.2 Tokyo per qualche settimana posso dire che la stabilità sembra buona, il mio consiglio finale è sicuramente di installarlo e usarlo per lo sviluppo dei vostri applicativi.

Link a risorse

DocWiki What's New
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/What%27s_New

What's New in RAD Studio 10.2
https://www.embarcadero.com/products/rad-studio/whats-new-in-10-2-tokyo

New features and customer reported issues fixed in RAD Studio 10.2 Tokyo
https://edn.embarcadero.com/article/44747


Un saluto


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