tag:blogger.com,1999:blog-42610519672402660702024-02-20T03:21:47.829+01:00Delphi & Dintorni Blog<b>Il blog in italiano dedicato a Delphi</b>Paolo Rossihttp://www.blogger.com/profile/09956628024928838702noreply@blogger.comBlogger76125tag:blogger.com,1999:blog-4261051967240266070.post-22747264189459779812020-06-04T10:32:00.002+02:002020-06-04T10:32:55.955+02:00Italian Delphi Day e 10.4 Sydney<div><div class="separator" style="clear: both; text-align: center;"><a href="https://www.delphiday.it/" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img alt="Italian Delphi Day 2020" border="0" data-original-height="234" data-original-width="1200" height="124" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlAD082FtYq5pMgrlZs5K9gxU6uifMSsNRl3qzz2N1zhYSnmhfUi90YV4MKNNomrPKyOiPXtx3xgQjXTPvRkkZqV1ZksQJC8TQLQ94SDfeqEWfzz9H_WNW4fqKhYkuesjJtgecVjwVFG4/w640-h124/delphiday-online-banner-1200.png" title="Italian Delphi Day 2020" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div style="text-align: justify;">Dopo lo <strong>strepitoso successo</strong> dei webinar di <strong><span style="font-size: 16px;"><a href="https://www.delphiedintorni.it/" target="_blank"><span style="color: firebrick;">Delphi & Dintorni</span></a></span></strong>, adesso è il turno del <strong>Delphi Day 2020 edizione digitale!</strong></div><div style="text-align: justify;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-8-kV9LrdIGcuPs3U3DC0D39NakikTP-7FXYRxwQ5x9d9dwJGmqwAp5oHO7HOy4nERS9-RbpojPxqe39b9q3k-bLgfDIMU6smrEat-gqR4Y1I4wyKbVGVRRJpdEpVZUCMfnLjx1ocigs/s600/delphiday-banner.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><br /></a><a href="https://www.delphiday.it/" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;" target="_blank"><img border="0" data-original-height="300" data-original-width="600" height="100" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-8-kV9LrdIGcuPs3U3DC0D39NakikTP-7FXYRxwQ5x9d9dwJGmqwAp5oHO7HOy4nERS9-RbpojPxqe39b9q3k-bLgfDIMU6smrEat-gqR4Y1I4wyKbVGVRRJpdEpVZUCMfnLjx1ocigs/w200-h100/delphiday-banner.png" width="200" /></a><br /><strong>12 sessioni</strong> tecniche <span style="color: firebrick;"><span style="font-size: 18px;"><strong>gratuite </strong></span></span>tutte su <strong>Delphi </strong>divise in <strong>3 giornate </strong>per darti la possibilità (<strong>anche dal lavoro</strong>) di seguirle comodamente, <strong>ricordati </strong>solo che, diversamente dagli altri anni, <strong>ti devi iscrivere alle singole sessioni </strong>che vorrai seguire. La quarta giornata è invece un <b>incontro virtuale </b>ma, assolutamente libero, tra tutti gli <b>speaker </b>e i <b>partecipanti </b>alla conferenza!</div><div style="text-align: justify;"><br />Le sessioni saranno fruibili da un <strong>client di Zoom</strong> scaricabile gratuitamente per il <strong>tuo sistema operativo</strong><br /><br /></div>
<div style="background-color: #e20000; border-radius: 6px; font-family: montserrat; font-size: 18pt; margin: 5px auto; padding: 12px; text-align: center; width: 300px;"><a href="https://www.delphiday.it/conferenza.html" style="color: white; text-decoration: none;" target="_blank">Programma conferenza</a></div></div>
<hr />
<h1 style="text-align: left;">Delphi 10.4 Sydney</h1><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZn92ihMfeFSu0gaeRhuPsSs5UHH0L2W3Tmeah7AvBHE7Vyi5G0VxGMvajUNYJGwBTO4NSmvFYp6bIMOj0hRbmfhZEI4mgAoRY-e9_kmrFIgfibwFCjJZgx1bqteit-iSmrz_8b9b4W1o/s756/Banner_Sidney_756x200_Blue.png-756x200.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="200" data-original-width="756" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZn92ihMfeFSu0gaeRhuPsSs5UHH0L2W3Tmeah7AvBHE7Vyi5G0VxGMvajUNYJGwBTO4NSmvFYp6bIMOj0hRbmfhZEI4mgAoRY-e9_kmrFIgfibwFCjJZgx1bqteit-iSmrz_8b9b4W1o/w640-h169/Banner_Sidney_756x200_Blue.png-756x200.png" width="640" /></a></div><div><br /></div><div>Con la nuova versione di <b>Delphi </b>(<b>C++ Builder</b>, <b>RAD Studio</b>) appena uscita e ricca di novità (puoi già scaricarla ed installarla), puoi iscriverti alle <b>sessioni di Marco Cantù </b>al <b>Delphi Day 2020 </b>e ascoltare dalle parole del <b>Product Manager di Delphi </b>tuttè le novità della nuova versione in 2 <b>sessioni completamente tecniche e no marketing!</b></div><div><br /></div><div>Nella prima sessione scoprirete le <b>novità </b>della versione, dal nuovo <b>Language Server Protocol </b>ai <b>Custom Managed Records</b>, dalla <b>VCL </b>a <b>FMX </b>per <b>Windows </b>e <b>Mobile</b>, per finire con le novità di installazione, <b>IDE </b>e <b>GetIt</b>.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://us02web.zoom.us/meeting/register/tZcpd-qsqD4pEt0LsbRCeego_NuSpdhGOdXG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="600" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4oDpFuYpuXFI0zMqe0T8NrRHCPf8E3sCv2T6xiTmH1rfjzc3027AwVf0z5WEiryGFZ8vlgZD6gjPLtnatvGkjarmM8cRj2oyXQ1D9JK03mXVBVmrREcSjgO7VBiQZlUZr39vTREYo1yY/s320/banner-marco-news.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><div style="text-align: left;">La seconda sessione sarà concentrata sulla <b>VCL </b>che continua ad essere la migliore libreria client per <b>Windows 10</b>, con un supporto ancora esteso per monitor <b>High-DPI </b>e ulteriori integrazioni con i componenti del sistema operativo come il <b>motore di Edge</b>. Dalle <b>API </b>a <b>WInRT</b>, dallo <b>Store </b>al <b>formato APPX</b>, da <b>ImageCollection </b>a <b>VirtualImage </b>sono tante le novita' recenti che potremo esplorare in dettaglio.</div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><br /></div><a href="https://us02web.zoom.us/meeting/register/tZEqf-2sqDIoHdTzM_DDGuzt6-7MtJV6Sbx7" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="600" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihE5-N1yzbWrBV7hDRkXdWBcp5YcQmiraZBOt-YBNiNu4YvLxKZyqDYuWJdk91yHt3WOAtcGnHVEzYX3fPFhPEcvn16ySWPTMcbwbjU9SJ08U0kBsN6HAw6O37BZT6KwIpfKm_hCxOTYg/s320/banner-marco-vcl.png" width="320" /></a></div></div><div><br /></div><div><br /></div><div>Che dire quindi, iscrivetevi subito e... <b>buona visione!</b></div><div><br /></div>
<div style="background-color: #e20000; border-radius: 6px; font-family: montserrat; font-size: 18pt; margin: 5px auto; padding: 12px; text-align: center; width: 300px;"><a href="https://www.delphiday.it/conferenza.html" style="color: white; text-decoration: none;" target="_blank">Programma conferenza</a></div>
<div style="text-align: right;"><br /></div><div style="text-align: right;"><br /></div><div style="text-align: right;">Paolo Rossi</div><div style="text-align: right;">Wintech Italia Srl</div><div><br /></div>Paolo Rossihttp://www.blogger.com/profile/09956628024928838702noreply@blogger.com0Stradone Farnese, 57, 29121 Piacenza PC, Italy45.046731 9.698417544.998235851957645 9.62975294921875 45.095226148042357 9.76708205078125tag:blogger.com,1999:blog-4261051967240266070.post-64140076447740204262020-04-22T08:55:00.000+02:002020-04-22T09:01:40.914+02:00Defensive programmingIl 21 aprile ho tenuto un <a href="https://www.delphiedintorni.it/webinars.html">webinar sulla sicurezza</a>. In particolare abbiamo parlato di <b>SQLInjection</b>, <b>cross-site scripting</b> e <b>gestione delle password</b>.<br />
<br />
Per quanto riguarda quest’ultima parte ho fatto una distinzione a seconda dei casi d’uso della password in stessa. Se infatti la password è necessaria per implementare un nostro meccanismo di login, allora l’ideale è salvarla sotto forma di HASH, magari con l’aggiunta di un salt (<a href="https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html">Password Storage Cheat Sheet</a>). Ma se è necessario poter decifrare la password per usarla ad esempio durante l’autenticazione ad un servizio terzo (un server database, di posta o un’API ReST) ovviamente questa soluzione non è praticabile.<br />
<br />
In questo caso è necessario salvare la password cifrandola con un algoritmo reversibile come <a href="https://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES</a>. Il problema è: dove metto la chiave usata per la cifratura? Questa è proprio la domanda che mi ha fatto uno dei partecipanti al seminario.<br />
<br />
Il problema è che non c’è una risposta risposta che vada bene in ogni caso possibile. Questo infatti è un caso di <b>defensive programming</b>, cioè un tipo progettazione del codice dove si cerca di adottare strategie che facciano funzionare il programma in tutti i casi anche se non sappiamo esattamente il tipo di problema da cui ci stiamo difendendo.<br />
<br />
In questo caso dobbiamo fare una serie di ragionamenti, per esempio se la password è salvata sul database la chiave crittografica dovrà stare da un’altra parte. Il ragionamento generale è che password è chiave crittografica devono stare in due posti diversi, in modo che se uno risulti compromesso possiamo sperare che l’altro non lo sia.<br />
<br />
Un’altra soluzione potrebbe essere salvare la chiave direttamente nell’eseguibile, magari cercando di nasconderla in qualche modo, per esempio in esadecimale o come array di byte. Questo renderebbe il recupero della chiave un po’ più complicato, ma per un attaccante motivato non è certo un ostacolo insormontabile, in più lascerebbe la chiave visibile a chiunque abbia accesso ai sorgenti (di certo non è una buona idea nei progetti Open Source).<br />
<br />
In alcuni casi è possibile usare delle apposite API del sistema operativo. Su Windows c’è <a href="https://docs.microsoft.com/en-us/windows/win32/api/dpapi/nf-dpapi-cryptprotectdata">DPAPI</a> (Data Protection Application Programming Interface) che fondamentalmente usa la password dell’utente di Windows come master password. Il limite è che chi cifra la password deve avere le stesse credenziali di chi la decifra.<br />
<br />
Se poi l’applicazione usa già servizi cloud, sia Microsoft che Amazon offrono servizi di storage sicuro (<a href="https://aws.amazon.com/kms/">Amazon KMS</a> o <a href="https://azure.microsoft.com/en-gb/services/key-vault/">Azure Key Vault</a>).<br />
Insomma come già dicevo durante il Webinar non esiste una soluzione semplice ma è necessario valutare la migliore strategia che risolva il nostro problema.<br />
<br />
Happy coding.<br />
<div>
<br /></div>
Luca Minutihttp://www.blogger.com/profile/08976074206082701447noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-15061592764010313242018-12-11T11:49:00.000+01:002018-12-12T16:16:52.535+01:00Da HTML a PDF con WkHtmlToX<h2>
Delphi WkHtmlToX Library</h2>
In un progetto su cui sto lavorando da qualche tempo avevo bisogno di trasformare file HTML in PDF. Cercando un po’ in giro mi sono imbattuto in <a href="https://wkhtmltopdf.org/">WkHtmlToPdf</a>. <b>WkHtmlToPDF</b> e <b>WkHtmlToImage</b> sono due tool open source (<a href="https://www.gnu.org/licenses/lgpl-3.0.en.html">LGPLv3.0</a>) che permettono, tramite il rendering engine <a href="https://webkit.org/">WebKit</a>, di trasformare delle pagine HTML in PDF o immagini.<br />
<br />
Scaricando il software si trovano sia i due tool a linea di comando che una DLL. Dovendolo integrare in un progetto Delphi ho cominciato a tradurre l’API e di seguito a scriverci sopra un piccolo wrapper che ne semplificasse l’uso. Trovate il tutto su <a href="https://github.com/lminuti/Delphi-WkHtmlToX">GitHub</a> pubblicato con <a href="https://www.apache.org/licenses/LICENSE-2.0">licenza apache</a> (fondamentalmente potete farci quello che volete). Nella directory sample ci sono 4 demo:<br />
<br />
<ul>
<li><i>ApiDemo</i>: programma di test che usa direttamente le API di WkHtmlToX</li>
<li><i>WrapperDemo</i>: stesso esempio ma che usa la classe IWkHtmlToPdf</li>
<li><i>ThreadedDemo</i>: un esempio di implementazione thread-safe</li>
<li><i>StreamDemo</i>: esempio che usa un HTML in memoria invece che su file</li>
</ul>
<br />
<h3>
Configurazione</h3>
<div>
<br /></div>
Il tool comprende una miriade di opzioni di configurazione:<br />
<br />
<ul>
<li>Dimensione e orientamento della pagina</li>
<li>Impostazione dei dpi</li>
<li>Impostazione dei margini della pagina</li>
<li>Possibilità di personalizzare intestazione e piè pagina</li>
<li>Abilitare o meno JavaScript</li>
<li>Possibilità di usare un CSS personalizzato</li>
<li>Ignorare lo sfondo della pagina</li>
</ul>
<br />
Per l’elenco completo dei parametri di configurazione potete far riferimento a questa pagina:<br />
<a href="https://wkhtmltopdf.org/libwkhtmltox/pagesettings.html">https://wkhtmltopdf.org/libwkhtmltox/pagesettings.html</a><br />
<br />
<h3>
</h3>
<h3>
Problemi noti</h3>
<div>
<br /></div>
Il tool funziona piuttosto bene, anche con pagine complesse, in effetti il motore di rendering è lo stesso di google chrome. Ci sono un paio di problemi. Uno è che la libreria non è thread-safe. Nell’esempio <i>ThreadedDemo </i>trovate un workaround che permette di usare WkHtmlToX in più thread senza bisogno di lock. L’altro problema è che se invece di convertire un file gli passate l’HTML come stringa o in uno stream non viene rilevato correttamente l’encoding. Anche questo problema può essere aggirato aggiungendo un tag <meta> alla pagina. Trovate un esempio del demo <i>StreamDemo</i>.<br />
<br />
<h3>
</h3>
<h3>
Download</h3>
<div>
<br /></div>
Pagina del progetto: <a href="https://github.com/lminuti/Delphi-WkHtmlToX">https://github.com/lminuti/Delphi-WkHtmlToX</a><br />
Pagina dove scaricare la DLL: <a href="https://wkhtmltopdf.org/">https://wkhtmltopdf.org/</a><br />
<div>
<br /></div>
<br />Luca Minutihttp://www.blogger.com/profile/08976074206082701447noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-28366072602055596512018-07-23T16:24:00.000+02:002018-07-23T16:32:14.024+02:00Benvenuta Delphi Community Edition!<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD1Igs7UV9KM0CgejmFLsWHLjkFg7NecdiWm_BrlJTtMVccb4iWt8TKHZF9quRTuRiN3n3AqRcpjQb3azDA0GU0eskGPNA53k5h6R6pj4DgUGrMbt8FJL4wwLdKRpGl_qwh23X6-Nj-kg/s1600/delphi-comm-edition-newsletter-header-620x200-v1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="200" data-original-width="620" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD1Igs7UV9KM0CgejmFLsWHLjkFg7NecdiWm_BrlJTtMVccb4iWt8TKHZF9quRTuRiN3n3AqRcpjQb3azDA0GU0eskGPNA53k5h6R6pj4DgUGrMbt8FJL4wwLdKRpGl_qwh23X6-Nj-kg/s1600/delphi-comm-edition-newsletter-header-620x200-v1.jpg" /></a></div>
<br />
<div style="text-align: justify;">
Embarcadero ha detto addio all'edizione Starter! A sostituirla la nuovissima <b>Delphi (e C++ Builder) Community Edition</b>!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzG7aX5iz2rMniqOL1m6HbnQId9phkAvV2C6l3wm96rORwkDo5XzpRWMlm0rXwAobvEo9pG3qX-dbTFHsfgEzv2q8w06Q-paytnfTQZIeUtc741eD9YMW32V7YCGeYZAnJeHw4vxW2WG03/s1600/delphi-community-edition-wintech.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="230" data-original-width="330" height="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzG7aX5iz2rMniqOL1m6HbnQId9phkAvV2C6l3wm96rORwkDo5XzpRWMlm0rXwAobvEo9pG3qX-dbTFHsfgEzv2q8w06Q-paytnfTQZIeUtc741eD9YMW32V7YCGeYZAnJeHw4vxW2WG03/s200/delphi-community-edition-wintech.jpg" width="200" /></a>La <b>Community Edition</b> è dedicata a tutti i programmatori giovani, agli studenti, alle startup e alle piccole società e organizzazioni che vogliano sperimentare ed imparare a sviluppare utilizzando uno strumento altamente professionale. E' installabile anche da programmatori Delphi e C++ Builder che lavorano per una società ma che a casa vogliono usarlo per progetti personali o per partecipare a progetti Open Source.<br />
<br /></div>
<div style="text-align: justify;">
Come per la Starter, anche per la <b>Community Edition</b> ci sono alcune <b>restrizioni</b> relative all'uso per scopi commerciali: puoi sfruttare questa edizione ad uso personale o commerciale con un limite di <b>5.000$ di entrate annue</b>, superata questa cifra o il numero di 5 programmatori, dovrai acquistare un'edizione completa come la <a href="https://shop.wintech-italia.com/tools-di-sviluppo/d102tokyo.html" target="_blank"><span style="color: red;">Professional</span></a>, l'<a href="https://shop.wintech-italia.com/tools-di-sviluppo/d102tokyo.html#/2-nuovo_aggiornamento-nuovo/40-licenze-1_licenza/36-versione-enterprise" target="_blank"><span style="color: red;">Enterprise</span></a> o l'<a href="https://shop.wintech-italia.com/tools-di-sviluppo/d102tokyo.html#/2-nuovo_aggiornamento-nuovo/40-licenze-1_licenza/38-versione-architect" target="_blank"><span style="color: red;">Architect</span></a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL3hTMwxiz7hCP7RJ4Pu8l4h7eJ-6QPNf2s9aVoqUjBq50maG9VMYuvjtEPR1VpAGe6vCsicgztCwSq2U6TXE4ENgq6B2fXQ2stDtUOifwFLvyF8Y5yqhOrAfVCU7JJUUPxcHsyxlw8FY/s1600/Delphi_10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="684" data-original-width="1092" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL3hTMwxiz7hCP7RJ4Pu8l4h7eJ-6QPNf2s9aVoqUjBq50maG9VMYuvjtEPR1VpAGe6vCsicgztCwSq2U6TXE4ENgq6B2fXQ2stDtUOifwFLvyF8Y5yqhOrAfVCU7JJUUPxcHsyxlw8FY/s400/Delphi_10.png" width="400" /></a></div>
<br />
Ma non preoccuparti, quando i tuoi progetti spiccheranno il volo potrai continuare a lavorare con un'edizione a pagamento ma con la base di codice che ha già creato.</div>
<div style="text-align: justify;">
<br />
La Delphi Community Edition è un<b> IDE completo </b>che grazie a tutte le sue funzionalità permette di creare applicazioni <b>iOS</b>, <b>Android</b>, <b>Windows</b> e <b>macOS</b> da un'unica base di codice Delphi.<br />
<br /></div>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_NfeFz96YbDWckYsl3fDg-NXzyS7E657VxVTbUEr8BU7N1aP52CBBQIQ_RgFLKQDM1vLzmN3uc7Syy9DBkg5oXVCWlqV2zk9bK5uzYVZi2j2p8IXJuffZogK6lrgNwB0jO9BcgPyYtoM/s1600/CE_C_IDE.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1000" data-original-width="1600" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_NfeFz96YbDWckYsl3fDg-NXzyS7E657VxVTbUEr8BU7N1aP52CBBQIQ_RgFLKQDM1vLzmN3uc7Syy9DBkg5oXVCWlqV2zk9bK5uzYVZi2j2p8IXJuffZogK6lrgNwB0jO9BcgPyYtoM/s640/CE_C_IDE.png" width="640" /></a></div>
<br />
Con questa mossa <b>Embarcadero</b> ritorna a spingere per un'adozione massiccia di Delphi da parte di studenti, hobbisti ed in generale tutti quelli che vogliono provare a programmare con questo fantastico strumento di sviluppo. Se vuoi provare immediatamente la Community Edition di Delphi o C++ Builder, <a href="https://www.embarcadero.com/products/delphi/starter/free-download" target="_blank">scaricala</a>, guarda il video per l'installazione e... <b>inizia a creare</b> le app che hai in mente!<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/XMj8RlJO-zQ/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/XMj8RlJO-zQ?feature=player_embedded" width="320"></iframe><br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>
<br />
<div style="text-align: right;">
Go Delphi forever!</div>
<br />Anonymoushttp://www.blogger.com/profile/02439297087366934663noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-35914201342095350452018-04-09T16:20:00.000+02:002018-04-09T16:20:40.849+02:00Idera, Inc.: cosa ci aspetta nel 2018<span style="text-align: justify;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1h553ZCsSs8GbD7QiVerUwCsbRfubsK7GxbVIVRZkMuSAZSRWeZ_vDG2x2_AT_P2xxwiB6YPNF3j-dLZdNr0oGANWt8gBIKySka4eSamV4mR23Gh5cgp42-Ka1nxzwWnEPWFFj_NAXHAU/s1600/new-2018-idera-embarcadero.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="299" data-original-width="1258" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1h553ZCsSs8GbD7QiVerUwCsbRfubsK7GxbVIVRZkMuSAZSRWeZ_vDG2x2_AT_P2xxwiB6YPNF3j-dLZdNr0oGANWt8gBIKySka4eSamV4mR23Gh5cgp42-Ka1nxzwWnEPWFFj_NAXHAU/s320/new-2018-idera-embarcadero.png" width="320" /></a></div>
<span style="text-align: justify;"><br /></span>
<span style="text-align: justify;">Quali sono stati i trend di sviluppo del 2017 e cosa ci aspetta nel <b>2018</b>?</span><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo scopriamo con il "pronostico" di <b>Atanas Popov</b>, Embarcadero General Manager:</div>
<div style="text-align: justify;">
<br /></div>
<br />
<div style="text-align: justify;">
<i>Il nostro scopo è quello di fornire i migliori strumenti per lo sviluppo, il database management e per i testing.</i></div>
<div style="text-align: justify;">
<i>Monitoriamo con attenzione gli sviluppi del settore per assicurarci che i nostri prodotti si evolvano e garantiscano valore ai migliaia di utenti sparsi in tutto il mondo. </i><br />
<i><br /></i></div>
<div style="text-align: justify;">
<i>La nostra attività ha avuto un notevole successo nel 2017 e Delphi continua a guadagnare terreno in maniera incredibile!</i></div>
<div style="text-align: justify;">
<i>Inoltre, lo scorso agosto, abbiamo acquisito <b>Sencha ExtJS</b> combinando il nostro principale framework commerciale JS e gli strumenti per lo sviluppo web nel nostro portfolio.</i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i>Visto che il 2018 è appena iniziato, è il momento giusto per rivisitare i trend del 2017 del nostro settore e provare a fare alcune predizioni per il futuro. </i></div>
<div style="text-align: justify;">
<i>Perché si sa, gli sviluppatori domineranno il mondo!</i><br />
<i><br /></i>
<i>La strategia da adottare è rendere le cose sempre più semplici per gli sviluppatori che premendo un solo pulsante potranno avere una serie di strumenti integrati. </i><br />
<i><br /></i>
<i>[...]</i><br />
<i><br /></i>
<i>Quest'anno inizieremo anche a vedere un aumento nell'utilizzo di Progressive Web App (PWA) con aggiornamenti nei browser mobile. Gli sviluppatori Web adotteranno velocemente le tecnologie PWA con servizio di assistenza, notifiche e sincronizzazione, e creeranno Web App PWA moderne, veloci ed affidabili come le app native.</i><br />
<i><br /></i>
<i>Inoltre le aziende cercheranno un equilibrio tra uno sviluppo veloce su molte piattaforme rispetto all'esperienza nativa. I framework Web come Reactive Native (e ExtJs) continueranno a diventare sempre più popolari, ma lo saranno anche in altri framework nativi come Xamarina e FireMonkey (FMX).</i><br />
<i>Anche gli strumenti nativi per Android e iOS continueranno a migliorare.</i><br />
<i><br /></i>
<i>Vedremo anche un ritorno all'IDE di programmazione orientata agli oggetti e gli IDE avranno più componenti di servizi cloud con una facile implementazione e opzioni di integrazione.</i><br />
<i><br /></i>
<i>Di base possiamo dire che gli sviluppatori hanno a disposizione moltissime scelte e che questa tendenza non può che aumentare. Gli strumenti di sviluppo Idera, Inc. offrono le migliori soluzioni al mondo per aiutare gli sviluppatori a creare delle cose straordinarie. Non vedo l'ora di vedere cosa ci sarà di nuovo nel corso del nuovo anno!</i><br />
<br />
Fonte: <span style="text-align: start;"><a href="https://community.embarcadero.com/article/16604-idera-inc-2018-predictions">https://community.embarcadero.com/article/16604-idera-inc-2018-predictions</a></span></div>
<br />
<br />Anonymoushttp://www.blogger.com/profile/02439297087366934663noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-45577393181969324072018-02-20T15:47:00.001+01:002018-02-20T15:50:18.562+01:00UPGRADE: ultima occasione!<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://shop.wintech-italia.com/tools-di-sviluppo/rad102tokyo.html" target="_blank"><img border="0" data-original-height="280" data-original-width="1170" height="95" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR298KWOREOoqs8a-lZhIcLF0pDnlwAI3L0tO2iIggmTY-M1pCCzgr0tqIfOL9PtJitbzEmhd-e6y_yu8zHrgBGwvoxjwZ_qHXYFqIB3lYEhKwROI2auBTU-tyROmU2PpjA_C6Mm6tFDXR/s400/slider-UPGRADE-SKU-embarcadero.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Attraverso la voce del General Manager <b>Atanas Popov</b>, <b>Embarcadero</b> ha annunciato un’importante novità: a partire dal <b>31 marzo 2018</b> verranno dismessi gli SKU relativi agli <b>upgrade</b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Dal <b>1° aprile 2018</b> (e no, non è uno scherzo!) resteranno disponibili solamente le nuove licenze e l’Update Subscription, un abbonamento annuale che consente di mantenere il proprio prodotto aggiornato alle ultime release.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Prima di ritirare l’upgrade, Embarcadero concede a tutti gli utenti che non l’avessero ancora fatto di aggiornare la propria licenza tramite un "<b>Upgrade Amnesty</b>". Un’ultima occasione per trasformare la propria datata versione precedente alla XE6 in una <b>10.2 Tokyo</b>.</div>
<i><br /></i>
<i><br /></i>
Dal post di Atanas Popov del 22/01/2018:<br />
<i><br /></i>
<i>Cari clienti,</i><br />
<i><br /></i>
<br />
<div style="text-align: justify;">
<i>Alcuni anni fa abbiamo introdotto il nostro programma di Update Subscription. [...] La nostra roadmap e la strategia di realese dei prodotti sono allineate con questa filosofia, poiché ci impegniamo a rendere molto più semplici gli aggiornamenti alle nuove versioni.</i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
<i>[...]</i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
<i>Il nostro obiettivo è rendere più facile per tutti usufruire delle ultime funzionalità e correzioni che abbiamo sviluppato. Oggi, la maggior parte dei nostri clienti si è spostata su Update Subscription e lo SKU Upgrade non ha molto senso.</i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
<i>Questo trimestre (che termina il 31 marzo) sarà l'ultimo ad offrire aggiornamenti. In linea con la nostra pratica di avvisi anticipati, vogliamo lasciare un margine di tempo ai clienti che per qualsiasi ragione volessero effettuare l’upgrade per aggiornare il proprio prodotto.</i></div>
<div style="text-align: justify;">
<i>Abbiamo eseguito diverse Amnesty (vale a dire la possibilità di eseguire l'aggiornamento da versioni datate) negli ultimi due anni e ne eseguiremo un'altra mentre ritiriamo questo SKU. </i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
<i>[...]</i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
<i>Insieme, abbiamo fatto grandi passi avanti nella divulgazione di RAD Studio per lo sviluppo di Delphi e C ++. Monitoriamo attentamente le offerte competitive e siamo fermamente convinti che il valore che i clienti ricevono con i nostri prodotti sia di gran lunga superiore al costo. Spero che tu ti senta allo stesso modo.</i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
<i>Sono davvero entusiasta di alcune delle prossime versioni. Sia il 10.2.3, questo trimestre, sia le numerose release future, offriranno funzionalità e miglioramenti di qualità eccezionale. Il 2018 sarà un altro anno che vedrà Delphi e C ++ Builder prendere il volo! </i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
<i>Go RAD Studio !!!</i></div>
<i><br /></i>
FONTE: https://community.embarcadero.com/article/articles-support/16598-upgrade-sku-to-be-discontinued-in-q4<br />
<br />
<a href="http://shop.wintech-italia.com/tools-di-sviluppo/rad102tokyo.html" target="_blank"><span style="background-color: white; color: black;">Se hai una licenza precedente alla XE6, adesso è davvero il momento (l'ultimo momento) per aggiornarla tramite un upgrade!</span></a>Anonymoushttp://www.blogger.com/profile/02439297087366934663noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-18753030965013498852017-11-07T17:57:00.000+01:002017-11-07T17:57:09.733+01:00Delphi Day 2017 (Padova Edition)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7ChcCSesnIKQxZ_qWEXwAnuiRxhL_CMHsfJC_usv7S8LdwkMnm9A1aRVAdz9Tu_5994kosLYQrvSJZZHrwoNl8YCoy23xf56RE8afSUgo1jOoSefSYy-YiYZaYyiYtye3pBNrDmfKHK4/s1600/delphiday-padova-banner.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7ChcCSesnIKQxZ_qWEXwAnuiRxhL_CMHsfJC_usv7S8LdwkMnm9A1aRVAdz9Tu_5994kosLYQrvSJZZHrwoNl8YCoy23xf56RE8afSUgo1jOoSefSYy-YiYZaYyiYtye3pBNrDmfKHK4/s1600/delphiday-padova-banner.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div style="text-align: justify;">
<b>Wintech-Italia s.r.l.</b> organizza l’evento <b>Delphi Day 2017 (Padova Edition):</b> un incontro, gratuito, di mezza giornata per un aggiornamento sullo stato attuale di Delphi.<br />
<br />
L'evento in edizione 2017 <b>raddoppia!</b> Al pomeriggio il classico <b>evento gratuito</b> di mezza giornata dedicato a tutti i programmatori Delphi ansiosi di conoscere le novità dello strumento di sviluppo. <br />
Al mattino sono previsti due <b>seminari a pagamento</b> ad alto contenuto tecnico.</div>
<br />
<h2>
Conferenza: Lo stato dell'arte di Delphi</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh4M72-Up6-nuN9OvoXFcA7iTyCsulKU2sdOOyfN56ct9wzDE5SijR4PIgUQR2sCIz4405oSpDQqafWQ562DwA7_SSq6aCDW8JNQCzs9m_cjkc9blmKfAEqJgHA-fDEGQipCPTJFSp-C0/s1600/state-art.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh4M72-Up6-nuN9OvoXFcA7iTyCsulKU2sdOOyfN56ct9wzDE5SijR4PIgUQR2sCIz4405oSpDQqafWQ562DwA7_SSq6aCDW8JNQCzs9m_cjkc9blmKfAEqJgHA-fDEGQipCPTJFSp-C0/s1600/state-art.png" /></a></div>
<div>
<br /></div>
<div style="text-align: justify;">
L'incontro offre una panoramica sullo <b>"stato dell'arte" di Delphi</b>, 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 (Linux, MacOSX, iOS, Android). L'incontro si propone di essere fondamentalmente un <b>momento di scambio e discussione</b> tra i partecipanti.</div>
<div style="text-align: justify;">
</div>
<br />
<div align="center" style="margin-bottom: 15px;">
<span style="font-size: x-small;">Il biglietto di ingresso gratuito comprende l'ingresso alla conferenza del pomeriggio e il coffee break</span><br />
<a href="https://www.eventbrite.it/e/biglietti-delphi-day-2017-padova-38915653768?ref=ebtn" target="_blank"><img alt=" " src="https://www.eventbrite.it/custombutton?eid=27777558425" /></a></div>
<h2>
Conferenza: Delphi + Ext JS: la soluzione definitiva per il Web?</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBS6-sXa9cwnl-QMLssvbOA718PUoH4GT7z0bJ3scd618pFwga3Mt4KVtO6xV3iFXiuxjvICo7AzqkrD9MI-Iqns1qbMFmZLOQKoGWa1DATFurBbfFsBJzeD1chZe0ktOQq68m9a4gsT0/s1600/banner-sencha.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="200" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBS6-sXa9cwnl-QMLssvbOA718PUoH4GT7z0bJ3scd618pFwga3Mt4KVtO6xV3iFXiuxjvICo7AzqkrD9MI-Iqns1qbMFmZLOQKoGWa1DATFurBbfFsBJzeD1chZe0ktOQq68m9a4gsT0/s1600/banner-sencha.png" /></a></div>
<br />
<br />
Con l'acquisizione di sencha da parte di IDERA, entra come strumento di sviluppo una delle migliori libreria JavaScript esistenti sul mercato. In Wintech abbiamo usato questa libreria da diversi anni per lo sviluppo Web e siamo convinti che per uno sviluppatore Delphi questa libreria rappresenti la scelta migliore per la costruzione di applicativi web performanti, con un'interfaccia utente gradevole e moderna, con pesante accesso a database e con buone performance!<br />
<br />
<div align="center" style="margin-bottom: 15px;">
<span style="font-size: x-small;">Il biglietto di ingresso gratuito comprende l'ingresso alla conferenza del pomeriggio e il coffee break</span><br />
<a href="https://www.eventbrite.it/e/biglietti-delphi-day-2017-padova-38915653768?ref=ebtn" target="_blank"><img alt=" " src="https://www.eventbrite.it/custombutton?eid=27777558425" /></a><br />
<div>
<a href="https://www.eventbrite.it/e/biglietti-delphi-day-2017-padova-38915653768?ref=ebtn" target="_blank"><br /></a></div>
</div>
<h2>
Conferenza: High Performance 3D con Delphi</h2>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd-FeR0I2s7M8vH25V4WFyUYaTijC_BGbyVaVBeUMcotM3vVI1J3wPFtvK0-MJQyp9CSOh3wLNNrgcYJDGKGbqkq2wcH8PN6YSWkGH0f2FyS9Z0HE2arDrnNOMukUMzcyn2q7OmV5QDrk/s1600/banner-3d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="200" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd-FeR0I2s7M8vH25V4WFyUYaTijC_BGbyVaVBeUMcotM3vVI1J3wPFtvK0-MJQyp9CSOh3wLNNrgcYJDGKGbqkq2wcH8PN6YSWkGH0f2FyS9Z0HE2arDrnNOMukUMzcyn2q7OmV5QDrk/s1600/banner-3d.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
<div>
Se avete bisogno di creare e gestire modelli e scene 3D (applicazioni industriali, automazione, ecc...) realmente performanti i linguaggi ad alto livello (Delphi, Java, C#) non riescono a competere con le librerie 3D scritte in C++. In questa sessione vedremo come unire il meglio dei due mondi: la potenza e le prestazioni di calcolo di C++ e la facilità d'uso di Delphi:</div>
</div>
<div>
<br /></div>
<div>
<div align="center" style="margin-bottom: 15px;">
<span style="font-size: x-small;">Il biglietto di ingresso gratuito comprende l'ingresso alla conferenza del pomeriggio e il coffee break</span><br />
<a href="https://www.eventbrite.it/e/biglietti-delphi-day-2017-padova-38915653768?ref=ebtn" target="_blank"><img alt=" " src="https://www.eventbrite.it/custombutton?eid=27777558425" /></a><br />
<div>
<a href="https://www.eventbrite.it/e/biglietti-delphi-day-2017-padova-38915653768?ref=ebtn" target="_blank"><br /></a></div>
</div>
</div>
<div>
<h2>
Conferenza: Deployment su Linux: quali vantaggi</h2>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggJq64AvOeiUDhyzW1pVzCD99svCNK7PwiHU5mpD9h5m1LIrmsYr3BEk83lBNYgyPHC_H7UdE7GwjnAo3UcL1GbseoNOhyphenhyphenIzfRZwUDyakMy2dXoaK7yQ0BGgV1TaBM5EM-FdhP3q59UDY/s1600/banner-linux.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="200" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggJq64AvOeiUDhyzW1pVzCD99svCNK7PwiHU5mpD9h5m1LIrmsYr3BEk83lBNYgyPHC_H7UdE7GwjnAo3UcL1GbseoNOhyphenhyphenIzfRZwUDyakMy2dXoaK7yQ0BGgV1TaBM5EM-FdhP3q59UDY/s1600/banner-linux.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
<div>
Lo sviluppo su piattaforma Linux amplia notevolmente le possibilità di deployment degli applicativi (server) costruiti in Delphi. Oggigiorno è importantissimo sfruttare appieno le possibilità offerte dai servizi "cloud" di Amazon AWS, Microsoft Azure, Google Cloud, ecc.. per avere piattaforme di distibuzione a basso costo, performanti e comode da gestire.</div>
<div>
<br /></div>
<div>
<div align="center" style="margin-bottom: 15px;">
<span style="font-size: x-small;">Il biglietto di ingresso gratuito comprende l'ingresso alla conferenza del pomeriggio e il coffee break</span><br />
<a href="https://www.eventbrite.it/e/biglietti-delphi-day-2017-padova-38915653768?ref=ebtn" target="_blank"><img alt=" " src="https://www.eventbrite.it/custombutton?eid=27777558425" /></a><br />
<div>
<br /></div>
</div>
</div>
<h2>
Seminari pre-conferenza</h2>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: justify;">
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: justify;">
<b>Sala A: </b><b>Applicazioni MVVM cross-framework (VCL-FMX-WEB)</b></div>
<div class="separator" style="clear: both; text-align: justify;">
<b><br />
</b></div>
<div class="separator" style="clear: both; text-align: justify;">
Riusabilità, manutenibilità e testabilità sono concetti importantissimi per chi sviluppa software al giorno d'oggi. Riutilizzare la maggior parte del codice anche tra progetti cross-platform e, perché no, anche cross-framework (VCL-FMX-WEB), sarebbe bello vero? Obiettivo di questo corso è dimostrare come, con l'utilizzo di strumenti adatti (iORM-MVVM), sia possibile applicare questo pattern anche in Delphi senza dover necessariamente rinunciare alle caratteristiche RAD che lo hanno reso il nostro ambiente di sviluppo preferito... anzi!</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<b>Sala B: </b><b>Architettura a microservizi in Delphi</b></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Un'architettura monolitica per la costruzione degli application server può risultare comoda all'inizio ma rappresenta un limite alla crescita e alla complessità dell'architettura stessa. L'architettura microservices consente di espandere a piacimento la propria architettura senza incorrere in limiti predefiniti. In questo workshop vedremo nel dettaglio la teoria dell'architettura microservices, i vantaggi e gli svantaggi e come costruirli con Delphi.</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div align="center" style="margin-bottom: 15px;">
<span style="font-size: x-small;">Il biglietto di ingresso per i seminari comprende l'ingresso ai seminari, alla conferenza, al pranzo e ai coffee break</span><br />
<a href="https://www.eventbrite.it/e/biglietti-delphi-day-2017-padova-38915653768?ref=ebtn" target="_blank"> <img alt=" " src="https://www.eventbrite.it/custombutton?eid=27777558425" /><br />
</a></div>
<br />
<br />
<hr />
<br />
<!-- Agenda conferenza --><br />
<table align="center" style="background-color: #e6e6e6; border-style: dotted; border-width: 2px; width: 90%;"> <thead>
<tr>
<th colspan="2" style="background-color: grey; color: white; font-size: 14pt; font-weight: bold;"><br />
Agenda conferenza</th>
</tr>
</thead>
<tbody>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><span style="font-size: 13pt;">13:45</span><br />
<span style="font-size: 13pt;"><br /></span></td>
<td><span style="font-size: 13pt;">Registrazione dei partecipanti</span><br />
<span style="font-size: 13pt;"><br /></span></td>
</tr>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><span style="font-size: 13pt;">14:20</span></td>
<td><span style="font-size: 13pt;">Lo stato e il futuro di Delphi</span></td>
</tr>
<tr>
<td><br /></td>
<td style="font-style: italic;">Paolo Rossi - Wintech Italia</td>
</tr>
<tr>
<td><br /></td>
<td>Un altro anno importante per Delphi: una nuova piattaforma supportata, ottimi risultati di vendita e un generale "ritorno" di Delphi tra la comunità internazionale degli sviluppatori. In questa sessione scopriremo cosa ci riserva il futuro del nostro strumento di sviluppo.</td>
</tr>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><br />
15:00</td>
<td><br />
Sviluppo Linux in Delphi: Quali vantaggi?</td>
</tr>
<tr>
<td><br /></td>
<td style="font-style: italic;">Paolo Rossi, Luca Minuti - Wintech Italia</td>
</tr>
<tr>
<td><br /></td>
<td>Lo sviluppo su piattaforma Linux amplia notevolmente le possibilità di deployment degli applicativi (server) costruiti in Delphi. Oggigiorno è importantissimo sfruttare appieno le possibilità offerte dai servizi "cloud" di Amazon AWS, Microsoft Azure, Google Cloud, ecc.. per avere piattaforme di distribuzione a basso costo, performanti e comode da gestire.</td>
</tr>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><br />
15:50</td>
<td><br />
Coffee Break</td>
</tr>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><br />
16:10</td>
<td><br />
High performance 3D in Delphi</td>
</tr>
<tr>
<td><br /></td>
<td style="font-style: italic;">Paolo Rossi - Wintech Italia</td>
</tr>
<tr>
<td><br /></td>
<td><br />
Se avete bisogno di creare e gestire modelli e scene 3D (applicazioni industriali, automazione, ecc...) realmente performanti, i linguaggi ad alto livello (Delphi, Java, C#) non riescono a competere con le librerie 3D scritte in C++.<br />
In questa sessione vedremo come unire il meglio dei due mondi: la potenza e le prestazioni di calcolo di C++ e la facilità d'uso di Delphi:</td>
</tr>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><br />
17:00</td>
<td><br />
T.B.D.</td>
</tr>
<tr>
<td><br /></td>
<td style="font-style: italic;"></td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td width="10%"><span style="font-size: 13pt;">17:40</span></td>
<td><br />
Delphi REST + Sencha Ext JS = Web<br />
<span style="font-size: small; font-style: italic; font-weight: normal;">Paolo Rossi, Luca Minuti - Wintech Italia</span></td>
</tr>
<tr>
<td><br /></td>
<td>Con l'acquisizione di sencha da parte di IDERA, entra come strumento di sviluppo una delle migliori libreria JavaScript esistenti sul mercato. In Wintech abbiamo usato questa libreria da diversi anni per lo sviluppo Web e siamo convinti che per uno sviluppatore Delphi questa libreria rappresenti la scelta migliore per la costruzione di applicativi web performanti, con un'interfaccia utente gradevole e moderna, con pesante accesso a database e con buone performance!</td>
</tr>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><br />
18:15</td>
<td><br />
Conclusione</td>
</tr>
</tbody>
</table>
<br />
<br />
<!-- Agenda seminari--><br />
<table align="center" style="background-color: #e6e6e6; border-style: dotted; border-width: 2px; width: 600px;"> <thead>
<tr>
<th colspan="2" style="background-color: grey; color: white; font-size: 14pt; font-weight: bold;"><br />
Agenda seminari</th>
</tr>
</thead>
<tbody>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><br />
08:45</td>
<td><br />
Registrazione dei partecipanti</td>
</tr>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><br />
09:20</td>
<td><br />
Track 1: Applicazioni MVVM cross-framework (VCL-FMX-WEB)</td>
</tr>
<tr>
<td><br /></td>
<td style="font-style: italic;">Maurizio Del Magno - Levante Software</td>
</tr>
<tr>
<td><br /></td>
<td>Riusabilità, manutenibilità e testabilità sono concetti importantissimi per chi sviluppa software al giorno d'oggi. Riutilizzare la maggior parte del codice anche tra progetti cross-platform e, perché no, anche cross-framework (VCL-FMX-WEB), sarebbe bello vero? Obiettivo di questo corso è dimostrare come, con l'utilizzo di strumenti adatti (iORM-MVVM), sia possibile applicare questo pattern anche in Delphi senza dover necessariamente rinunciare alle caratteristiche RAD che lo hanno reso il nostro ambiente di sviluppo preferito... anzi!<br />
<ul>
<li>Logica di visualizzazione<br />
</li>
<li>Logica di presentazione<br />
</li>
<li>Command binding<br />
</li>
<li>Data binding<br />
</li>
<li>Contesto di visualizzazione<br />
</li>
</ul>
<ul> </ul>
</td>
</tr>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><span style="font-size: 13pt;">09:20</span></td>
<td><span style="font-size: 13pt;">Track 2: Architettura a microservizi in Delphi</span></td>
</tr>
<tr>
<td><br /></td>
<td style="font-style: italic;">Luca Minuti - Wintech Italia</td>
</tr>
<tr>
<td><br /></td>
<td>Un'architettura monolitica per la costruzione degli application server può risultare comoda all'inizio ma rappresenta un limite alla crescita e alla complessità dell'architettura stessa. L'architettura microservices consente di espandere a piacimento la propria architettura senza incorrere in limiti predefiniti. In questo workshop vedremo nel dettaglio la teoria dell'architettura microservices, i vantaggi e gli svantaggi e come costruirli con Delphi.<br />
<ul>
<li>I vari tipi di architettura<br />
</li>
<li>SOA & REST<br />
</li>
<li>Programmazione stateless<br />
</li>
<li>I principi di scalabilità, disponibilità, consistenza<br />
</li>
<li>Costruire microservices con Delphi<br />
</li>
</ul>
<ul> </ul>
</td>
</tr>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><span style="font-size: 13pt;">11:00</span><br />
<span style="font-size: 13pt;"><br /></span></td>
<td><span style="font-size: 13pt;">Coffee Break</span><br />
<span style="font-size: 13pt;"><br /></span></td>
</tr>
<tr style="font-size: 13pt; font-weight: bold;">
<td width="10%"><span style="font-size: 13pt;">12:30</span></td>
<td><span style="font-size: 13pt;">Conclusione e Pranzo</span></td>
</tr>
</tbody>
</table>
<br />
<table><tbody>
<tr> <td><img border="0" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkiwRNdQx9DfUpUjKYgt_KKERhHxcD95Qmf4p4Iu5-obXlKxQ64ofImuO0PxWorkUh7UI9lWPNtLQbTWOmdoV3QgixW0ZDwN8iTnIfW69e0B7HmjJXgj1gR6rUkt7okfZLDHVMj_7iI_s/s200/fourpoints.jpg" width="200" /></td> <td><div style="text-align: justify;">
La conferenza ed i seminari si svolgeranno presso:<br />
<a href="http://www.fourpointspadova.com/" target="_blank">Hotel Sheraton Padova (Four Points)</a><br />
Corso Argentina 5<br />
35129 Padova</div>
</td> </tr>
</tbody></table>
<br />Paolo Rossihttp://www.blogger.com/profile/09956628024928838702noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-40532554722178423842017-09-07T10:01:00.000+02:002017-09-07T10:01:39.746+02:00IDERA acquisisce Sencha<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0FCTlyGHK-GfAOUhFq5XTQy9vnP33xt1Z5MaqO1t3362TSHR4OlMXlY2Rc6_ppWWc3XNZF90BHqhvdYVkBVKO4-yxEUUmM5LH58bSr1dyER1i6_-O-Q4faqzLYHM1H22p9_q8w48HH3I/s1600/idera-sencha.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="163" data-original-width="329" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0FCTlyGHK-GfAOUhFq5XTQy9vnP33xt1Z5MaqO1t3362TSHR4OlMXlY2Rc6_ppWWc3XNZF90BHqhvdYVkBVKO4-yxEUUmM5LH58bSr1dyER1i6_-O-Q4faqzLYHM1H22p9_q8w48HH3I/s320/idera-sencha.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
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.<br />
<br />
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.<br />
<br />
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.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB0z7ipSdY-lCeaJpYbydwjMZjBiVrLA2Kuf1dBP9iZU93n-XCHYzh2LQ1yK6-BR4nMGGrvSe0VlXyHYtRYKYxtHHBanowkHHjHdxRAAwnD9GOM98vuZaj_32KH3XYrJu4Nhxc_jvrUck/s1600/Ext_js_logo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="187" data-original-width="362" height="103" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB0z7ipSdY-lCeaJpYbydwjMZjBiVrLA2Kuf1dBP9iZU93n-XCHYzh2LQ1yK6-BR4nMGGrvSe0VlXyHYtRYKYxtHHBanowkHHjHdxRAAwnD9GOM98vuZaj_32KH3XYrJu4Nhxc_jvrUck/s200/Ext_js_logo.jpg" width="200" /></a>Esistono infatti già alcuni framework Delphi che usano Ext JS come frontend, il più famoso dei quali è la libreria <a href="http://www.unigui.com/" target="_blank">UniGUI</a> che consente di sviluppare applicazioni web usando l'approccio RAD tipico di Delphi.<br />
<br />
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).<br />
<br />
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!<br />
<br />
<div style="text-align: center;">
<b>La domanda sorge quindi spontanea, a quando l'integrazione di Ext JS con Delphi?? 😀</b></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyufNCqsPxdVYteVftItwC3474Fe7JRRUBPM6YpLXyizoYTwW4EcbDMBz-jSxIQf9lmHK3kAAoKgysCNH4UnYCyLTQlZSpiMgf-cMzULMoVtm7pNURwVsG5IbIXxMa8JhiPZkNEF9c9m0/s1600/delphi-sencha.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="312" data-original-width="400" height="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyufNCqsPxdVYteVftItwC3474Fe7JRRUBPM6YpLXyizoYTwW4EcbDMBz-jSxIQf9lmHK3kAAoKgysCNH4UnYCyLTQlZSpiMgf-cMzULMoVtm7pNURwVsG5IbIXxMa8JhiPZkNEF9c9m0/s200/delphi-sencha.png" width="200" /></a></div>
<br />
<br />
Se vivete in Italia e siete interessati ad approfondire il tema dello sviluppo di applicazioni web con Sencha Ext JS e Delphi, <a href="http://www.wintech-italia.it/" target="_blank">Wintech Italia</a>, uno dei pochi qualificati fornitori di corsi su Ext JS in Italia, organizza un <a href="http://www.wintech-italia.it/corsidelphi/web.html" target="_blank">corso</a> il 12 e 13 ottobre 2017 in sede Wintech a Parma.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK67DBMNo2aUTWc7XMTwymsdQG-e3dFwe8R6Y9O3YKQXdQFAGo5HCYYAmMhn4Q0o4Y0ngSxQmpZspg_cecEkJmYNs6rUTFCFBtzIodpmtkPDdYZJnyOEigjsnRN1sCuY_UZSdaFN4knxM/s1600/firma-round.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="59" data-original-width="288" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK67DBMNo2aUTWc7XMTwymsdQG-e3dFwe8R6Y9O3YKQXdQFAGo5HCYYAmMhn4Q0o4Y0ngSxQmpZspg_cecEkJmYNs6rUTFCFBtzIodpmtkPDdYZJnyOEigjsnRN1sCuY_UZSdaFN4knxM/s200/firma-round.png" width="200" /></a></div>
<br />
<div>
<br /></div>
Paolo Rossihttp://www.blogger.com/profile/09956628024928838702noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-25970213366664283712017-04-09T10:36:00.000+02:002017-04-09T10:36:37.991+02:00Le novità di Delphi 10.2 Tokyo in dettaglio<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX0tP5QWgvmYHEB9QY6iUqfGol9nuDdK5gmdwPkl3zInrCg0Lto9cmQCaY9egpsOPc5OutPAH2AaydfMILCtOrfkIWf3nf93M4P2l5_wfu8rG4u58pYa5Ut9sTf-84zhi4ZYOYvJBnt4I/s1600/Penguins_short.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX0tP5QWgvmYHEB9QY6iUqfGol9nuDdK5gmdwPkl3zInrCg0Lto9cmQCaY9egpsOPc5OutPAH2AaydfMILCtOrfkIWf3nf93M4P2l5_wfu8rG4u58pYa5Ut9sTf-84zhi4ZYOYvJBnt4I/s640/Penguins_short.jpg" width="640" /></a></div>
<br />
<div style="text-align: justify;">
Alla fine di marzo è stata rilasciata la versione 10.2 (Tokyo) di Delphi, vediamo nel dettaglio la serie di novità che ha portato.</div>
<br />
<h2>
Benvenuto Linux!</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcuvrov4F0tv-wU7-BQ3b9nUBefhrARnnQTmimxLpURVLBhBFAeweYXGAiccX-TnCHTFGJ1uTJgYdjpig0jhzKTtLJPv9p9YW-fPFRzeAGzTz2L_1RdOmUJIFr5iUL1q4vcyoeQ_vprb8/s1600/IDE_Platform.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcuvrov4F0tv-wU7-BQ3b9nUBefhrARnnQTmimxLpURVLBhBFAeweYXGAiccX-TnCHTFGJ1uTJgYdjpig0jhzKTtLJPv9p9YW-fPFRzeAGzTz2L_1RdOmUJIFr5iUL1q4vcyoeQ_vprb8/s400/IDE_Platform.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<div style="text-align: justify;">
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).</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBAu4-xb92mCUwET3dEuP1VgQ1dIO0rixq8p7_GS3_IwPtuy3_3mfJalEe2C0IY0_Z1fjokHI6Ywjmx4gzyeoSvzSlUvGnFRf7P9-7XFaGsRAvO5ir2n8YgBz9nZ98Yl1-G6i2eLymyDo/s1600/IDE_Type_Console.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBAu4-xb92mCUwET3dEuP1VgQ1dIO0rixq8p7_GS3_IwPtuy3_3mfJalEe2C0IY0_Z1fjokHI6Ywjmx4gzyeoSvzSlUvGnFRf7P9-7XFaGsRAvO5ir2n8YgBz9nZ98Yl1-G6i2eLymyDo/s1600/IDE_Type_Console.png" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj36qfnBR0uo9kmECAemJwEnUYWXkC3fjM-1_Wx_UPwyMSxCfgurpubqqIy0c-jd4KMAjSizT1rjFtzTMlDDNq0gyf-5BuC0Abnr7XWEXxTJXPtil8g0EquyLox-hV4-fqLJ8rcPAuTcBA/s1600/IDE_Type_Package.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj36qfnBR0uo9kmECAemJwEnUYWXkC3fjM-1_Wx_UPwyMSxCfgurpubqqIy0c-jd4KMAjSizT1rjFtzTMlDDNq0gyf-5BuC0Abnr7XWEXxTJXPtil8g0EquyLox-hV4-fqLJ8rcPAuTcBA/s1600/IDE_Type_Package.png" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhauiJdLmXI_jxcQDZmZeRF-zDcfypWSg10sGkxiGGx1qcRgQT3kltFO2hn_Twgn1JIF9xIFpKOEQjiwxMEHPJ5Nr_CJiBQdtwXwj5BxyKiuw1MDn8szCkba38zeBdHI1eEUMn7N9oEk1Y/s1600/IDE_Type_DLL.png" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhauiJdLmXI_jxcQDZmZeRF-zDcfypWSg10sGkxiGGx1qcRgQT3kltFO2hn_Twgn1JIF9xIFpKOEQjiwxMEHPJ5Nr_CJiBQdtwXwj5BxyKiuw1MDn8szCkba38zeBdHI1eEUMn7N9oEk1Y/s1600/IDE_Type_DLL.png" /></a><br />
<div style="text-align: justify;">
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.</div>
<br />
<div style="text-align: justify;">
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.</div>
<br />
<div style="text-align: justify;">
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.</div>
<br />
<div style="text-align: justify;">
Per lo sviluppo invece consiglio di installare le distribuzioni ufficialmente supportate se volete evitare qualsiasi intervento manuale di configurazione dell'ambiente.</div>
<br />
<br />
<div style="text-align: justify;">
Tecnicamente la compilazione e il deployment per Linux usano le stesse tecniche e strumenti delle altre piattaforme.</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRPj7rExf5HwL2d3PjJR9IXrj5LnaDNCD0RC96qbnKnJELMozqIOQ3TQgg3watOpgvl_XHiATirfmOYG-hFY-AsZ662Fk6wDZupvTH4IROAH1pk1Pds5g3ZnXXBkdFvBE0KOApZkkWNN0/s1600/IDE_Profile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="317" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRPj7rExf5HwL2d3PjJR9IXrj5LnaDNCD0RC96qbnKnJELMozqIOQ3TQgg3watOpgvl_XHiATirfmOYG-hFY-AsZ662Fk6wDZupvTH4IROAH1pk1Pds5g3ZnXXBkdFvBE0KOApZkkWNN0/s400/IDE_Profile.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Nello specifico:</div>
<ol>
<li>Compilazione su Windows con il compilatorre Delphi (basato su LLVM)</li>
<li>Pachettizazione usando le informazioni di deployment</li>
<li>Spedizione alla macchina Linux target usando il PAServer (da installare sulla macchina Linux)</li>
<li>Debug (eventuale) nell'IDE usando PAServer</li>
</ol>
<br />
<div style="text-align: justify;">
E comunque possibile prendere il binario generato, copiarlo e lanciarlo su una qualsiasi macchina Linux (attenzione ai permessi del file quando lo copiate)</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAIzfwroLN3xLA_x4640uMjWaQMVEnIfYeREuZ5nDWFfbljTEG-LoteBAqrFK_-0tqb-r5UPtbFh02sTCqLw5l348i2ZnkHcgzfExEwQnufnAopWNrXLK_6sqGOJXA3YiNaFrA8r8cx5Q/s1600/binaries.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="110" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAIzfwroLN3xLA_x4640uMjWaQMVEnIfYeREuZ5nDWFfbljTEG-LoteBAqrFK_-0tqb-r5UPtbFh02sTCqLw5l348i2ZnkHcgzfExEwQnufnAopWNrXLK_6sqGOJXA3YiNaFrA8r8cx5Q/s400/binaries.png" width="400" /></a></div>
<br />
<div style="text-align: justify;">
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:</div>
<br />
<ul>
<li>ARC (Automatic Reference Count) per gli oggetti (non dovete quindi distruggerli)</li>
<li>Le stringhe non sono sempre 1-based come nel compilatore tradizionale ma:</li>
<ul>
<li>Sono 0-based nei compilatori iOS e Android</li>
<li>Sono 1-based nel compilatore Linux</li>
</ul>
</ul>
<br />
<div style="text-align: justify;">
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.</div>
<br />
<div style="text-align: justify;">
Il livello di compatibilità del codice sorgente è ottimo, ho già compilato su Linux la mia <a href="https://github.com/paolo-rossi/delphi-jose-jwt" target="_blank">libreria JWT</a> (https://github.com/paolo-rossi/delphi-jose-jwt) e il <a href="https://github.com/delphi-blocks/WiRL" target="_blank">progetto WiRL</a> (https://github.com/delphi-blocks/WiRL) senza particolari problemi.</div>
<br />
<h2>
Altre novità nella 10.2</h2>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<h4>
FireDAC</h4>
<div>
<br /></div>
<div>
<div style="text-align: justify;">
Il componente TFDMemTable guadagna un design time editor che consente di visualizzare e modificare i dati della memory table a design-time!</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsiVEaidD6U7t6TVQNyJO4U7rjdPs66vwd5p5ID5SgxkmIS0kWfliKcMJl6nbU4RBDrkGJ6kTCplfWTDG1PWmer3hgy590PENU4q-dH9cir-RDBvdEEIc-IsTKSAa1rg3_POpDFjq2Aa4/s1600/FD_editor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsiVEaidD6U7t6TVQNyJO4U7rjdPs66vwd5p5ID5SgxkmIS0kWfliKcMJl6nbU4RBDrkGJ6kTCplfWTDG1PWmer3hgy590PENU4q-dH9cir-RDBvdEEIc-IsTKSAa1rg3_POpDFjq2Aa4/s400/FD_editor.png" width="400" /></a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
Altre feature in FireDAC:</div>
<br />
<ul>
<li>Supporto per MariaDB (v5.5)</li>
<li>New GUID access for TField</li>
<li>Supporto per la versione 5.7 di MySQL</li>
<li>Support Firebird per Direct I/O</li>
<li>Grazie al BLOB streaming ridotta memoria sui client</li>
<li>Il componente VCL TDBImage supporta direttamente i formati JPEG e PNG</li>
</ul>
<div>
<br /></div>
<h4>
IDE</h4>
<div>
<br /></div>
<div style="text-align: justify;">
Il menu View dell'IDE è stato completamente riorganizzato per consentire una miglior categorizzazione delle numerose voci (nelle passate versioni rischiavano di uscire dallo schermo!)</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8SFbhoZLlUcThCeAcrnfIEj4c5wK-uIn3TEAQKuAuMNAaplQlXsdhZU0K6RWWj6nvnyXKauMwP2rB00acLGPLNQAbct4xzfPWCR4igruEngLFe8kzg9N355DUjmGscwfoX-CKbEezXl8/s1600/10.2_View_main.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8SFbhoZLlUcThCeAcrnfIEj4c5wK-uIn3TEAQKuAuMNAaplQlXsdhZU0K6RWWj6nvnyXKauMwP2rB00acLGPLNQAbct4xzfPWCR4igruEngLFe8kzg9N355DUjmGscwfoX-CKbEezXl8/s400/10.2_View_main.png" width="400" /></a></div>
<br />
<div style="text-align: justify;">
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.</div>
<br />
Altre funzionalità nell'IDE:<br />
<ul>
<li>Migliorato supporto per Azure e AWS con nuove API</li>
<li>Il compilatore a riga di comando supporta ora large-memory-address</li>
<li>Supporto per il debugging e simulatore nei nuovi macOS e iOS</li>
</ul>
<div>
<br /></div>
<h4>
FireMonkey</h4>
<div>
<br /></div>
<h4>
<ul style="font-weight: normal;">
<li>Supporto Multi-Threading per le classi TBitmap, TCanvas e TContext3D</li>
<li>Maggior velocità dell'interfaccia utente (UI) Android grazie ad un miglior supporto multi-thread</li>
<li>Migliorata l'esperienza utente in TMultiView</li>
<li>Possibilità di modifica di SystemStatusBar.Color in iOS tramite nuove proprietà nella classe TForm</li>
<li>Nuovo stile FMX per macOS e Android</li>
</ul>
<div>
<span style="font-weight: normal;"><br /></span></div>
</h4>
<h4>
RTL</h4>
<div>
<br /></div>
<ul>
<li>Nuova proprietà SynchronizeEvents per le classi TTetheringManager e TTetheringProfile per controllare la sincronizzazione con il thread principale</li>
<li>Supporto delle funzioni di hashing MD5 e SHA1 per file e stream</li>
</ul>
<div>
<br /></div>
<h4>
Installer/GetIt</h4>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikUDERijRQF52tVdH7VtAdSzeePLb6RlaKPJc8g_JSeWG-5P8MSt9w7950W-TDtvIq7G22lulQ8kiVEm5sUh2GVmcnRUZR58DurNT0pwpNHsLpBQn12ItdFbfW_5in631y7ZWLvgAReLI/s1600/installer.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikUDERijRQF52tVdH7VtAdSzeePLb6RlaKPJc8g_JSeWG-5P8MSt9w7950W-TDtvIq7G22lulQ8kiVEm5sUh2GVmcnRUZR58DurNT0pwpNHsLpBQn12ItdFbfW_5in631y7ZWLvgAReLI/s320/installer.png" width="276" /></a></div>
<div style="text-align: justify;">
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.</div>
<br />
<div style="text-align: justify;">
Anche GetIt sta guadagnando sempre più consenso in quanto l'installazione di componenti tramite questo tool è facile e immediata.</div>
<br />
<div style="text-align: justify;">
In questo momento sono già presenti una buona selezioni di componenti/expert già aggiornati a RAD Studio 10.2 Tokyo.</div>
<br />
<br />
<br />
<h2>
Considerazioni finali</h2>
<div style="text-align: justify;">
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.</div>
<br />
<div style="text-align: justify;">
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.</div>
<br />
<h2>
Link a risorse</h2>
<a href="http://docwiki.embarcadero.com/RADStudio/Tokyo/en/What%27s_New" target="_blank">DocWiki What's New</a><br />
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/What%27s_New<br />
<br />
<a href="https://www.embarcadero.com/products/rad-studio/whats-new-in-10-2-tokyo" target="_blank">What's New in RAD Studio 10.2</a><br />
https://www.embarcadero.com/products/rad-studio/whats-new-in-10-2-tokyo<br />
<br />
<a href="https://edn.embarcadero.com/article/44747" target="_blank">New features and customer reported issues fixed in RAD Studio 10.2 Tokyo</a><br />
https://edn.embarcadero.com/article/44747<br />
<br />
<br />
<div style="text-align: right;">
Un saluto</div>
<div style="text-align: right;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxS6LH6RAgHaQX20qtGi-soPdDwmIes9YswjV-sdDAw9XUYNinysKagUcLqPKgw7Dy8NJA0bFxbRqDr0JKAzpc9k3Z7y1Xd_F4342MtLrT_3VWxeIBJ7NpooKxJT8dW2XZGvq-KTAx_k/s1600/firma.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxS6LH6RAgHaQX20qtGi-soPdDwmIes9YswjV-sdDAw9XUYNinysKagUcLqPKgw7Dy8NJA0bFxbRqDr0JKAzpc9k3Z7y1Xd_F4342MtLrT_3VWxeIBJ7NpooKxJT8dW2XZGvq-KTAx_k/s1600/firma.png" /></a></div>
<div style="text-align: right;">
<br /></div>
Paolo Rossihttp://www.blogger.com/profile/09956628024928838702noreply@blogger.com0Piacenza, Province of Piacenza, Italy45.0526206 9.692984499999965944.9628636 9.531622999999966 45.142377599999996 9.8543459999999659tag:blogger.com,1999:blog-4261051967240266070.post-33651057958822313782016-11-08T14:30:00.000+01:002016-11-08T14:31:26.776+01:00Licenze open source<h2>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOhmXyeI0eIzUNtwsEgSsmjifiAdw6oaQs1Mj717NGVOuj-NY1y7FLtolA447nP9Uhgg4cR-eFxPPK2INSdr_ddCaxyondldoibiqlkJndzfDXk2W2HMb3l3XdWL6iI94M3teVv2xptuoh/s1600/gears-818456__180.jpg" imageanchor="1" style="clear: right; display: inline !important; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOhmXyeI0eIzUNtwsEgSsmjifiAdw6oaQs1Mj717NGVOuj-NY1y7FLtolA447nP9Uhgg4cR-eFxPPK2INSdr_ddCaxyondldoibiqlkJndzfDXk2W2HMb3l3XdWL6iI94M3teVv2xptuoh/s200/gears-818456__180.jpg" width="200" /></a></h2>
<div style="text-align: left;">
Una delle caratteristiche che ha sempre contraddistinto Delphi è l'ampia disponibilità di <b>componenti </b>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: <a href="https://github.com/">GitHub</a>, <a href="https://sourceforge.net/">SourceForge</a>, <a href="https://bitbucket.org/">Bitbucket</a> e l'ormai pensionato <a href="https://code.google.com/">Google code</a>. Questi siti ospitano codice <a href="https://it.wikipedia.org/wiki/Open_source">open source</a>, 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.</div>
<br />
<br />
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.<br />
<br />
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.<br />
<br />
In effetti la maggior parte di chi sviluppa in questo ambito guadagna tramite <b>sponsorizzazioni </b>o <b>supporto tecnico</b> a pagamento.<br />
<br />
<ul></ul>
<h2>
GPL e LGPL</h2>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2MPp9yhPrNa3ZVIiN9pktELzG-tYn81WsC67bWnTjqq5RqV_JHcsqD-JCk1YJahyR-7PGpRPwvuR9eScs_RgEV7D3ZnkEeShhi8VMk3vGegH9HdUJEPukse9HsLem2UjVr1PpW_Lou2VX/s1600/GPLv3_Logo.svg.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2MPp9yhPrNa3ZVIiN9pktELzG-tYn81WsC67bWnTjqq5RqV_JHcsqD-JCk1YJahyR-7PGpRPwvuR9eScs_RgEV7D3ZnkEeShhi8VMk3vGegH9HdUJEPukse9HsLem2UjVr1PpW_Lou2VX/s400/GPLv3_Logo.svg.png" /></a><i>«Le licenze per la maggioranza dei programmi hanno lo scopo di togliere all'utente la libertà di condivid</i><i>erlo 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.»</i></div>
<div>
<br /></div>
<div>
Queste sono le prime righe riportate nel preambolo della licenza. È abbastanza evidente il forte messaggio che <a href="https://it.wikipedia.org/wiki/Richard_Stallman">Richard Stallman</a> 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.<br />
<br />
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.</div>
<div>
<br /></div>
<div>
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 <i>usano</i> la libreria non hanno questo vincolo.<br />
<br />
Riferimenti: <a href="http://www.gnu.org/licenses/gpl.html">Testo originale delle licenza</a>, <a href="http://katolaz.homeunix.net/gplv3/gplv3-it-final.html">Traduzione non ufficiale in italiano</a>, <a href="https://www.gnu.org/licenses/gpl-faq.html">FAQ</a><br />
<br /></div>
<div>
<ul></ul>
</div>
<h2>
Apache license</h2>
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0rc1bZV4yFeKPkiKQhizJmQFLleJBgxXekyfMmiA-fxCGlNpf5URCOaV7oQMZZmBTjVaS6zZACaeuOUx5p1K-EYDpa-8Gf3oe0Si4e3VMLAF_DinIi1WtQHlHrldPls9jeHTg3Ig0cp03/s1600/apache.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="97" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0rc1bZV4yFeKPkiKQhizJmQFLleJBgxXekyfMmiA-fxCGlNpf5URCOaV7oQMZZmBTjVaS6zZACaeuOUx5p1K-EYDpa-8Gf3oe0Si4e3VMLAF_DinIi1WtQHlHrldPls9jeHTg3Ig0cp03/s200/apache.jpg" width="200" /></a></div>
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.<br />
<br />
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.<br />
<br />
Riferimenti: <a href="http://www.apache.org/licenses/">Testo originale della licenza</a><br />
<br /></div>
<h2>
BSD license</h2>
<div>
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 <a href="https://it.wikipedia.org/wiki/Darwin_(sistema_operativo)">Darwin</a> che è a tutti gli affetti un OS closed source.<br />
<br />
La licenza consta di soli quattro punti che riporto testuali dalla traduzione italiana:<br />
<br />
<br />
<ol>
<li><span style="font-family: "courier new" , "courier" , monospace;">Le ridistribuzioni del codice sorgente devono conservare la nota di copyright sopra riportata, questa lista di condizioni e la seguente limitazione di responsabilità.</span></li>
<li><span style="font-family: "courier new" , "courier" , monospace;">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.</span></li>
<li><span style="font-family: "courier new" , "courier" , monospace;">Ogni materiale pubblicitario che riporti caratteristiche o uso di questo software deve mostrare la seguente attestazione: Questo prodotto include software sviluppati dalla <organizzazione>.</span></li>
<li><span style="font-family: "courier new" , "courier" , monospace;">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.</span></li>
</ol>
<br />
<br />
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.<br />
<br />
Riferimenti: <a href="https://opensource.org/licenses/bsd-license.php">Testo originale della licenza</a><br />
<br /></div>
<h2>
MIT license</h2>
<div>
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à.<br />
<br />
Riferimenti: <a href="https://opensource.org/licenses/MIT">Testo originale delle licenza</a><br />
<br /></div>
<h2>
MPL</h2>
<div>
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.<br />
<br />
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.<br />
<br />
Riferimenti: <a href="https://www.mozilla.org/en-US/MPL/2.0/">Testo originale della licenza</a>, <a href="https://www.mozilla.org/en-US/MPL/2.0/FAQ/">FAQ</a></div>
Luca Minutihttp://www.blogger.com/profile/08976074206082701447noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-24863216485404038052016-11-07T14:50:00.001+01:002016-11-07T14:50:57.155+01:00Conferenza Delphi Porte Aperte 2016<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgculllzK7zFlkx7sN1vWzvwjzmP58JEOUynMwcijlJw27BYOr0AAAgqubRSOEVnsP1zy5vSQ32zwJ8XToe4u3FfhZhFCmO90M_sLbOqB5mfL88Y4-YEhm-EWg994MaPwLdjnr2L-MY23U/s1600/dpa.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgculllzK7zFlkx7sN1vWzvwjzmP58JEOUynMwcijlJw27BYOr0AAAgqubRSOEVnsP1zy5vSQ32zwJ8XToe4u3FfhZhFCmO90M_sLbOqB5mfL88Y4-YEhm-EWg994MaPwLdjnr2L-MY23U/s400/dpa.png" width="400" /></a></div>
<br />
<br />
<div style="text-align: justify;">
<b>Wintech-Italia s.r.l.</b> organizza anche quest’anno l’evento <b>Delphi Porte Aperte</b>, un incontro, gratuito, di mezza giornata per un aggiornamento sullo stato attuale di Delphi.<br />
<br />
L'evento in edizione 2016 <b>raddoppia!</b> Al pomeriggio il classico <b>evento gratuito</b> di mezza giornata dedicato a tutti i programmatori Delphi ansiosi di conoscere le novità dello strumento di sviluppo. Al mattino sono previsti due <b>seminari a pagamento</b> ad alto contenuto tecnico tenuti da Paolo Rossi e Luca Minuti.</div>
<br />
<h2>
Conferenza: Lo stato dell'arte di Delphi</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh4M72-Up6-nuN9OvoXFcA7iTyCsulKU2sdOOyfN56ct9wzDE5SijR4PIgUQR2sCIz4405oSpDQqafWQ562DwA7_SSq6aCDW8JNQCzs9m_cjkc9blmKfAEqJgHA-fDEGQipCPTJFSp-C0/s1600/state-art.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh4M72-Up6-nuN9OvoXFcA7iTyCsulKU2sdOOyfN56ct9wzDE5SijR4PIgUQR2sCIz4405oSpDQqafWQ562DwA7_SSq6aCDW8JNQCzs9m_cjkc9blmKfAEqJgHA-fDEGQipCPTJFSp-C0/s1600/state-art.png" /></a></div>
<div>
<br /></div>
<div style="text-align: justify;">
L'incontro offre una panoramica sullo <b>"stato dell'arte" di Delphi</b>, 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 <b>momento di scambio e discussione</b> tra i partecipanti.</div>
<div style="text-align: justify;">
</div>
<br />
<div align="center" style="margin-bottom: 15px;">
<span style="font-size: x-small;">Il biglietto di ingresso gratuito comprende l'ingresso alla conferenza del pomeriggio e il coffee break</span><br />
<a href="http://www.eventbrite.it/e/biglietti-delphi-porte-aperte-2016-27777558425?ref=ebtn" target="_blank"><img alt="Eventbrite - Delphi Porte Aperte 2016" src="https://www.eventbrite.it/custombutton?eid=27777558425" /><br />
</a></div>
<br />
<br />
<h2>
Seminari: Applicazioni stabili e sicure</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7KKMBijKdHFCRRXqhwA2A3-hdsPuIzKIcF2Pivi1ptZKIOMD3C88N4wOlx3Tes92qXvyzztHi1j0Rs5bdtimOYHktqXnH0WKLY26-Jwbv1DFK0dfoNXdCPKLJOvM3D4rzmAK5T8Bw9q0/s1600/stability.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7KKMBijKdHFCRRXqhwA2A3-hdsPuIzKIcF2Pivi1ptZKIOMD3C88N4wOlx3Tes92qXvyzztHi1j0Rs5bdtimOYHktqXnH0WKLY26-Jwbv1DFK0dfoNXdCPKLJOvM3D4rzmAK5T8Bw9q0/s1600/stability.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Nella <b>Sala A </b>si terrà il seminario dal titolo: <b>Eccezioni e debug: avere il controllo delle applicazioni</b></div>
<div class="separator" style="clear: both; text-align: justify;">
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?</div>
<div class="separator" style="clear: both; text-align: justify;">
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"</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoqrkBlYQxI0jtOmGbfMzX4gHokR5sBYDVK4Lra5e5fw7qXtM9fJAkqvGUdQh4XP4sgv8mPP_3cB87Oy4VrMozj2Ntzh77KLapQAZ6b1dTGJiyz-izRwUl0ommIx8PmCN9qQcixE459Uc/s1600/security.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoqrkBlYQxI0jtOmGbfMzX4gHokR5sBYDVK4Lra5e5fw7qXtM9fJAkqvGUdQh4XP4sgv8mPP_3cB87Oy4VrMozj2Ntzh77KLapQAZ6b1dTGJiyz-izRwUl0ommIx8PmCN9qQcixE459Uc/s1600/security.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Nella <b>Sala B </b>si terrà il seminario dal titolo: <b>Sviluppare applicazioni (più) sicure</b></div>
<div class="separator" style="clear: both; text-align: justify;">
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</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div align="center" style="margin-bottom: 15px;">
<span style="font-size: x-small;">Il biglietto di ingresso per i seminari comprende l'ingresso ai seminari, alla conferenza, al pranzo e ai coffee break</span><br />
<a href="http://www.eventbrite.it/e/biglietti-delphi-porte-aperte-2016-27777558425?ref=ebtn" target="_blank">
<img alt="Eventbrite - Delphi Porte Aperte 2016" src="https://www.eventbrite.it/custombutton?eid=27777558425" /><br />
</a></div>
<br />
<br />
<hr />
<br />
<!-- Agenda conferenza --><br />
<table align="center" style="background-color: #e6e6e6; border-style: dotted; border-width: 2px; width: 90%;"><thead>
<tr><th colspan="2" style="background-color: grey; color: white; font-size: 14pt; font-weight: bold;">Agenda conferenza</th></tr>
</thead> <tbody>
<tr style="font-size: 13pt; font-weight: bold;"><td>13:45</td><td>Registrazione dei partecipanti</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>14:20</td><td>Delphi: Presente e Futuro</td></tr>
<tr><td></td><td style="font-style: italic;">Paolo Rossi - Wintech Italia</td></tr>
<tr><td></td><td>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</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>15:00</td><td>RTL: Cosa vi siete persi nelle ultime versioni di Delphi</td></tr>
<tr><td></td><td style="font-style: italic;">Luca Minuti - Wintech Italia</td></tr>
<tr><td></td><td>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</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>15:50</td><td>Coffee Break</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>16:10</td><td>Delphi per Linux: Come preparare il proprio codice</td></tr>
<tr><td></td><td style="font-style: italic;">Paolo Rossi - Wintech Italia</td></tr>
<tr><td></td><td>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</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>17:10</td><td>Application Server REST con WiRL</td></tr>
<tr><td></td><td style="font-style: italic;">Paolo Rossi, Luca Minuti - Wintech Italia</td></tr>
<tr><td></td><td>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</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>17:50</td><td>Domande e discussione finale</td></tr>
<tr><td></td><td>Spazio per le vostre domande</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>18:15</td><td>Conclusione</td></tr>
</tbody></table>
<br />
<br />
<!-- Agenda seminari--><br />
<table align="center" style="background-color: #e6e6e6; border-style: dotted; border-width: 2px; width: 600px;"><thead>
<tr><th colspan="2" style="background-color: grey; color: white; font-size: 14pt; font-weight: bold;">Agenda seminari</th></tr>
</thead> <tbody>
<tr style="font-size: 13pt; font-weight: bold;"><td>08:45</td><td>Registrazione dei partecipanti</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>09:20</td><td>Track 1: Eccezioni e debug: avere il controllo delle applicazioni</td></tr>
<tr><td></td><td style="font-style: italic;">Paolo Rossi - Wintech Italia</td></tr>
<tr><td></td><td><br />
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?<br />
<br />
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":<br />
<ul>
<li>Le eccezioni queste.. sconosciute??</li>
<li>Salvataggio di file di log e di report sulle eccezioni</li>
<li>Il ruolo dello stack nella gestione delle eccezioni</li>
<li>L'uso di strumenti esterni di gestione delle eccezioni</li>
<li>Procedure di debug basilari ed avanzate</li>
<li>Debugging di applicazioni multithread</li>
<li>Debugging remoto con Delphi</li>
</ul>
</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>09:20</td><td>Track 2: Sviluppare applicazioni (più) sicure</td></tr>
<tr><td></td><td style="font-style: italic;">Luca Minuti - Wintech Italia</td></tr>
<tr><td></td><td><br />
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.<br />
<br />
In dettaglio, vedremo come sviluppare applicazioni più sicure:<br />
<ul>
<li>(SQL) Injection, XSS</li>
<li>Validazione dell'input</li>
<li>Social engineering</li>
<li>Sicurezza delle password</li>
<li>Sicurezza dei dati</li>
<li>Crittografia, Connessioni SSL</li>
<li>OTP, password, biometriche</li>
<li>Autenticazione e autorizzazione</li>
</ul>
</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>11:00</td><td>Coffee Break</td></tr>
<tr style="font-size: 13pt; font-weight: bold;"><td>12:30</td><td>Conclusione e Pranzo</td></tr>
</tbody></table>
<br />
<br />
<table><tbody>
<tr> <td><img border="0" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkiwRNdQx9DfUpUjKYgt_KKERhHxcD95Qmf4p4Iu5-obXlKxQ64ofImuO0PxWorkUh7UI9lWPNtLQbTWOmdoV3QgixW0ZDwN8iTnIfW69e0B7HmjJXgj1gR6rUkt7okfZLDHVMj_7iI_s/s200/fourpoints.jpg" width="200" /></td> <td><div style="text-align: justify;">
La conferenza ed i seminari si svolgeranno presso:<br />
<a href="http://www.fourpointspadova.com/" target="_blank">Hotel Sheraton Padova (Four Points)</a><br />
Corso Argentina 5<br />
35129 Padova</div>
</td> </tr>
</tbody></table>
<br />Paolo Rossihttp://www.blogger.com/profile/09956628024928838702noreply@blogger.com0Piacenza, Province of Piacenza, Italy45.0526206 9.692984499999965944.9628636 9.531622999999966 45.142377599999996 9.8543459999999659tag:blogger.com,1999:blog-4261051967240266070.post-15356506005903558252016-10-19T09:54:00.000+02:002017-10-19T09:55:09.206+02:00FireMonkey o VCL, questo è il dilemma!<div>
<blockquote class="tr_bq" style="text-align: justify;">
<a href="https://www.blogger.com/blogger.g?blogID=4261051967240266070" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARQAAAEUCAYAAADqcMl5AAAhXUlEQVR4nO2dCZRU1bWGd81Ng00zD4LMKNo0IAICjYmSGJfgE6csp7gUSGLikxgTIlHRF4lzyEpwaUgENRHBpyKo4HMIKqgYxBEQxYg0TijI1EiP1dVv765LbLSBurfOuecO/7fWzi1J3XN3V5391xn3iZ/5i6sIAABUEDftAAAgOEBQAADKgKAAAJQBQQEAKAOCAgBQBgQFAKAMCAoAQBkQFACAMiAoAABlQFBCwqxlS9vwpRdbT7bObO3YOlrXfdaWLcrWxrqtgC35jaJq2aqt1zvZMmw72LY3sa3W9XO2crZNU8aO26n+rwJeA4ISIFg0RABK2AayldLXAiLXIkWPSdLXIrOvzF45+FbBl01kCQzbWrY1bOtZbCoV+QYMA0HxKRygh/FlFNtwyorHILY+lG1heBERn0GWNSXDf8tGygrMW2yvsq1kkdnjrntABRAUn8BB14OyAnKCdZWWiFfFww7yN/Sz7Ezr30Rk1vF1JdsKygrMZkP+ARtAUDwKB1QhX05iO4XtVMqhWxEgRGRKLbtU/oE/D+kmPcn2NNtzLDB7zbkHDgQExUNw0EiX5XTKCsgY+vaAaJgRQb3Mslr+rF6krMA8xuKy0ahn4D9AUAxjdWXOY/sh2xDD7vgFEdqxls3kz/BNvj7E9jDExSwQFANwAHThy/ls57CNMOxOEBhi2c382a7i68Ns81lctph1K3xAUFyCK7qMC0hXZjLbeLaYWY8CywjLbuXPfClf57AtZXHJmHUrHEBQNGN1aSZa1s2wO2FCBPu/LPuUv4d7+ToHs0V6gaBogiuwTO3+iu0Mtohhd8LO4WzXsl3D38tjfL2dhWWlYZ8CCQRFIVa3RgREhGSkYXfAtxFhnyBmjbXczrYI3SF1QFAUwJUzwZdJbFPZeht2B+SGjLM8wraJv78/8PVuFpY6wz75HghKHnBFlM9PhOQatu6G3QHOkPUtd7JN4+/zJr7OhbA4B4LiAEtILmSbTmiRBAX5QfgL21T+fmfwdR4LS9qwT74DgmITrmyy30R+yY407QvQgvxAyIzQdP6up7KoPGraIT8BQckRrlySEuDPbCea9gW4ggjLQv7el/P1Fywsb5t2yA9AUA4BV6gOfPk9ZRekBWF3L7DHd9je4HogC+SuZWHZZtohLwNBOQDWFPDlbDeQuuREwJ9IXfgJ27lcL67j6x2Yam4eCEozWN2buWzDTPsCPIX8sPyJ7UdcRy5hUVlr2B/PAUFpgpVCUaaApxE+G3BghlK2GyQL425gYak+1A1hAUFjwZWjjLIbyTB7A3JBYue3bGdz3ZnIovKSaYe8QOgFxVrlKusOZJUrBl2BXSR15QquR7fxdXrYF8WFWlC4EvTny3zKNmEBcIrsEbqK7WSuU+exqGww7ZApQiso/MXLNLCsKyk07QsIDJLkScZWrmRR+atpZ0wQOkGxjp/4B2V3nQKgGvmBms31TJKLTwzbAWehEhT+ko/my2LK9nsB0MkEtmO4zp0Vpunl0AgKf7GSBFr2aKCLA9xCfrj+Jd1rFpUFpp1xg8ALirUz+BbKJj0CwG3kB2w+10M54XFq0HcwB1pQrAPCFxI29AHzXME2hOvkGUEeVwmsoPAXJ83NJwgL1YB3kI2Gq7hujmdRed+0MzoIpKBYCaJFTNqa9gWAbyA/dCIqpwVxdW3gBMVKgPQAW4FpXwA4AMVsz3JdvZBFZaFpZ1QSKEHhL+infLmLsIQeeB/5wXuI6+zlLCp3mXZGFYERFP5iZIfwzab9AMAG8sN3J9fdYhaVm0w7o4JACAp/ITItfJVpPwBwyI1ch4tYVKaZdiRffC0o/CXIpizJSYE1JsDvXMX1OcVX2QfUYNoZp/hWUCwxkb7npaZ9AUARV7AVcN3+uV9FxbeCQtmWCcQEBA2p05IB7pemHXGCLwXFGjNBNwcElSu4jtf4cUzFd4JizeZgABYEHRlTqfDb7I+vBMVaZ4KpYRAWZPZnl5/WqfhGUKwVsL75YAFQxB1c97/wy4paXwiKtTdHltNjBSwIG1Ln51mi4vm9P54XlCa7hrE3B4QVqftPcCyM8PouZU8LipXPZClh1zAAxWxLLFHxbD4VzwqKlWlN+o3I/wpAFomFhRwbJ3s185tnBYWyaRuRaQ2A/ZGYkEWdnlz45klBsRJKY+EaAM0jC99e9WLia88JinXUxb2m/QDA48zhWFnntSM6PCUo1iFciwlHXQBwKCRGFnptkNZTgkLZE/0wCAtAbkis3MN2hmlH9uEZQbHOGp5g2g8AfMYE2ZLilbOUPSEo/IH0p+zB5QAA+/yRY+gFFpUNph0xLij8QST4Mp8wbgKAUyR2FljjKXUmHTEuKMwMtqGmnQDA5wyhbCwZzaFiVFBYUcv4MtWkDwAEiN9wTC0xuYnQmKDwHy4bnuYQdhADoArJs3wPx1Ypi0q1CQdMtlCuIZw7DIBqZCr5OrarTTzciKCwgg4kw309AALMVI6xBSZW0bouKPyHShdnrolnAxASJLbu5VgbzqKScfvBbnM52zADzwUgTMjMqcSaq+u7XBUUVswOfLnBzWcCEGJu4Jibz62UbW490O0Wyu/Zilx+Zqhpeel4ajl2gmk3Ak3FfbOoeuka0240h8SaxNxP3Xqga4JiDcROdut5IEu8fUdKHDXCtBvBpsjTv5GTOfbu4lbK2248zM0WivTlsOYEAHeRmJPY+64bD3NFUKwzdZDOEQAzfEdikFspj+p+kHZBsZJN++o4RQACyC0ci4/rTm7tRgvlQsKKWABMIytoJRbv0/kQrYJitU6m63wGACBnpnNMPqAzxYHuFsoktt6anwEAyA2JRYnJ2boeoE1QrMRJ1+gqHwDgiKs5NufqaqXobKGIEnbXWD4AwD4Skz9mu0tH4VoExdoAiMRJAHiTX3OMztaxcVBXC0XS+mPsBABv0ouyMbpQdcG6BAXHiALgbaQH4X1B4abUKL6MVF0uAEApIyRWuduzUmWhOlooaJ0A4A+klaL01EGlgsKK14M8dCwiAOCgnC4xy62UzaoKVN1CmUjZzNsAAO8jsSopRZStZlcmKNZU8URV5QEAXOFijt3rVU0hq2yhnMrWTWF5AAD9SMyOY3tCRWEqBQXZ2ADwJ7Kq3TuCwk2mLnwZr6IsAIDrjJcY5m7PlnwLUtVCOZ8tpqgsAIC7SOxKDM/MtyBVgnKOonIAAGaQGDYvKNbaE6RVB8DfyMrZntztKc+nEBUtlPMUlAEAMM+5bLfkU4AKQfmhgjKALhJJ0x4A/yCxbE5QuInUhy9D8ikD6CParQUl+hxj2g3gH4ZITHO3Z6PTAvJtoZye5/1AI8myYykSxdlqwBYS0390enO+gnJqnvcDTcRLO1Cic1fTbgD/ITHtvqBw06iQL2Oc3g80koxQcvixpr0A/mSMxDZ3eyqd3JxPC+UkNoz4eZDEyN4Ua+XpA7yBd5GYlthe4uTmfATllDzuBZqItIlTqqTEtBvA30hsuy4oGD/xIKkxAymCqWKQH45j25GgcB/rCMpmzgYeItqjJcV69THtBvA/vZxmcnPaQhnt8D6gkeSoIRSNIGEeUIIkm3dNUMoc3gc0ER/ciRKduph2AwSHE9gW2L0JghIEZJr4uMGmvQDBYpSTm2wLCvetDuMLphE8BKaJgQZKJNanjB23x85NTlooolxYz+0Rom0TmCYGOpAYl1h/2s5NTgRluIN7gCaSZSWYJga6kFjXLiilDu4BGoj2PIwSvfuadgMEF9ux7kRQBjm4B6gmQlQwGpkjgFZsx7otQZm1bGkBX7ByygPEh3SmWIdOpt0AwaaPxPyUseOqc73BbgtFRv8wIGuaZIRSQ9E6AdqRWJeYfy3XG+wKykCb7wcaSI7uS9GWrdx9aLqG6rd+RPXbt1BDxQ7K1NZSw96Kxv8r0rKIoqkWFCluS7H23SjWsYe7vgGdSMxrExQMyBom2i5ByWM0p3WsqaKa91ZR3brVVL1hPdVv3Ezp974kqm3I6fZIyyjFBnSmeN9elBowkFIlwynRdyg7j8atD7EV83YFBRsCDZMYU0qReEJ5uQ2Vu6j65SW0d8U/qW7FGsrsqHNe1t4MpV/7rNGq6WX+l9mNGxcLyoZS4QmncHfte0TcogG+wFbM2xWUnjbfDxQS7V1EyZ69lZZZu/5l2vv4fKp64mXuytQrLbspmc17qXLzCqp8YAVFu82gFuPHUsvTLqLEEQO0PRMooaedN6OF4hdkmrhMXVrHmpVP0O75c6luueME547JfFJFe2dza2jOEkqddhy1vmgKd4kwyOxR9LRQZi1b2oYv2DBiiPixXSjWtkPe5UiLZPfsmVT7/L8VeJUnaRa2Ra/R1sUXUeqsEdTmx1dRrGs/016B/SmS2J8ydtzOXN5sp4WC1okpCqKUGppf6ySzeyvt/tsMqrz/BaLcxlbdg/2peWQVffHMOdTqJz+konN/iTEWbyGxr1xQejpyBeRNsqwfRQsLHd8v3ZsdN93YOI7hZWQMZ88fFlDV8y9Q22tvRTfIO/RkeyOXN9oRlM6OXAF5Ee2YpMQAh9PE9fVU8eg/Gn/9/UT69S207cKLqfVVl1LLM35m2h1gI/btCEo7B46APEmMLqVoLGb7voaaaqp8dgVlPtitwSv9yNTzruvuotr336E2V9yOLpBZco59O4LS0YEjIA+ifVtTsof9oav6ryqo+okXKPNFjXqnXKZy3nJKf/4javc/d1G0NaqgIXL+4NFC8SoyTTzK/hhCpmIXVS16nhp2pjU4ZYbaf26gbV9dTO1vvpti7Q837U4Y0dJCaevAEeCQ+NCutqeJRUwqH3lO6wI1U6T/9TF9OXUidfjT/WipuE/OsW9HUNo7cAQ4oTBKqWPttU4ye7+iqsUvBFJM9iFL+bdNm0QdZ95PkcJi0+6EiZxjHy0UD5IoO9LWNHFDXS1V/d8Lee2/8Qvpl8pp+81XUPvf3YPNhu6hpYWCb88Fop1SlDzS3v6W6hdXNi5nDws1i1+nip6/p6JJ15l2JSzkHPt2BKW1A0eATZJlg2xNE9e++w6l12zT6JE32XPHw5QqHUGpYT8w7UoYyDn20ULxELF+xZTonntyovpd26lm2XqNHnmYeqIdN/yOOs0bgkFa/WhpoRQ4cATkCjdKUqNt7Nepr6fq51c1brALK5nyPbTzzuup3dV/Me1K0Mk59u0ICg5/0Uh8WHeKFee+1Kf2/fc8vzfHDaoXvEQ1338aXR+95Bz7Ts82BgqRlImpwbmfWJCprqKaF9/T6JG/2HXnTOo057tcm1OmXQk9EBQPEJdp4oLc96rUrFlLVJnR6JG/kM2ElU/dT4XjJ5t2JfRAUAwT7VJAyf65TxPLArb0q5s1euRPKv7OgvL9C7CJ0DB2BKWWMI6inMRoe9PENe++G+qB2ANR/94OqlqxkFp8/0LTrgSR2lzfaEdQ5PQwCIpCYke1pWS3I3J+f0O6jtJvfKTRI39T8ciDEBQ9aDs5EKiCGyXJUUNt3ZL+aDPGTg5CeuVmqnt/NSX6DzPtSmixIyiSUxJJqhUh08TxomJb99Su/1CPMwFi71MPUzEERTU55ZMV7AgKfhoVESmKUcGQwbbuyVRW+jb7mptULXuZiv87g42Dask59u0Iyg5C5nslxEf2p0jK3sLj+k8/1uRNsMh8WEG1771CyaNHm3YlSOzI9Y12BGW7A0fAN4h2a2Frmngf6Y+3aPAmmFSvXg5BUUvOsQ9BcZnUKHvTxPuoL8/5RyL0VK99C4N9aoGgeJH40e0o3rW77fsktWOQM7Gppn71B9ykq8FSfHVoEZStDhwB++BPOnG8s9P/6neidWIHyVxX99mHOIhdHTnHPlooLhE/vqftaeJ91O/YpdSXMJDeuBaCog4tLZTPHTgCyJomHjjQ8f0Nu79S6E04qP8M+50UknPs2xGUcvt+ACFZNsD2NHFTMrsqFXoTDmq3YlZMIeW5vtGOoGyy7weQaeJ4n/75FVKV894sYNGwG4sAFZJz7OcsKFPGjts5a9nSCsLye1sky451NE3clIavgn88hmrq9+wx7UJQ+EpiP9c3290cKEqVe2qxkBMvaU+Jzl3zLqcBM8a2idQhx4MiNtp5s11BKScISm7INPFw+2cTN0s1tlEBY5TbebOTFgrIgXymib9FQRSiAkxhK+btCspam+8PJZE2cSoYpK4hF4lxt0dZaeGgIYFUP4qwFfN2P/U1Nt8fSlKjjqZIQl1yu0irBDXsrVFWXhiIHXaYaReCgq2YtysockydtL2RbOIAyDRxrG+e08TfpIWIEwTFDpHWODlXARLrto6mtCUoU8aOq5y1bKmM+vazc1+YSI4ZStFIRGmZ0eJC/mYxDWqHZMcupl0IAhsl5u3c4KSj+TZBUJolXtqBEp3UV+RI61b8v18oLzfI7Jn3MH218HFXnpX5MrBbI2yPmToRFOlTne3gvmCTjFByuLPdxIci1raYsLTNHplPqvh/q0y74XfesnuDE0F51cE9gScxsjfFWulZRBxr01ZLuQAcAtux7kRQVhIGZvdDpolTJSXayo8WFTeef9ywF2tRgGtIZVtp9ybbgjJl7Lg9s5YtXccvS+3eG1RSYwYqnSZujlivtpRe96XWZwDQhHUS63Zvcrr6R5QLgsJEe7TkYO+j/TnxHl0hKMBNbLdOBKeCsoLtUof3BocIUUGZ+mni5ogdLrlosa4QuMYKJzfl00IJPfFBnSjWoZMrz4oWFlK0b2sc9gXcwr0WCvetNs9atlQ2DYX34C+ZJj5usLuPPLo3VX/wpqvPBKFkk8S4kxvz2UH1JNtledzva3ROEx+IePcjuI/1NnYeA9086fTGfATlKQqpoETbJSiVR9Jpp8hMUvy4Iyj9Urnrzwah4mmnN+YjKM+xSbJTvfOlHiQ5uoQi8YSRZ6cGDKD0K+VEyOIG9CAx/ZzTmx0LirVR8EV+OdZpGX4k2vMwSvTua+75LVtRfFh3Sv8Lh6cDLbzIsb3X6c35ZqGRvlZ4BEWmiUcrSuuYB6nSUkq/9SnGUoAOHI+fCPkKymNsM/MswzfEh3R2bZr4YMgUcmpMf6p59j3TroDg8Vg+N+clKNw02sjdHpnHNP+zrZtkhFJDvfNnJo86mure3WztqgVACW9KTOdTgIrEmw9RCAQlObpv4/iFZ4jFqOB7I6ny/ucwQAtU8VC+BagQlAfZblZQjmeJdkxS8phjTLvxLWLF7Sh10lHo+gBVPJxvAXkLCjeRyrnbs4pfjsi3LK+SGF1qbJr4UCSPGUj1n26j9Prtpl0B/mZVvt0dQdVZA6JsgRSUaO8iSvbw9g6DghPLqHLn05TZUm3aFeBf8m6dCKoEZT7brWz5HeLrNRp3E+tJ66gSWUHbYvyJVPnIs9SwE0dwAtvIKNx8FQUpERRuKm3hbs8Sfnm6ivK8QnxoV4q17WDajZyQAePCM0RUnqOGCozSAlsslRhWUZDK49XmUJAEpSBKqWP9NXklqSILzz4pmKIiKWdwfKIu5qgqSKWgyAq7T9i6KSzTGMmyfo0LyPzGPlGpWrKcMltrTbujBMkDE+3cBpsi9SAxu1RVYcoEhZtMGe723MMvr1NVpilkmjgxwHvTxLkiotLizJOp6pkVlPmwwrQ7eREf2oVajBpJDZl62vvOJxgjUs99EruqClN9orQIynTKNlB9i0wTR2P+Hl+OFrSgluO+R1WrV/tzIyHXzNTJJZTsP6DxPyP8fUgy8OrHkWBKIdKJVNbdEZQKipXJbRG/PFNluW4izWuvTxPnDAdhi+OPp/QRh1P1U6t9M64i50PLKmBZuNcUSQYe7fE+ZTY73gwL9ucxp5nZDoTqFoogmwX9KSgyTTzKXwOxuRDv2p1aXtCBqle/TunXPjPtzoGJy9nQ/ShVMrBRDL+JJANP8vdTvfklA84FkttVF6hcUFjxVnIr5RV+OVJ12brx0zSxXSKpAmpRNprqj95G1Step0y5tw5fl3OhUyOOO+R+KTk7Oj24E6XfwlnPeSIrY5Unm9fRQhGklfKIprL1UBil1HHeX8SWLyKYLSecQunPPqaaV98xLiwiJMljB36re3MwJDl4ev0zRLWYR84D5a0TQZegyDjKh2y9NZWvnETZkY0DmWFBukHxCd2p/sutVLt+A6XXfE7k0gRKpChGsZJulDqqf+OMlF0kObgkCa9bnvfWk7AiJ1Ys0lGwFkGxppBFAf+io3zVRDulKHnkANNuGCHWviO1OKEjNYyspfTHH1H6A7Edyn/9G0WkX0dK9OlB8U5dmx0jsYOcJV2/9iPK7KhT5GGo+IPKqeKm6GqhCHPZrmbrrvEZSkiWDfL9NHG+yH4gyZXbmC93bD3Vccsls20bZT7fTpmtFfYWyfFHGe3SgqLtiyjWtQOLVnvlY1Pib7KsBNPI9pE1BHfrKlyboLAC1nEr5UZ+OVvXM1QQ61dMie49TLvhLVhcZfCTxEqsf6uvp/qqvURVVZSpriaq279lEClIUSTJ1qLQtURUIn61PT8wPg7kM26S2NRVuM4WiiCtlN+QV8dS+Jc0NTr4A7FKYJFpPNiMzUttOUkaXrl5Bfb55IaMa87V+QCtgsJKmOZWygx+ea/O5zhFjqOwM7sAvIckDZfk4ek3Pjftih+YobN1IuhuoQjz2KaxHenCs3Im0jJKqcGDTLsBFCDJw9PrnsI08sH5N2VjUSvaBcVqpcjg7ELdz7JDPGTTxEFGxmwkiXjt8/827YqXmSaxqPshbrRQRFQeZVF5nl+e6MbzDkW0S8F/Np2BYCBJxNNryimzHdPIzbBcYtCNB7kiKBa/YHuLLeriM5slMRrTxEFDkognxpRSzeLXTbviNWS9yeVuPcw1QWGFXMutlL/xy0vdemZzyNiJTIHWbt5k0g2gg0ikMdMejmjdjzkSe249zM0WiiDJl85nK3L5uf+hYW+Gaha9ZurxALiJZNe61s0HuioorJTbuJUif+AsN58LQEi5TmLOzQe63UIR7mT7EdswA88GICysZrvD7Ye6LijWxsFJ/PINE88HIATI9PAkXRsAD4aRgLYGaG8hl/t3AISEW9wciG2KyRaCbBw8hzy2ghYAn7OBsrFlBGOCwgpaza2UyfxyOXlgbQoAAUD2HkyW2DLlgNExDP7DX2JRkTORf2vSDwACwm0SUyYd8MKg6PVsJ7MNNe0IAD5GlghPN+2EcUGxEjHJYjdJveW/sz8BME8l2wW6UxPkgnFBEfiDeJ9FRfb6aEtNB0CAuZJjaINpJwRPCIrAH8gcFpUf8MuzTfsCgI9YzLHzV9NO7MMzgmIxkU2yHvUz7QgAPkASwFxs2ommeEpQWGn3cCtlAmWXDWM8BYADI+MmZ3HM7DbtSFM8JSgCf0DrWVQu4Zf/a9oXADzMJaZWwx4MzwmKwB/UQywqw/nlr0z7AoAHmSkxYtqJ5vCkoFjI8RuD2cYa9gMALyGpVKeZduJAeFZQrF3JstfnFcJ+HwAEGYQ9y41k007xrKAI/MHtZFEZxy9fZWtr2h8ADLKDbZzEhGlHDoanBUXgD3Aji8pp/HIZW4FpfwAwgGz2O41jwfPnhHheUAT+IFeyqJxH2bN9sDMZhAlJkiTL6leadiQXfCEoAn+gi1lUfk4eP3wdAMVc5taZOirwjaAIssSYRaU1v7zVtC8AuMA1XOd99QPqK0ER+AO+jUVFBmivMu0LABq5lev6TaadsIvvBEXgD3oai4q8hKiAICIL1zy71uRg+FJQBEtUpPtj9CRCABQjXZyppp1wim8FRWBR+RmLimyOQksFBIGZbFO5XjeYdsQpvhYUAd0fEBBu9Ws3pym+FxTBEhVZSYjZH+BHrvHjAGxzBEJQBGv2R0RFsldh8RvwA7Jo7TK/TQ0fjMAIimClkfySXy4gLNMH3kaW01/gp0VruRAoQRGsFbWS8uAJwoZC4E2kJX2aX5bT2yFwgiJYe38kQZOM1iL1AfASssFvnB82+jkhkIIiWLuUR/LLhwlJmoA3kORIZ3k9BUE+BFZQBCufipxKeBshnSQwi6wxmebl5EgqCLSgCJL5jS+/ZmGRzG/3sbUy6xEIGZKd/hKv5oBVTeAFZR/8hS5kUXmXX8qoOsZVgBvIOMkEOcnBtCNuERpBEawjOobxy3sIJxQCvSxmu0jOmjLtiJuESlAE6ws+h4VlMl//TDhQDKhFujhXeul4UDcJnaDsw1oEt5xfPsA2zLQ/IBC8znY+1633TTtiitAKiiBrAVhURvPL31F2cyGW7AMnyO5gmUmcznWqzrQzJgm1oAhWBbiaheVJvs4hDNgCe2xgm8z16CXTjniB0AvKPqRCsKgM5pfXUPZkNnw24GDIepJb2G7kulNt2hmvgKBpglUxprOwyJqBu9lGGHYJeJPVbJO8eFi5aSAozSAVhUVlFL+8jO0GtmKzHgGPUMF2Hdsd1oJJ8A0gKAfAqjB3sLA8SFlR+TFbzKxXwBBSF2R87VquF9tMO+NlICiHwKpAkrv2LsquWznRsEvAXWRpweXo3uQGBCVHrAp1EgvLBMoOxmE2KNjIsvlpQUuApBsIik2sBE6P88uL2Kaz9TbsElDLh2wz2OYFfWewDiAoDrDGV+5jYZnH14spO1DX3ahTIF8+ZpNE0XMgJM6BoOSBVfFkCf/f+TqJ7Uq2fma9AjaRFsntbHPDvspVBRAUBVgVcTYLy9/4OoHt12wjjToFDoXkx5GkR4swBawOCIpCrIopg3iPWutYJEvcGWwRo46Bfciem0WUPTs4cAmivQAERRNWhZVk2UdQtjs0ka2bWa9CyyeUzdYn4yObDfsSaCAomuEK/BFfrmdhkR3Np7JJHpZxhM9eN/VsSyi7IO1JdGvcAZXaJawKLRV8CYtLZ75ewHYOYb+QalZR9qSD+fyZbzHtTNiAoBiAK/rnlB0QnGl1ic61bIhRx/zLm2yyofNB/mzLDfsSaiAohrG6RJKcR85m7sPX09l+wPZdtqRB17xMLduLbJLD5jE5g8mwP8ACguIhrMD4oxiLi+S6PYntFMqOvfQy6ZsH2ERZAXmK7Tn+rCoN+wOaAYLiUayAWWIZWV0jSVdZZl0HUnBTVsp40zo2mSlbIVfMzvgDCIpPsLpGYgvkv1lgDqPs4jkZ1C1lG8QmXSa/iYyIh7TM3mZbw/YqZQUkVMdPBAUIik+xAu4ZyxphkSngSwllWy8iMtJN6mldi9z3cj8kOZF0W8qtq4iH7OBehxSKwQGCEiCswHzNsv1gsWlDXwuMTFu3Y+toXduytbeu0sJpbV1FoL45MCwDovIcaVnstq472LY3sa3WVWazytk2BfmAcPA1EJSQYAW02BumfQHBBYICAFAGBAUAoAwICgBAGRAUAIAyICgAAGVAUAAAyoCgAACUAUEBACgDggIAUMb/Azv/m7793pNvAAAAAElFTkSuQmCC" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>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 <a href="https://community.embarcadero.com/blogs/blogger/listings/jimmckeeth" target="_blank"><span style="color: #990000;"><b>Jim McKeeth</b></span></a>, Lead Developer Evangelist, su un tema molto discusso: <a href="https://community.embarcadero.com/blogs/entry/firemonkey-vs-vcl" target="_blank"><b><span style="color: #990000;">FireMonkey o VCL</span></b></a>?</blockquote>
</div>
<div>
<br /></div>
<h2>
FireMonkey vs VCL.</h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0k08NB7Y2luhb4xiBdT48awg-TaI42paSlbocVZDVmx-ERt2RJ1c9EeYBTrH2zE-6n3CmniTIN_CbBBiOdXzu2qSBmMKi7SVch_-B8YOKLOSApeGk6-nFjL_yJpAmLJMJC05PdNteWZQ-/s1600/VCLVSFiremonkey.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0k08NB7Y2luhb4xiBdT48awg-TaI42paSlbocVZDVmx-ERt2RJ1c9EeYBTrH2zE-6n3CmniTIN_CbBBiOdXzu2qSBmMKi7SVch_-B8YOKLOSApeGk6-nFjL_yJpAmLJMJC05PdNteWZQ-/s320/VCLVSFiremonkey.png" width="320" /></a></div>
<div style="text-align: justify;">
Di frequente, quando parlo di VCL o FireMonkey, ricevo alcune tra le domande più comuni:</div>
<div>
<ul><a href="https://www.blogger.com/blogger.g?blogID=4261051967240266070" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="data:image/png;base64,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" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>
<li style="text-align: justify;">La VCL è obsoleta?</li>
<li style="text-align: justify;">È migliore FMX o VCL?</li>
<li style="text-align: justify;">Se iniziassi a pensare ad un app oggi, dovrei usare VCL o FMX?</li>
</ul>
</div>
<div style="text-align: justify;">
Alla prima domanda è facile dare una risposta, le altre due sono un po’ più difficili. </div>
<div style="text-align: justify;">
<br /></div>
<div>
<div style="text-align: justify;">
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”.</div>
</div>
<div style="text-align: justify;">
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).</div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Visual Component Library (VCL)</h3>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwC15FFsPdvFShywoONw-pZKwdK1m2LF_FEOXJ0XKoaDXKjrfwzqOzCAlS6RWKpzffhJLtfwa9d5cOngIO7OA2WuJYQPp0nYkBssUEDq8cLQCJcq35I2uXUF2lRE1f_lT_AWld0yx_1tl2/s1600/VCL.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwC15FFsPdvFShywoONw-pZKwdK1m2LF_FEOXJ0XKoaDXKjrfwzqOzCAlS6RWKpzffhJLtfwa9d5cOngIO7OA2WuJYQPp0nYkBssUEDq8cLQCJcq35I2uXUF2lRE1f_lT_AWld0yx_1tl2/s200/VCL.png" width="200" /></a></div>
<div style="text-align: justify;">
La VCL è stata rilasciata con la prima versione di Delphi. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
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à.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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).</div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
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.</div>
<h3>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
FireMonkey Cross Platform Framework (FMX)</div>
</h3>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuz4WQNh9MwEy6EMga2JKc2eY8vsLZIHK9TJpwgjoFAiBSERUROZIztZnGZESmPC5h2WHFkG2DIvVBE9hxs6RmZpGkOX3dTW9s2ckAqF79Xtb5D8suATunsHYbBDUeuU5YxGZohu5JHpQf/s1600/firemonkey.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuz4WQNh9MwEy6EMga2JKc2eY8vsLZIHK9TJpwgjoFAiBSERUROZIztZnGZESmPC5h2WHFkG2DIvVBE9hxs6RmZpGkOX3dTW9s2ckAqF79Xtb5D8suATunsHYbBDUeuU5YxGZohu5JHpQf/s200/firemonkey.png" width="200" /></a>Dato che FireMonkey è un framework più nuovo, tendi a vederlo più sicuro.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
FireMonkey è basato sugli ultimi framework GPU: DirectX per Windows e OpenGL per gli altri.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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”.</div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
Conclusione</h3>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In breve, VCL è incredibile è continua ad avere correzioni e nuovi elementi. È il miglior framework interfaccia utente che esista, eccetto forse FireMonkey. </div>
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Entrambi i framework resisteranno a lungo. Se li userai entrambi potrai capire quale utilizzare in ogni circostanza.</div>
Anonymoushttp://www.blogger.com/profile/02439297087366934663noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-57172807909861212272016-07-15T16:39:00.000+02:002016-07-15T16:39:35.538+02:00MongoDB & Delphi<div>
In questo articolo vedremo come utilizzare MongoDB con Delphi.</div>
<div>
<br /></div>
<div>
Questa non vuole essere una guida dettagliata a MongoDB, potete trovare ovunque una marea di informazioni, partendo ad esempio dal sito ufficiale: <a href="https://docs.mongodb.com/" target="_blank">https://docs.mongodb.com/</a></div>
<div>
<br /></div>
<div>
<b><br /></b></div>
<div>
<b>Cos'è MongoDB</b></div>
<div>
<b><br /></b></div>
<div>
è un database <a href="https://it.wikipedia.org/wiki/NoSQL" target="_blank">nosql</a>, orientato al <a href="https://it.wikipedia.org/wiki/Base_di_dati_orientata_al_documento" target="_blank">documento</a>, per fare un paragone con un database relazionale:</div>
<div>
<br /></div>
<table style="-evernote-table: true; border-collapse: collapse; margin-left: 0px; table-layout: fixed; width: 100%;"><tbody>
<tr><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div style="text-align: center;">
RELAZIONALE (Oracle, Firebird, ...)</div>
</td><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 49.927219796215425%;"><div style="text-align: center;">
MongoDB</div>
</td></tr>
<tr><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div>
TABELLA</div>
</td><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div>
Collection</div>
</td></tr>
<tr><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div>
RECORD</div>
</td><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div>
Document</div>
</td></tr>
<tr><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div>
COLONNA</div>
</td><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div>
Field</div>
</td></tr>
<tr><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div>
SELECT * FROM ANAGRAFICA</div>
</td><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div>
db.anagrafica.find()</div>
</td></tr>
<tr><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div>
INSERT INTO ANAGRAFICA</div>
</td><td style="border-color: rgb(211,211,211); border-style: solid; border-width: 1px; margin: 0px; padding: 10px; width: 50%;"><div>
db.anagrafica.insert({}}</div>
</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
<br /></div>
<div>
I punti di forza di MongoDB e i motivi principali per cui utilizzarlo sono:</div>
<div>
<br /></div>
<ul>
<li>Scalabilità</li>
<li>Performance</li>
<li>Alta affidabilità, grazie ai replica set</li>
<li>Flessibilità, non esiste il concetto di schema di una tabella, ogni documento di una collection può essere diverso dall'altro</li>
</ul>
<div>
<br /></div>
<div>
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.</div>
<div>
<br /></div>
<div>
MongoDB utilizza il formato <a href="https://it.wikipedia.org/wiki/JavaScript_Object_Notation">JSON</a> per la visualizzazione dei dati e il linguaggio JavaScript, è quindi vivamente consigliato conoscere entrambi.</div>
<div>
<br /></div>
<div>
Esempio di documento in JSON:</div>
<div>
<br /></div>
<div style="-en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.14902); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;">
<div>
{</div>
<div>
"nome": "Luca",</div>
<div>
"indirizzo": "Via del Popolo 20",</div>
<div>
"figli": [</div>
<div>
{ "nome": "Annamaria", "eta": 3 },</div>
<div>
{ "nome": "Luigi", "eta": 2 }</div>
<div>
]</div>
<div>
}</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b>Installazione</b></div>
<div>
(Windows)</div>
<div>
<br /></div>
<div>
<a href="https://www.mongodb.com/download-center#community">https://www.mongodb.com/download-center#community</a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
dal prompt del dos, eseguire:</div>
<div>
<br /></div>
<div style="-en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.14902); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;">
<div>
mongod</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
per poter accedere alla console interattiva, da cui è possibile fare operazioni CRUD, aprire un altro prompt del dos e digitare:</div>
<div>
<br /></div>
<div style="-en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.14902); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;">
<div>
mongo</div>
<div>
<br /></div>
<div>
use anagrafica</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div style="-en-codeblock: true; background-color: #fbfaf8; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.14902); box-sizing: border-box; color: #333333; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 12px; padding: 8px;">
<div>
// Create:</div>
<div>
db.anagrafica.insert({</div>
<div>
"nome": "Mario",</div>
<div>
"indirizzo": "Via Veneto 10",</div>
<div>
"hobby": "Calcio"</div>
<div>
})</div>
<div>
<br /></div>
<div>
// Read:</div>
<div>
db.anagrafica.find()</div>
<div>
<br /></div>
<div>
// Per visualizzare meglio il risultato:</div>
<div>
db.anagrafica.find().pretty()</div>
<div>
<br /></div>
<div>
// Update:</div>
<div>
db.anagrafica.update({}, {</div>
<div>
$set: {"nome": "Luigi"}</div>
<div>
})</div>
<div>
<br /></div>
<div>
// Delete: (all)</div>
<div>
db.anagrafica.drop()</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Alcune considerazioni:</div>
<ul>
<li>Il comando use <nome-database> permette di passare al db in questione o a crearne uno nuovo se non esiste</li>
<li>Ogni comando CRUD inizia con "db."</li>
<li>Il comando insert su una collection che ancora non esiste (ad esempio db.anagrafica.insert({})) crea prima automaticamente la collection</li>
<li>Le operazioni di default che compongono i comandi iniziano con il simbolo di $</li>
<li>Il comando update, esegue l' update del primo record trovato</li>
</ul>
<div>
<br /></div>
<div>
<b><br /></b></div>
<div>
<b>Delphi</b></div>
<div>
<b><br /></b></div>
<div>
Per l'utilizzo con Delphi esistono diverse soluzioni:</div>
<div>
<a href="https://docs.mongodb.com/ecosystem/drivers/community-supported-drivers/">https://docs.mongodb.com/ecosystem/drivers/community-supported-drivers/</a></div>
<div>
<br /></div>
<div>
In questo articolo utilizzerò i componenti FireDAC con Delphi 10.1 Berlin.</div>
<div>
<br /></div>
<div>
Ho creato un semplice progetto demo CRUD:<br />
<br /></div>
<div>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih_oJ1oF2_h-jnAc895kP78LoqYBGI-Mso6XPQiuO-sERRRLXEMVi7KlvblLl0NsO2hnO81XOqvnDB7Y94D_I3gW9kvw9nQFrPp1aMCt32sZyuKJbf-hdXatBD8M46CgkB8bRB0CVp7OoF/s1600/Untitled.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih_oJ1oF2_h-jnAc895kP78LoqYBGI-Mso6XPQiuO-sERRRLXEMVi7KlvblLl0NsO2hnO81XOqvnDB7Y94D_I3gW9kvw9nQFrPp1aMCt32sZyuKJbf-hdXatBD8M46CgkB8bRB0CVp7OoF/s320/Untitled.png" width="297" /></a></div>
<div>
</div>
<div>
<br /></div>
<div>
<img src="file:///C:/Users/daldosso/AppData/Local/Temp/enhtmlclip/Image.png" /></div>
<div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
In particolare per la lettura dei dati utilizzo il componente visuale:<br />
FDMongoQuery<br />
utilizzandolo come un DataSet standard:<br />
<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px;">
</div>
<br />
<div style="background-color: #fbfaf8; border-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.14902); box-sizing: border-box; orphans: auto; padding: 8px; text-align: start; text-indent: 0px; widows: 1;">
<div>
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;">while not FDMongoQuery.Eof do</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;">begin</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;"> LogMessage('Record: ' + FDMongoQuery.FieldByName('name').AsString);</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;"> FDMongoQuery.Next;</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;">end;</span></span></div>
</div>
<br />
<br />
Per l'inserimento dei dati utilizzo questi oggetti (non visuali):<br />
TMongoConnection, TMongoDocument, TMongoEnv<br />
<br />
che utilizzano un approccio fluent per la creazione del documento MongoDB:<br />
<br />
<div style="background-color: #fbfaf8; border-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.14902); box-sizing: border-box; padding: 8px;">
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;"> MongoDoc := MongoEnv.NewDoc;</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;"> try</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;"> MongoDoc</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;"> .Add('name', 'Name ' + IntToStr(i) + ' - Record ' + IntToStr(i))</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace; font-size: 12px;"> .Add('age', IntToStr(i));</span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;"> MongConn[DB_NAME][COLLECTION_NAME].Insert(MongoDoc);</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;"> finally</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;"> MongoDoc.Free;</span></span><br />
<span style="color: #333333; font-family: "monaco" , "menlo" , "consolas" , "courier new" , monospace;"><span style="font-size: 12px;"> end;</span></span><br />
<div>
<br /></div>
</div>
<br />
Per ulteriori approfondimenti vi consiglio di vedere questo video:<br />
<a href="https://www.youtube.com/watch?v=_YxKUFSyV7U">https://www.youtube.com/watch?v=_YxKUFSyV7U</a><br />
<br />
Il codice sorgente si trova qui:</div>
<div>
<a href="https://github.com/daldosso/MongoDelphiDemo">https://github.com/daldosso/MongoDelphiDemo</a></div>
<div>
<br /></div>
<div>
In particolare il file principale è questo:</div>
<div>
<a href="https://github.com/daldosso/MongoDelphiDemo/blob/master/MainFrm.pas">https://github.com/daldosso/MongoDelphiDemo/blob/master/MainFrm.pas</a><br />
<br />
<br />
<div style="text-align: right;">
Alberto Dal Dosso</div>
</div>
</div>
<div>
<br /></div>
<br />
<div>
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-86970916162508060672016-06-20T15:03:00.000+02:002016-06-20T15:16:45.697+02:00Usare OpenSSL da Delphi<h2>
Per chi ha fretta</h2>
<span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;">Su </span><a href="https://bitbucket.org/lminuti/delphi-openssl" style="line-height: 1.38; text-decoration: none;"><span style="color: #1155cc; font-family: "arial"; font-size: 14.6667px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">bitbucket</span></a><span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;"> (principale) o </span><a href="https://github.com/lminuti/Delphi-OpenSSL" style="line-height: 1.38; text-decoration: none;"><span style="color: #1155cc; font-family: "arial"; font-size: 14.6667px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">github</span></a><span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;"> (copia) è possibile scaricare una libreria Delphi che consente di usare alcune funzioni crittografiche di OpenSSL.</span><br />
<span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;"><br /></span>
<h2>
Introduzione</h2>
<span style="font-family: "arial"; font-size: 14.6667px; line-height: 1.38; white-space: pre-wrap;">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.</span><br />
<b style="font-weight: normal;"><br /></b>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<div style="text-align: center;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><img alt="openssl1.png" height="455" src="https://lh4.googleusercontent.com/1woHso_lyt4ndYM7H6tRBeo0uhLaLoP6KlEoL5QW0BEUz4NWt5hT3Z6tALNpR6Z1BUqSpBq3P7eymi-xXR8PvXL02BK4v0eOt_pCysXJVB0abFlS6RL76dzJufEmOi44G7RivboF" style="border: none; transform: rotate(0rad);" width="602" /></span></div>
</div>
<h2>
Funzionalità</h2>
<span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;">Le funzionalità al momento si riducono alla cifratura con </span><span style="color: black; font-family: "arial"; font-size: 14.6667px; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">RSA</span><span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;"> (quindi a chiave pubblica) e con </span><span style="color: black; font-family: "arial"; font-size: 14.6667px; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">AES</span><span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;"> (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 </span><a href="https://openssl.org/docs/manmaster/apps/rsa.html" style="line-height: 1.38; text-decoration: none;"><span style="color: #1155cc; font-family: "arial"; font-size: 14.6667px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">OpenSSL RSA</span></a><span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;"> è implementata dalla classe </span><span style="color: black; font-family: "courier new"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;">TRSAUtil</span><span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;">, mentre l'area </span><a href="https://www.openssl.org/docs/manmaster/apps/enc.html" style="line-height: 1.38; text-decoration: none;"><span style="color: #1155cc; font-family: "arial"; font-size: 14.6667px; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">OpenSSL ENC</span></a><span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;"> da </span><span style="color: black; font-family: "courier new"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;">TEncUtil</span><span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;">.</span><br />
<b style="font-weight: normal;"><br /></b>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Le idee per il futuro sono diverse, innanzitutto togliere le dipendenze dai componenti </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Indy</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, infatti al momento, uso le unit </span><span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">IdSSLOpenSSLHeaders </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">e </span><span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">IdSSLOpenSSL </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">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.</span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h2>
Licenza di Delphi-OpenSSL</h2>
<span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;">Delphi-OpenSSL è distribuita secondo i termini della </span><span style="color: black; font-family: "arial"; font-size: 14.6667px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;">Apache License</span><span style="color: black; font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;"> che consente di usare il software senza restrizioni di sorta, di distribuirlo, modificarlo e di distribuire versioni modificate del software.</span><br />
<b style="font-weight: normal;"><br /></b>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">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.</span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h2>
Licenza di OpenSSL</h2>
<span style="font-family: "arial"; font-size: 14.6667px; line-height: 1.38; white-space: pre-wrap;">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".</span><br />
<b style="font-weight: normal;"><br /></b>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Leggetevi bene anche il </span><span style="background-color: transparent; color: black; font-family: "courier new" , "courier" , monospace; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">README.txt</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> compreso nella distribuzione di OpenSSL perché in alcuni paesi, per esempio gli Stati Uniti, ci sono delle restrizione sull'esportazione di tecnologie crittografiche.</span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span>
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: x-small; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><b>Luca Minuti</b></span></div>
<br />Luca Minutihttp://www.blogger.com/profile/08976074206082701447noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-74156729249153027422016-04-19T23:34:00.002+02:002016-04-20T12:32:45.140+02:00La nuova versione di Delphi: 10.1 Berlin<h2>
</h2>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRohsL3zbJsmevqp3wV2Ihjr8SUBRgbIRKlWDgT8dRvu6tbNYIvz0nFUFoYsoprL8Mtx1_lOnYQJxaYgqSSqKpVSNqjPITc7PN8ybFF_dK2Binp_wvitxTWMqTX6zOvKPq4EtE9RBwmTs/s1600/FireUILiveAppPreview_1200.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRohsL3zbJsmevqp3wV2Ihjr8SUBRgbIRKlWDgT8dRvu6tbNYIvz0nFUFoYsoprL8Mtx1_lOnYQJxaYgqSSqKpVSNqjPITc7PN8ybFF_dK2Binp_wvitxTWMqTX6zOvKPq4EtE9RBwmTs/s640/FireUILiveAppPreview_1200.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">RAD Studio10.1 Berlin</td></tr>
</tbody></table>
<br />
<br />
Da poche ore è stata rilasciata la nuova versione di Delphi/C++/RAD Studio: 10.1 Berlin.<br />
<br />
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 :-)<br />
<br />
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 <a href="http://docwiki.embarcadero.com/RADStudio/Berlin/en/What%27s_New" target="_blank">novità di questa versione</a>.<br />
<br />
<h3>
Nuovo installer</h3>
<div>
La novità più visibile (anche perchè è la prima che si incontra) è il nuovo installer, completamente rifatto e sensibilmente più veloce e snello.</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBjnEQ9sQCAglfBuwip1yGQd6NhpF9k5TlgbT81JplrMF6juukOVWMqMjX2WJ4TCq1aeTffPsbg03vWSmCnDt5awVMr1mcaGpe7i6VTVlpjixbBZk0Nci4___T6yECyGBsexwHM5-4qWM/s1600/MinimalInstallerOptionsPage.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBjnEQ9sQCAglfBuwip1yGQd6NhpF9k5TlgbT81JplrMF6juukOVWMqMjX2WJ4TCq1aeTffPsbg03vWSmCnDt5awVMr1mcaGpe7i6VTVlpjixbBZk0Nci4___T6yECyGBsexwHM5-4qWM/s400/MinimalInstallerOptionsPage.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Opzioni installer</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
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.</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiGkDqIL_j_deKwlbEx612ddXmseGDFmQcFkPn8cD_D0ETR1uzhiFgZnpM_XG4_EbG9WzKBwG_dRXrZKqovn-eXrTdnATkJfl3B9rifmjKHvj540ylwrHlpxNkRzVpvvGM_11ca0hboJ4/s1600/522px-InstallerPlatformSelection.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiGkDqIL_j_deKwlbEx612ddXmseGDFmQcFkPn8cD_D0ETR1uzhiFgZnpM_XG4_EbG9WzKBwG_dRXrZKqovn-eXrTdnATkJfl3B9rifmjKHvj540ylwrHlpxNkRzVpvvGM_11ca0hboJ4/s400/522px-InstallerPlatformSelection.png" width="347" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Feature Installer: platform selection</td></tr>
</tbody></table>
Come potete vedere adesso è possibile selezionare in modo chiaro le piattaforme da installare salvando quindi spazio su disco e tempo di installazione.<br />
Con una successiva finestra è poi possibile scegliere di installare alcuni componenti aggiuntivi come l'help, gli esempi ed alcuni componenti tipicamenti distribuiti con Delphi.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKzHombuAJrYOt7UGyXCHKikD9GOMPDxyl1KmpteeQh0MugwTFAf7Z59GvETeWpUUVsBmAYMKoKaegnIAQl8ZcyMvNA6oWC8oauVnmByKgGqUr7I8LLggxtbsGc9HbZKb18BjR2R5X6V4/s1600/InstallerAdditionalSelection.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKzHombuAJrYOt7UGyXCHKikD9GOMPDxyl1KmpteeQh0MugwTFAf7Z59GvETeWpUUVsBmAYMKoKaegnIAQl8ZcyMvNA6oWC8oauVnmByKgGqUr7I8LLggxtbsGc9HbZKb18BjR2R5X6V4/s400/InstallerAdditionalSelection.png" width="347" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: 12.8px;">Feature Installer: option selection</span></td></tr>
</tbody></table>
L'aspetto interessante è che, se in un secondo momento volessimo aggiungere ulteriori piattaforme basterebbe invocare ancora il "<span style="font-family: "courier new" , "courier" , monospace;">Feature Installer/Manager</span>" per aggiungerla alla nostra installazione.<br />
Ricordatevi, una volta terminata l'installazione, di lanciare <span style="font-family: "courier new" , "courier" , monospace;">GetIt</span><span style="font-family: inherit;"> per installare componenti opzionali che prima invece erano parte dell'installer (CodeSite, IoT, ecc...)</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPEeoMD8KRIx4z6MPtB1aV7qwezt3iT2qIdbEfHxQkrD-tg9kGaGtV727P0A4XPmwboU5MBlTB3jixwv5WqpDYR117niylRO8lbjtlbwWTyQNmvInRyYcqn03FG3FPE65v-ymyvZeyOXY/s1600/GetIt_IoTComponents.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="440" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPEeoMD8KRIx4z6MPtB1aV7qwezt3iT2qIdbEfHxQkrD-tg9kGaGtV727P0A4XPmwboU5MBlTB3jixwv5WqpDYR117niylRO8lbjtlbwWTyQNmvInRyYcqn03FG3FPE65v-ymyvZeyOXY/s640/GetIt_IoTComponents.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">GetIt Package Manager - IoT components</td></tr>
</tbody></table>
<span style="font-family: inherit;"><br /></span>
Personalmente mi sembra un <u>enorme</u> passo in avanti rispetto all'attuale "esperienza di installazione".<br />
<br />
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.<br />
<br />
<h3>
IDE</h3>
<div>
<br /></div>
<div>
<h4>
Floating Form Designer</h4>
</div>
<div>
Un gradito ritorno, adesso Delphi può essere usato anche in modalità "floating" (alla Delphi 7 per intenderci), per abilitare la modalità andate nel menu:</div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">Tools -> Options > Form Designer </span>e togliete il check sull'opzione <span style="font-family: "courier new" , "courier" , monospace;">Embedded Designer</span></div>
<div>
<br /></div>
<h4>
FireUI Live Preview</h4>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGJ5xrVq0DhMpy44qiuSxmNOgE0cku_N6C2ndymLYxBe8vLB8xRBzSGzmNJPIZJidtbhW6KxphbCMekbB_d7WluaUHDWdgS44q9mNtWUj8Q1DdXt7EgMZ0GhyphenhyphenWcmVvHCypng2E-kK3op0/s1600/800px-FireUI_Preview_Diagram.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGJ5xrVq0DhMpy44qiuSxmNOgE0cku_N6C2ndymLYxBe8vLB8xRBzSGzmNJPIZJidtbhW6KxphbCMekbB_d7WluaUHDWdgS44q9mNtWUj8Q1DdXt7EgMZ0GhyphenhyphenWcmVvHCypng2E-kK3op0/s400/800px-FireUI_Preview_Diagram.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">FireUI Live Preview</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
Fa la comparsa in 10.1 Berlin un nuovo strumento, la <span style="font-family: "courier new" , "courier" , monospace;">FireUI Live Preview</span>, 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.<br />
<br />
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.<br />
<br />
La tecnologia usata per realizzare questo tool la conosciamo già bene: <span style="font-family: "courier new" , "courier" , monospace;">App Tethering,</span> framework di comunicazione introdotto in Delphi XE6.<br />
<div>
<br /></div>
<h4>
High DPI Awareness</h4>
</div>
<div>
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)</div>
<div>
<br /></div>
<div>
<h4>
Bookmark Stack</h4>
</div>
<div>
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.</div>
<div>
<br /></div>
<div>
<h4>
Selection Expansion</h4>
</div>
<div>
Da fanatico della tastiera quale sono questa funzionalità mi fa molto piacere, premendo <span style="font-family: "courier new" , "courier" , monospace;">Ctrl-W</span> è 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!</div>
<div>
<br /></div>
<div>
<h4>
Method Toxicity Metrics</h4>
</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw5NnjQqTN97UXVD19HNKOl2poqEVNTVHnjqTWN10weqD-dU6TZr1-PILaejVDc86iXjeNDSaNRyjmQcNSliI01FqiHqqtCGkf9NeTEQxi-zTjF86EzwznTeb-37-QcqiJAjHVBjjYbl0/s1600/CodeAnalysis.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="137" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw5NnjQqTN97UXVD19HNKOl2poqEVNTVHnjqTWN10weqD-dU6TZr1-PILaejVDc86iXjeNDSaNRyjmQcNSliI01FqiHqqtCGkf9NeTEQxi-zTjF86EzwznTeb-37-QcqiJAjHVBjjYbl0/s400/CodeAnalysis.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Metrica Method Texicity</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
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" :-)<br />
<br />
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!<br />
<br />
<h4>
Altre modifiche migliorie nell'IDE includono:</h4>
<ul>
<li>Structure View Improvements for C++</li>
<li>Android Service Improvements</li>
<li>Support for Running iOS Ad hoc Applications</li>
<li>Customizable info.plist File</li>
<li>Design-Time Improvements for Android Smart Watches</li>
<li>GetIt Dependencies</li>
<li>New Options Page for File Associations</li>
<li>New Option to Show Information Messages from the Delphi Compiler</li>
</ul>
</div>
<div>
<h3>
</h3>
<h3>
<br /></h3>
<h3>
Utilities</h3>
<div>
<br />
The Java2OP.exe tool now works with JDK 8.</div>
<div>
New SdkTransform.exe tool. It can be used to convert Objective-C or C++ headers to Delphi headers.<br />
<br />
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.<br />
<br /></div>
</div>
<h3>
FireMonkey</h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX0754nRXb2wUqgz7kJKl61mHcLqKIq7j0GDJoZ0ujHlRhrM1yhJ4oD7qXhrFCqG3qfzMUIQ4SBm71MOSQ2gNQZ9a6wxQjwn4R0qtAGWyfhjaSmRlvfD717XO996DB9NBerLdiK1lO_Cg/s1600/FireMonkey-Medium.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="61" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX0754nRXb2wUqgz7kJKl61mHcLqKIq7j0GDJoZ0ujHlRhrM1yhJ4oD7qXhrFCqG3qfzMUIQ4SBm71MOSQ2gNQZ9a6wxQjwn4R0qtAGWyfhjaSmRlvfD717XO996DB9NBerLdiK1lO_Cg/s200/FireMonkey-Medium.png" width="200" /></a></div>
<div>
<br /></div>
<h4>
Supporto Android 6.0</h4>
Supporto ufficiale per Android 6 (API Level 23)<br />
<br />
<h4>
Componente TAddressBook</h4>
<h4>
<br /><div class="separator" style="clear: both; text-align: center;">
</div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUQEM5fqD9YkLnqpXRgCyt-uL89HiDkUKILg1hftFtPbpUrBElGG_gGxCoPGEoXowe7iKtdXTGqStxqozv6AnNK4LMxS6pjIuddpDn6ha4dLIzYnIKFm1aQaKLUXCw4XakRqCGziQL0GE/s1600/AddressBook_Android.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUQEM5fqD9YkLnqpXRgCyt-uL89HiDkUKILg1hftFtPbpUrBElGG_gGxCoPGEoXowe7iKtdXTGqStxqozv6AnNK4LMxS6pjIuddpDn6ha4dLIzYnIKFm1aQaKLUXCw4XakRqCGziQL0GE/s200/AddressBook_Android.png" width="133" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Address Book</td></tr>
</tbody></table>
<span style="font-weight: normal;"> Per le piattaforme mobile è disponibile un nuovo componente (TAddressBook) che permette alle app di accedere alla rubrica :</span></h4>
<br />
<ul>
<li>Sending a request to access a device Address Book and getting the access status.</li>
<li>Accessing all sources defined in the device Address Book.</li>
<li>Fetching all or individual contacts from specified source.</li>
<li>Fetching all contacts from specified group(s).</li>
<li>Editing or removing existing contacts and groups.</li>
<li>Creation of new contacts, creation of new groups.</li>
</ul>
<br />
<br />
<br />
<h4>
Improved Style Designer</h4>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9_k2_tqUWeokbfpcRKkxvueMASzluT9_J_HzogNLBh5lsJ5_l5FwAzzHsDyXlXXayuhDKjXecoiPuPVyPCK3hrg1sJ9ruLUJxZkSEo_Td2l74I_ZKrdu2lVey-EzRAIqGuxgTTqjacb0/s1600/500px-LondonFireMonkeyStyleDesigner.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="102" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9_k2_tqUWeokbfpcRKkxvueMASzluT9_J_HzogNLBh5lsJ5_l5FwAzzHsDyXlXXayuhDKjXecoiPuPVyPCK3hrg1sJ9ruLUJxZkSEo_Td2l74I_ZKrdu2lVey-EzRAIqGuxgTTqjacb0/s400/500px-LondonFireMonkeyStyleDesigner.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Style Designer</td></tr>
</tbody></table>
<br />
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.<br />
<br />
<h4>
New ListView Item Designer</h4>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiQgrQljWo-oIhyphenhyphenTG7_fPBWiIkxInJ_IzKoNsljVo8S18cOq1XgMK4wO8TRS0lqBgYbFOzdzhGxBmE1j3LexTDiJZcktjwqZmFfCg1-FpodtdrDsvB7sRy-lL8Zz_GbUiR_npzAGlPd_c/s1600/LondonListViewDesignMode.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiQgrQljWo-oIhyphenhyphenTG7_fPBWiIkxInJ_IzKoNsljVo8S18cOq1XgMK4wO8TRS0lqBgYbFOzdzhGxBmE1j3LexTDiJZcktjwqZmFfCg1-FpodtdrDsvB7sRy-lL8Zz_GbUiR_npzAGlPd_c/s1600/LondonListViewDesignMode.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ListView Item Designer</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
Sempre su FireMonkey, il controllo ListView ha un nuovo tipo di <span style="font-family: Courier New, Courier, monospace;">ItemAppearance</span>: <span style="font-family: Courier New, Courier, monospace;">DynamicAppearance</span> 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.</div>
<div>
<br /></div>
<div>
<h4>
Altre migliorie/novità sulla piattaforma FireMonkey:</h4>
</div>
<div>
<div>
<ul>
<li>Extended Clipboard Support Service</li>
<li>Improvement on the Image List Editor</li>
<li>TGrid Improvements</li>
<li>High DPI Support on Windows</li>
<li>Improved Support for Accelerator Keys</li>
<li>Support for Extended Font Styles</li>
<li>Hint Property Changes</li>
<li>Simplified Dialog API</li>
</ul>
</div>
</div>
<h3>
</h3>
<h3>
<br /></h3>
<h3>
RTL</h3>
<div>
<br /></div>
<div>
<h4>
Miglioramenti su TStrings e TStringList</h4>
<div>
C'è poco da dire, <span style="font-family: "courier new" , "courier" , monospace;">TStringList</span> è 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.<br />
<br />
Dalla versione 10.1 Berlin la classe <span style="font-family: "courier new" , "courier" , monospace;">TStrings</span> guadagna queste funzionalità:<br />
<br />
<ul>
<li>Metodo <span style="font-family: "courier new" , "courier" , monospace;">AddPair</span>, per aggiungere coppie key-value alla lista potendo anceh usare lo stile "fluent": <span style="font-family: "courier new" , "courier" , monospace;">LList.AddPair('Nome', 'Paolo').AddPair('Cognome': 'Rossi');</span></li>
<li>Proprietà <span style="font-family: "courier new" , "courier" , monospace;">KeyNames</span>, per ottenere una lista di key da una lista di stringhe in formato key-value</li>
<li>Proprietà <span style="font-family: "courier new" , "courier" , monospace;">Options</span>, per controllare le opzioni associate alla stringlist</li>
<li>Metodo <span style="font-family: "courier new" , "courier" , monospace;">SetStrings</span>, per copiare stringhe da un altro oggetto TStrings. E' simile al metodo <span style="font-family: "courier new" , "courier" , monospace;">Assign</span> ma <span style="font-family: "courier new" , "courier" , monospace;">SetStrings</span> copia solo le stringhe senza toccare le altre proprietà (che invece Assign copia)</li>
<li>Proprietà <span style="font-family: "courier new" , "courier" , monospace;">TrailingLineBreak</span>, determina se la proprietà deve contenere un line break alla fine oppure no.</li>
<li>Proprietà di sola lettura <span style="font-family: "courier new" , "courier" , monospace;">Updating</span>, indica se la lista è impegnata in una operazione di update</li>
<li>Proprietà <span style="font-family: "courier new" , "courier" , monospace;">UseLocale</span>, determina quali funzioni sono usate per il confronto delle stringhe, se True vengono usate <span style="font-family: "courier new" , "courier" , monospace;">AnsiCompareStr/AnsiCompareText</span>, se False vengono invece usate <span style="font-family: "courier new" , "courier" , monospace;">CompareStr/CompareText</span></li>
<li>La classe <span style="font-family: "courier new" , "courier" , monospace;">TStringList</span> ha nuovi costruttori (overloaded) che consentono maggior libertà in fase di inizializzazione</li>
</ul>
</div>
</div>
<div>
<h4>
Miglioramenti sulla classe TMemIniFile</h4>
<div>
Per chi usa la classe <span style="font-family: "courier new" , "courier" , monospace;">TMemIniFile</span> queste sono interessanti aggiunte, vediamole:</div>
<div>
<ul>
<li>E' possibile adesso specificare la proprietà <span style="font-family: "courier new" , "courier" , monospace;">CaseSensitive</span> nel costruttore</li>
<li>La nuova proprietà <span style="font-family: "courier new" , "courier" , monospace;">Modified</span> indica se il file INI è stato modificato dal suo caricamento da disco.</li>
<li>La nuova proprietà <span style="font-family: "courier new" , "courier" , monospace;">AutoSave</span> determina se l'istanza di <span style="font-family: "courier new" , "courier" , monospace;">TMemIniFile</span> deve automaticamente salvare su disco i cambiamenti al momento della sua distruzione.</li>
</ul>
</div>
</div>
<div>
<h4>
Supporto buffering per la classe TFileStream</h4>
<div>
Un grazie a FireDAC che "regala" alla RTL una sua classe, la classe <span style="font-family: "courier new" , "courier" , monospace;">TFDFileStream</span> è stata infatti spostata nella unit <span style="font-family: "courier new" , "courier" , monospace;">System.Classes</span> ed è stata rinominata in <span style="font-family: "courier new" , "courier" , monospace;">TBufferedFileStream</span>.</div>
<div>
<span style="font-family: inherit;">La classe </span><span style="font-family: "courier new" , "courier" , monospace;">TBufferedFileStream</span> è un <span style="font-family: "courier new" , "courier" , monospace;">TFileStream</span> discendente che ottimizza sensibilmente brevi letture o scritture consecutive, ovvero, aggiunge il supporto al buffering ai file stream.</div>
</div>
<div>
<br /></div>
<div>
<h4>
Support Bluetooth LE e Beacon su Windows 10</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEs8ICcqzxOqgxhubMsYspc6LZW5AGu_ww5_QIZiyhUFIP09K5LCZ4hTqyMK8Rb_c4zNnXPpCzFRwHJ-GJ-l1d8nZD7jg-N5n6sSYKLMuIELO5976nF-9CLufbktvhaPAix1MoY-0GMj4/s1600/640px-Bluetooth_Smart_Logo.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEs8ICcqzxOqgxhubMsYspc6LZW5AGu_ww5_QIZiyhUFIP09K5LCZ4hTqyMK8Rb_c4zNnXPpCzFRwHJ-GJ-l1d8nZD7jg-N5n6sSYKLMuIELO5976nF-9CLufbktvhaPAix1MoY-0GMj4/s320/640px-Bluetooth_Smart_Logo.svg.png" width="320" /></a></div>
<div>
<br /></div>
<div>
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:<br />
<ul>
<li>Improved Bluetooth LE Discovery Performance</li>
<li>Bluetooth LE Includes New Events to Handle Subscriptions to Characteristics</li>
<li>Eddystone Beacon Format Support</li>
<li>Improved Beacon Scan Performance</li>
<li>TBeaconDevice Component Supports Eddystone Beacon Format</li>
</ul>
</div>
</div>
<div>
<h4>
Ottimizzazione delle Regular Expressions</h4>
</div>
<div>
<div>
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!<br />
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!</div>
<div>
<h4>
Ottimizzazione sulla funzione StringReplace </h4>
Le performance della funzione <span style="font-family: "courier new" , "courier" , monospace;">StringReplace</span> sono state particolarmente ottimizzate, può sembrare un miglioramento insignificante ma in tutti i programmi che ho visto <span style="font-family: "courier new" , "courier" , monospace;">StringReplace</span> è pesantemente utilizzata e quindi... benvenuta a questa miglioria.</div>
</div>
<h4>
Migliorie App Tethering</h4>
<div>
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:<br />
<ul>
<li>Due nuovi network adapters che forniscono il supporto multicast per IPv4 e IPv6.</li>
<li>E' possibile specificare un range di indirizzi IPv4 come target del remote manager per l'auto discovery.</li>
<li>Supporto per il Log filtering. E' adesso possibile dis/abilitare il log per uno specifico item dell'architettura app tethering.</li>
<li>I profili possono permettere o meno connessioni da profili remoti.</li>
</ul>
</div>
<div>
<h4>
Comunicazione HTTP, web programming</h4>
<div>
Le prossime funzionalità sono particolarmente interessanti a tutti quelli che si occupano di programmazione web oppure di framework di comunicazione (come la <a href="https://github.com/MARS-library/MARS" target="_blank">libreria REST MARS</a>). Nel dettaglio:</div>
<ul>
<li>Supporto per le operazioni asincrone HTTP</li>
<li>Supporto per i file ZIP criptati</li>
<li>Supporto per i client HTTP per la decompressione automatica di un contenuto "gzippato" spedito dal server</li>
<li>Migliorie sulla connessione HTTP</li>
<li>Funzioni di <span style="font-family: "courier new" , "courier" , monospace;">URLEncode/URLDecode</span></li>
<li>Le stringhe <span style="font-family: "courier new" , "courier" , monospace;">UTF8String</span> and <span style="font-family: "courier new" , "courier" , monospace;">RawByteString</span> sono adesso supportate anche sulle piattaforme mobile (iOS, Android)</li>
</ul>
</div>
<h3>
<br /></h3>
<h3>
Compilatore</h3>
<div>
<br />
Anche queste aggiunte e migliorie sono "nascoste" ma comunque importantissime, vediamole nel dettaglio.</div>
<div>
<h4>
Miglioramenti delle performance nella compilazione dei generics</h4>
<div>
I compilatori Delphi hanno visto numerosi cambiamenti che riguardano la gestione dei generici risultanti in diversi miglioramenti:</div>
<div>
<ul>
<li>Il parsing dei generici è adesso fino a 3 volte più veloce</li>
<li>Le performance dei compilatori DCC32, DCC64 e DCCOSX quando linkano progetti che usano estensivamente i generici estensivamente sono decisamente aumentate.</li>
</ul>
</div>
<h4>
Attributi supportati da tutti i compilatori</h4>
<div>
Adesso tutti i compilatori Delphi supportano i seguenti attributi:</div>
<div>
<ul>
<li><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">unsafe</span><span style="font-family: "courier new" , "courier" , monospace;">: </span></span><span style="font-family: inherit;">permette di annotare il risultato di una funzione per non farla gestire al sistema ARC</span></li>
<li><span style="font-family: "courier new" , "courier" , monospace;">volatile: </span><span style="font-family: inherit;">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)</span></li>
<li><span style="font-family: "courier new" , "courier" , monospace;">weak: </span><span style="font-family: inherit;">Utile per annotare un campo come una "weak reference" ovvero che non incrementa il reference count del'oggetto a cui punta</span></li>
</ul>
</div>
<h4>
Modifica su class e record helper</h4>
<div>
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".</div>
<h4>
Altre migliorie sui compilatori Delphi</h4>
<div>
<ul>
<li>The memory allocated to conditional symbols has been extended from 256 bytes to 4096 bytes.</li>
<li>The size of Extended is now 16 bytes to be compatible with BCCOSX</li>
</ul>
</div>
</div>
<div>
<br /></div>
<div>
<h3>
EMS (Enterprise Mobility Services)</h3>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNaKew1HVa6izDvk7qJfne98kra0NgMjG-lsS5fgNjo0BcZalap2dzZUROzlqlCCastOvyM8GvvmgHObgoTiWTF1HaHvJ5vOZ5r4krKFdkS9BDOIZtfSuT2lXF1Acn1weDkzCOWvxxMMI/s1600/EMS_System_Diagram.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNaKew1HVa6izDvk7qJfne98kra0NgMjG-lsS5fgNjo0BcZalap2dzZUROzlqlCCastOvyM8GvvmgHObgoTiWTF1HaHvJ5vOZ5r4krKFdkS9BDOIZtfSuT2lXF1Acn1weDkzCOWvxxMMI/s1600/EMS_System_Diagram.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">EMS System Diagram</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
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;</div>
<div>
<ul>
<li>Apache Server Support</li>
<li>Cross-Domain API Calls to the EMS Server</li>
<li>EMS EdgeModules</li>
<li>EMS EdgeModules Resource</li>
<li>ThingPoints Overview</li>
<li>EMS API Resource</li>
<li>Custom API Documentation</li>
</ul>
</div>
</div>
<br />
<h3>
(Mie) Opinioni sulla release 10.1 Berlin</h3>
<br />
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.<br />
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 <a href="http://edn.embarcadero.com/article/44675" target="_blank">bug fissati</a> in questa release!<br />
<br />
Concludo la recensione della release 10.1 Berlin puntandovi al documento della <a href="https://www.embarcadero.com/docs/rad-studio-berlin-feature-matrix.pdf" target="_blank">feature matrix</a> per avere un dettaglio (anche troppo) su tutte le funzionalità divise a seconda della edition (Starter, Professional, Enterprise) in vostro possesso.<br />
<br />
<h3>
Embarcadero focalizzata sugli sviluppatori</h3>
L'ultimo paragrafo è relativo ad un recente annuncio.<br />
<br />
Embarcadero, da poco acquisita da IDERA (<a href="http://blog.delphiedintorni.it/2016/02/roadmap-e-novita-delphi-nel-2016.html">leggi qui l'articolo</a>), dopo aver svelato la <a href="http://blog.delphiedintorni.it/2016/02/roadmap-e-novita-delphi-nel-2016.html" target="_blank">roadmap</a> 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.<br />
<br />
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...<br />
<br />
Speriamo che questa svolta consenta ad Embarcadero di concentrarsi su Delphi e C++ rilasciando versioni sempre più stabili e ricche di funzionalità.<br />
<br />
<br />
Un saluto.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeMMyZaa0Ur66qcc-uv7EJ0Qa3Ohy1kOLRz-1NX64vvvTuFkqupPgfl9NXAm7x_lII2t3pASULlG6gkDCcGfcQM0MaJynDjHay_d84w1mqjGTji26wuHg3W0m2DLU23XmMKANulbl_SNo/s1600/firma.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeMMyZaa0Ur66qcc-uv7EJ0Qa3Ohy1kOLRz-1NX64vvvTuFkqupPgfl9NXAm7x_lII2t3pASULlG6gkDCcGfcQM0MaJynDjHay_d84w1mqjGTji26wuHg3W0m2DLU23XmMKANulbl_SNo/s1600/firma.png" /></a></div>
<br />
<br />
<br />
<br />Paolo Rossihttp://www.blogger.com/profile/09956628024928838702noreply@blogger.com1Piacenza, Province of Piacenza, Italy45.0526206 9.692984499999965944.9628636 9.531622999999966 45.142377599999996 9.8543459999999659tag:blogger.com,1999:blog-4261051967240266070.post-18935052405558896262016-02-24T08:58:00.000+01:002016-02-24T08:58:12.756+01:00Delphi nei primi 10 nell'indice TIOBECon questo articolo mi lascio andare ad un po' di gossip... da programmatore :-)<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.tiobe.com/tiobe_index" target="_blank"><img border="0" height="87" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaEIIP3Uu14_GINABTkSwMVsZfA7pCTLXKEJBpBdpfRIxLZtvsOuc2Ae4HnyU6Uqlp7GmOf23SG27LcBDQH3SVuIhorb6_ebhRP_H-lJuLs8wUlCRPUxGGN38LvQrbVOHbYlLxb9jMUes/s200/tiobe.jpg" width="200" /></a></div>
<br />
Qualcuno di voi avrà sentito parlare dell'<a href="http://www.tiobe.com/tiobe_index" target="_blank">indice TIOBE</a> che, analizzando i dati delle ricerche effettuate sui principali search engine, compila una statistica dei linguaggi più usati (o per meglio dire più ricercati) al mondo.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc9j9ryx5FXtu-G39xYvwVy8upKl1GhDnEsC_1fIelKYaKQaVYXzQCJOWp8wm5xroiWr2jBiqhA3txdeSHq3v5jxs3YCCWTMe8pK5epddcOQjYONic93-CCH1-pImwhcBV35e6WtNleLs/s1600/tiobe.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc9j9ryx5FXtu-G39xYvwVy8upKl1GhDnEsC_1fIelKYaKQaVYXzQCJOWp8wm5xroiWr2jBiqhA3txdeSHq3v5jxs3YCCWTMe8pK5epddcOQjYONic93-CCH1-pImwhcBV35e6WtNleLs/s640/tiobe.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Indice TIOBE febbraio 2016</td></tr>
</tbody></table>
<br />
Per la prima volta, dopo tanti anni, Delphi ritorna nella top-ten dei linguaggi più usati e non solo, se guardate i trend è anche in crescita!<br />
<br />
Quale importanza riveste questa notizia per noi programmatori Delphi? beh praticamente nessuna :-)<br />
<br />
Serve però forse ad inquadrare meglio l'impatto e l'importanza reale di Delphi all'interno della community "globale" dello sviluppo, ovvero non è per nulla quel linguaggio dimenticato ed "antico" che a volte ho sentito definire da alcuni in giro per conferenze... la prossima volta che quindi vi capita di incontrarne qualcuno di questi tizi, fategli mandatelo a questo link! :-)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifhim23tsThZnhw4mxMToclj9lW1TykuSjReOkbVQT8nfUWXtOwQ8KltbtqK_EUiYcq1hm7F8LFwsdpyvrY9M8vrmLw-nKPRhNKBkVcROALGWKPLpcun3N8hBuJCxeDEcjF0Kp6VFADMc/s1600/firma.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifhim23tsThZnhw4mxMToclj9lW1TykuSjReOkbVQT8nfUWXtOwQ8KltbtqK_EUiYcq1hm7F8LFwsdpyvrY9M8vrmLw-nKPRhNKBkVcROALGWKPLpcun3N8hBuJCxeDEcjF0Kp6VFADMc/s1600/firma.png" /></a></div>
<br />
<br />
<br />Paolo Rossihttp://www.blogger.com/profile/09956628024928838702noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-80843601676256042522016-02-22T22:38:00.000+01:002016-02-22T22:38:03.547+01:00Hotfix per RAD Studio XE8 e XE7<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoEdS7MM7nFLkqUUKWnWmt5sZeUekGB42L9WsViDPq0CWtbFYNLWLR4X1PrTcuiWW1HHQ_lktB8Mbee6irT7RxGdn8XBvuGKvP0O89J5L292MXxbtqioykkGmRdp0C45wct6Cadt5K3sA/s1600/image4238.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoEdS7MM7nFLkqUUKWnWmt5sZeUekGB42L9WsViDPq0CWtbFYNLWLR4X1PrTcuiWW1HHQ_lktB8Mbee6irT7RxGdn8XBvuGKvP0O89J5L292MXxbtqioykkGmRdp0C45wct6Cadt5K3sA/s320/image4238.png" width="320" /></a></div>
<br />
Nei giorni scorsi Embarcadero ha reso disponibili due hotfix per RAD Studio XE7 ed XE8. Una piacevole novità che risponde finalmente con i fatti alla promessa di allargare il periodo di supporto sulle precedenti versioni di Delphi.<br />
<br />
Potete trovare a queste pagine i due update:<br />
<ul>
<li><a href="http://cc.embarcadero.com/item/30477" target="_blank">December 2015 XE7 Update Subscription Update</a></li>
<li><a href="http://cc.embarcadero.com/item/30476" target="_blank">December 2015 XE8 Update Subscription Update</a></li>
</ul>
<div>
Gli update in questione saranno disponibili a tutti quelli che hanno attiva assieme alla licenza Delphi una "<a href="https://www.embarcadero.com/products/rad-studio/update-subscription" target="_blank">Update Subscription</a>", se già non l'avete contattate il vostro rivenditore e chiedete una quotazione, il mio consiglio è quello di muovervi verso questa forma di "abbonamento" che vi assicura, oltre ad avere automaticamente tutte le versioni di Delphi che escono, anche tutti gli update anche per le versioni precedenti.</div>
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifhim23tsThZnhw4mxMToclj9lW1TykuSjReOkbVQT8nfUWXtOwQ8KltbtqK_EUiYcq1hm7F8LFwsdpyvrY9M8vrmLw-nKPRhNKBkVcROALGWKPLpcun3N8hBuJCxeDEcjF0Kp6VFADMc/s1600/firma.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifhim23tsThZnhw4mxMToclj9lW1TykuSjReOkbVQT8nfUWXtOwQ8KltbtqK_EUiYcq1hm7F8LFwsdpyvrY9M8vrmLw-nKPRhNKBkVcROALGWKPLpcun3N8hBuJCxeDEcjF0Kp6VFADMc/s1600/firma.png" /></a></div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<span id="goog_103913600"></span></div>
Paolo Rossihttp://www.blogger.com/profile/09956628024928838702noreply@blogger.com0Piacenza, Province of Piacenza, Italy45.0526206 9.692984499999965944.9628636 9.531622999999966 45.142377599999996 9.8543459999999659tag:blogger.com,1999:blog-4261051967240266070.post-64941893065612303692016-02-22T22:36:00.000+01:002016-02-22T22:51:58.184+01:00Roadmap e novità di Delphi e C++ per il 2016Negli ultimi giorni ci sono state interessanti novità su Delphi, è stata infatti <a href="http://community.embarcadero.com/article/news/16211-embarcadero-rad-studio-2016-product-approach-and-roadmap-2" target="_blank">pubblicata</a> dal Product Manager <a href="http://blog.marcocantu.com/" target="_blank">Marco Cantù</a> la roadmap relativa al 2016 per Delphi e C++Builder (RAD Studio)<br />
<div>
<br /></div>
<div>
Alcune news già ce le aspettavamo ma ci sono anche piacevoli sorprese... vediamole nel dettaglio.<br />
<br />
<h3>
Embarcadero + IDERA</h3>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZW2qPBSi_sOBCuPMJl58fYqAxSX40ECN-12ijirWQo0it6i98J3toIuwojHea5-33qfWYs_qc_IHyoC4sPPKLhjgIzVi8dCZPxvjH9XE9tDemE8mRnppxI9-tyhiGoLdLY2ESGdyV5ls/s1600/emb-idera.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Embarcadero + IDERA" border="0" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZW2qPBSi_sOBCuPMJl58fYqAxSX40ECN-12ijirWQo0it6i98J3toIuwojHea5-33qfWYs_qc_IHyoC4sPPKLhjgIzVi8dCZPxvjH9XE9tDemE8mRnppxI9-tyhiGoLdLY2ESGdyV5ls/s320/emb-idera.png" title="" width="320" /></a></div>
<div>
Innanzitutto per chi si fosse perso l'annuncio di <a href="https://community.embarcadero.com/article/news/16201-customer-and-partner-welcome-from-idera" target="_blank">qualche mese fa</a> ricordiamo che Embarcadero Technologies è stata acquisita da IDERA Inc. un'azienda americana con sede ad Austin, Texas specializzata in prodotti database che, con un importante investimento, ha acquisito totalmente Embarcadero. Acquisizione centrata ovviamente sul ventaglio degli ottimi prodotti database di Embarcadero ma con un grande interesse da parte di IDERA verso il settore, per loro nuovo, degli strumenti di sviluppo di cui fanno parte Delphi e C++ Builder.</div>
<br />
Che dire sull'acquisizione... il risultato lo potremo vedere solo tra diversi mesi, per ora possiamo notare che c'è grande interesse nella community per questa operazione che, speriamo, possa portare nuova linfa e nuove idee per portare avanti il nostro strumento di sviluppo preferito. Come in tutti i cambiamenti societari, c'è stato e ci sarà movimento di personale, qualcuno se ne andrà e qualcun altro arriverà. Proprio di questi ultimissimi giorni è <a href="http://blog.therealoracleatdelphi.com/2016/02/a-new-adventure.html" target="_blank">l’annuncio di Allen Bauer</a> (storica figura dai tempi di Borland Delphi 1) che inizierà una nuova esperienza lavorativa con Alphabet (Google). Oltre a fare un grande augurio ad Allen per il nuovo lavoro chiediamo ad IDERA un impegno ad investire in modo deciso sul team di sviluppo Delphi e C++.<br />
<br />
Volendo tracciare un bilancio (chi vi scrive ha vissuto l'epoca Borland, Inprise e CodeGear) possiamo dire che Embarcadero ha rappresentato il rilancio di Delphi, lo ha preso in consegna da una situazione non propriamente brillante e a suon di investimenti (sia acquisendo ditte e framework esterni, sia come forza lavoro interna) ha trasformato il miglior strumento di sviluppo per Win32 nel miglior strumento di sviluppo multi-piattaforma, ha introdotto decine di migliaia di sviluppatori Delphi al mondo mobile, ha trasformato il l'Object Pascal rendendolo un linguaggio moderno, con potenti funzionalità senza farci perdere la produttività tipica di Delphi che ha permesso a tanti di sfornare prodotti eccezionali in una frazione del tempo richiesta con altri strumenti.<br />
<br />
Certamente rimane ancora molto da fare e quindi nel chiudere il precedente capitolo non ci resta che augurare ad IDERA un buon lavoro nel portare Delphi e C++Builder ancora più in alto!<br />
<br />
<h3>
Delphi e C++ Roadmap 2016</h3>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhabBGiMtwOJ-ZpmJJBFljCmEl50Pt-Mwut7mVZjGSeTI3M0nkKmQQ4ZqWf9dOyKjeFqs0MiywE01h2A0ba8r3KwCSFxzSUQjSh3G-gnuLd-4_Fty-O4txis71iqak06wIdaIbsQJzPSo/s1600/2016roadmap4.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Delphi e C++ roadmap per il 2016" border="0" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhabBGiMtwOJ-ZpmJJBFljCmEl50Pt-Mwut7mVZjGSeTI3M0nkKmQQ4ZqWf9dOyKjeFqs0MiywE01h2A0ba8r3KwCSFxzSUQjSh3G-gnuLd-4_Fty-O4txis71iqak06wIdaIbsQJzPSo/s640/2016roadmap4.png" title="" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Delphi e C++ roadmap per il 2016</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
<br /></div>
<div>
Il documento contiene davvero numerosi spunti interessanti riguardo il (probabile) futuro di Delphi. Dico probabile perchè vale la pena menzionare che le informazioni presentate nella roadmap, pur rappresentando più che un suggerimento, sono da considerarsi non definitive o vincolanti.</div>
<div>
<br /></div>
<div>
Cominciamo col dire che la versione corrente (10 Seattle) già rappresenta un prodotto completo e pieno di funzionalità con il pieno supporto a Windows 10, iOS 64bit, supporto IoT, il nuovo package manager GetIt, integrazione con i principali version control e tante altre novità.</div>
<div>
<br /></div>
<div>
La prima cosa che ci dice la roadmap è che nel 2016 ci saranno ancora 2 versioni, la prima (con il numero di versione 10.1) chiamata in codice BigBen uscirà in primavera e la seconda (10.2) Godzilla, in autunno.. provate ad indovinare voi il nome delle città che probabilmente avranno i prodotti finali.</div>
<div>
Sulla questione del doppio rilascio annuale qualcosa si sta muovendo viste le numerose richieste di “rallentare” la corsa di Delphi con meno rilasci di versioni e magari update incrementali e l’aggiunta di nuove funzionalità. Quindi per il futuro staremo a vedere, per il 2016 prepariamoci però ancora a fare spazio per due major release.</div>
<div>
<br /></div>
<div>
A questo proposito volevo menzionare una aspetto importante per tutti gli utenti Delphi e C++ Builder per quanto riguarda le licenze... ormai già da qualche tempo Embarcadero spinge verso l’adozione di un modello a “subscription” da abbinare alla classica licenza, infatti con l’introduzione di tutte le nuove piattaforme, Embarcadero è stata obbligata (tecnicamente) ad effettuare rilasci semestrali per coprire le varie versioni dei sistemi operativi mobile (iOS e Android in primis).</div>
<div>
Da un punto di vista economico quindi l'acquisto delle singole release comincia ad avere poco senso e se a questo aggiungiamo gli importanti bonus associati alla subscription (potete far riferimento a <a href="https://www.embarcadero.com/products/rad-studio/update-subscription" target="_blank">questa pagina</a>), possiamo concludere che ad ogni acquisto di una licenza Delphi o C++ andrebbe sempre associata l’opzione “Update Subscription”.<br />
<br /></div>
<div>
<h4>
Delphi 10.1 (Big Ben)</h4>
<div>
<br /></div>
<div>
Vediamo gli aspetti tecnici della roadmap: parlando di Big Ben, il team di sviluppo si è concentrato sull’esperienza dell’utente nell’installazione e in generale sulla qualità del prodotto. La prima novità sarà apprezzata da numerosi utenti, infatti un processo di installazione più snello e moderno risulta più in linea con un prodotto che ormai ha raggiunto notevoli dimensioni e complessità.</div>
</div>
<div>
<br />
Le altre novità dovrebbero essere:<br />
<ul>
<li>Form designer floating sia per progetti VCL che FMX, per molti un piacevole ritorno al passato! sento già i numerosi "io l'avevo detto" :-)</li>
<li>Operazioni di refactoring in C++ </li>
<li>FireUI App Preview, ovvero la possibilità di vedere un’anteprima delle form su qualsiasi target (desktop oppure mobile) mentre si sta lavorando nell’IDE </li>
<li>Migliorie FireMonkey per progetti Windows, Mac, mobile </li>
<ul>
<li>Nuovo componente Address Book /Contatti </li>
<li>Un nuovo / migliorato Style Designer e ListView Items Designer </li>
<li>Animazioni touch per la ListView, miglioramenti sulle griglie, supporto ai tasti rapidi Windows , miglior gestione font </li>
</ul>
<li>Miglioramenti sul Multi-Device Designer </li>
<ul>
<li>Stili per Android e nuove viste FireUI </li>
</ul>
<li>Supporto per IoT (Internet of Things) </li>
<ul>
<li>Supporto per Bluetooth LE migliorato </li>
<li>Framework per la connettività IoT </li>
<li>ThingPoint - Enterprise access points per i dispositivi IoT (estende le funzionalità EMS) </li>
</ul>
<li>Window/VCL </li>
<ul>
<li>Supporto Bluetooth LE per Windows 10 </li>
<li>Miglioramenti al bridge per WinRT </li>
<li>Supporto DirectX 12 </li>
</ul>
<li>Delphi Compiler & Language </li>
<ul>
<li>Supporto per le stringhe Utf8String su tutte le piattaforme </li>
<li>Supporto per per [weak] e [unsafe] per i reference ad interfacce per i compilatori non-ARC </li>
</ul>
<li>C++ CLANG 3.3 su tutte le piattaforme </li>
<li>Aggiornamenti driver FireDAC (Oracle, DB2, Interbase, SQLite e Advantage) </li>
</ul>
Due parole su questa lunga ed interessante lista di novità: <br />
<br />
Interessante il supporto nativo (del compilatore) per le stringhe UTF8, una feature che semplificherà la vita agli sviluppatori web/rest.<br />
Non vedo l’ora di provare il nuovo form designer floating (un po’ alla Delphi 7) anche secondo me (come so tanti di voi) il float designer delle prime versione di Delphi era strutturalmente migliore per la progettazione di form di una certa dimensione.<br />
Buono il supporto Bluetooth LE per Windows 10 ed in generale l’ondata di novità relative al mondo (sempre più in espansione) degli IoT. In altre parole: Delphi 10.1 sarà davvero una buona release !</div>
<div>
<br />
<h4>
Delphi 10.2 (Godzilla)</h4>
<div>
<br /></div>
Passando a Godzilla possiamo dire senza dubbi che la novità davvero eclatante è l'introduzione di una nuova piattaforma: Linux Intel 64bit<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPaz9Imbh3knJpbafOWV6zjec6DIp9VfELFVLpiAk02vQY2zAYBaP6fXQnDIhPhtX-sbyCvbnF2egjZVrtAhZXi2v5iMdCqpZmwybjhYw93fo0YSDapMiRpmqKH9gz8sYZx-nAnQjtNgI/s1600/tux_small.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPaz9Imbh3knJpbafOWV6zjec6DIp9VfELFVLpiAk02vQY2zAYBaP6fXQnDIhPhtX-sbyCvbnF2egjZVrtAhZXi2v5iMdCqpZmwybjhYw93fo0YSDapMiRpmqKH9gz8sYZx-nAnQjtNgI/s200/tux_small.png" width="180" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Supporto Linux 64bit!</td></tr>
</tbody></table>
<br />
Noi (Wintech Italia) aspettiamo il supporto per Linux fin dai tempi di Kylix! (che internamente usiamo ancora).<br />
Il supporto a Linux sarà solo per gli applicativi server, non per la parte visuale. Ad onor del vero dobbiamo dire che la prima difficoltà nell’introdurre la programmazione GUI in Linux è che di GUI non ne esiste solo una, ma tante (KDE, Gnome, Xfce, ecc…) e quindi Embarcadero si troverebbe a dover moltiplicare gli sforzi per raggiungere una fetta consistente di utenti, quindi per adesso basta e avanza la parte server!<br />
<br />
Il supporto Linux Server dovrebbe essere rivolto a queste tecnologie:<br />
<ul>
<li>Moduli Apache in WebBroker</li>
<li>Progetti DataSnap e EMS </li>
<li>Accesso ai database su Linux con FireDAC </li>
<li>Applicativi console con supporto IoT</li>
</ul>
Le prime due distribuzioni supportate saranno Ubuntu Server & RedHat Enterprise (ma gliapplicativi console sviluppati dovrebbero girare su tutte le versioni di Linux 64 intel). Lo sviluppo come sempre sarà sotto Windows con il cross-compiler, deploy e debug via PAServer. I compilatori Linux saranno quindi per macchine Intel 64-bit, basati sulla tecnologia LLVM e con la gestione di memoria basata su ARC. </div>
<div>
Embarcadero ha anche promesso che ci farà provare in anteprima una preview tecnica del compilatore Linux prima dell’uscita del prodotto, quindi non ci resta che... aspettare (speriamo poco :-)</div>
<div>
<br /></div>
<div>
Le altre novità di Delphi 10.2 dovrebbero essere<br />
<ul>
<li>Migliorie sull’IDE e sulla parte degli stili </li>
<li>Aggiornamento di tutte le versioni dei compilatori C++ compilers alle nuove versioni di Clang </li>
<li>Continuo lavoro sul componente ormai chiave per l’IDE, l’installazione e per la gestione dei pacchetti: GetIt </li>
<li>Nuovi controlli VCL per Windows 10 </li>
<li>Nuovi controlli FireMonkey nativi per le piattaforme supportate </li>
<li>Supporto a Windows 10 Centennial (ovviamente dipende se Microsoft porterà avanti questi progetto) </li>
<li>Supporto per le nuove versioni (già in fase di sviluppo da Apple e google) di iOS e Android </li>
</ul>
<div>
<br /></div>
<h4>
Conclusione</h4>
<div>
<br /></div>
Che dire, Embarcadero ci ha riversato addosso una carico di novità notevole, novità che si realizzeranno nel corso del 2016 con due release importanti e sicuramente da non mancare!<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifhim23tsThZnhw4mxMToclj9lW1TykuSjReOkbVQT8nfUWXtOwQ8KltbtqK_EUiYcq1hm7F8LFwsdpyvrY9M8vrmLw-nKPRhNKBkVcROALGWKPLpcun3N8hBuJCxeDEcjF0Kp6VFADMc/s1600/firma.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifhim23tsThZnhw4mxMToclj9lW1TykuSjReOkbVQT8nfUWXtOwQ8KltbtqK_EUiYcq1hm7F8LFwsdpyvrY9M8vrmLw-nKPRhNKBkVcROALGWKPLpcun3N8hBuJCxeDEcjF0Kp6VFADMc/s1600/firma.png" /></a></div>
<br /></div>
</div>
Paolo Rossihttp://www.blogger.com/profile/09956628024928838702noreply@blogger.com029021 Bettola PC, Italy44.776523399999988 9.605883100000028244.73144289999999 9.525202100000028 44.821603899999985 9.6865641000000284tag:blogger.com,1999:blog-4261051967240266070.post-74019076383417886622015-10-19T09:19:00.003+02:002015-10-19T11:51:49.587+02:00Disponibili i replay della CodeRage X!Anche se ancora non c'è un annuncio ufficiale (probabilmente qualche video è ancora in fase di upload), per molte sessioni della CodeRage X (conclusasi settimana scorsa) sono disponibili i replay.<br />
<br />
Trovate la playlist Delphi sul canale YouTube di Embarcadero <a href="https://www.youtube.com/playlist?list=PLwUPJvR9mZHjFcs6XxCU14X3hxGk2shNF" target="_blank">a questo link</a>.<br />
Inutile dire che la quantità di materiale tecnico disponibile è impressionante e copre una ampia gamma di argomenti.<br />
<br />
C'è anche il replay della mia sessione su TFrameStand, <a href="http://www.andreamagni.eu/wp/2015/10/coderage-x-replays-available/" target="_blank">potete trovare maggiori dettagli e il link al video sul mio blog</a>.<br />
<br />
<b><span style="color: red;">Update:</span></b> <a href="http://community.embarcadero.com/blogs/entry/coderage-x-resources-for-c-and-object-pascal-tracks#tframestand-cpp" target="_blank">a questa pagina</a> trovate alcune risorse utili relative alle varie sessioni della CodeRage X (link vari, download di esempi mostrati ecc).<br />
<br />
A presto,<br />
AndreaAnonymoushttp://www.blogger.com/profile/15556612482279148062noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-1830652115492064752015-10-15T11:54:00.002+02:002015-10-15T11:54:36.036+02:00CodeRage X - Giovedì 15 Ottobre<br />
Eccoci arrivati all'ultimo giorno della CodeRage X, ecco le sessioni di oggi che vi segnalo:<br />
<br />
<br />
<ol>
<li>14:00, FastReport Deep Dive: Build Efficient Multi-Thread Reporting</li>
<li>16:00, Parallel Programming Deep Dive: Task Monitoring, Resource Locking, Thread Pool, Design Patterns and more!</li>
<li>17:00, Simplify MultiThreading with System.Threading for Mobile and Desktop Apps</li>
<li>18:00, TFrameStand Deep Dive: Build Visually Stunning and Consistent UI/UX with FMX Frames</li>
<li>20:00, Background Tasks and Inter-App Communication with Android Services and Intents</li>
<li>21:00, Create IoT solutions with Delphi and Arduino</li>
<li>22:00, Debug Tips and Tricks: Effective Multi-Device App Debugging Strategies for Win32, Win64, OS X, iOS and Android</li>
<li>23:00, NoSQL with MongoDB and FireDAC - Part 1 e 2</li>
</ol>
<div>
Come vedete oggi giornata piena! ;-)</div>
<div>
Vi ricordo la <b>mia</b> sessione su TFrameStand (alle 18:00)!</div>
<br />
<br />
A presto,<br />
<br />
AndreaAnonymoushttp://www.blogger.com/profile/15556612482279148062noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-78514487199475500792015-10-14T06:25:00.001+02:002015-10-14T06:25:11.138+02:00CodeRage X - Mercoledì 14 OttobreEcco l'elenco delle mie sessioni da non perdere per oggi (con l'ora italiana):<br />
<ol>
<li>16:00, Simplify Parallel Programming with Patterns</li>
<li>17:00, Deep Dive on Beacons and Bluetooth LE with R&D</li>
<li>18:00, Hands-on with the Gnostice Document-Processing Framework</li>
<li>19:00, BeaconFence Deep Dive: Beacon App Solution Development</li>
<li>22:00, Composite VCL Controls Deep Dive: Techniques for Manual Creation, Component Templates, Frame Components, and Sub-Components</li>
<li>23:00, Step-by-Step Guide to Logging Custom Data in CodeSite</li>
<li>01:00 (Giovedì), Integrate New WinRT Windows 10 Platform Features Into Your App</li>
</ol>
<div>
Vi ricordo che c'è una pagina con le offerte che alcuni vendor offrono in occasione della CodeRage X: <a href="http://www.embarcadero.com/coderage/coderage-exhibit-hall">http://www.embarcadero.com/coderage/coderage-exhibit-hall</a><br />
<br />
A presto!</div>
<div>
<br /></div>
<div>
Andrea<br />
<br />
PS: oggi non potrò essere online ma per fortuna ci sono i replay! ;-)</div>
Anonymoushttp://www.blogger.com/profile/15556612482279148062noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-2671529191700761472015-10-13T14:08:00.000+02:002015-10-13T14:08:04.413+02:00CodeRage X - Martedì 13 OttobreSta per cominciare la <a href="http://www.embarcadero.com/coderage" target="_blank">CodeRage X</a>, la conferenza gratuita, online, di <a href="http://www.embarcadero.com/" target="_blank">Embarcadero Technologies</a> rivolta a tutti gli sviluppatori Delphi e C++ Builder.<br />
<br />
Oggi, domani e giovedì sarà un susseguirsi di sessioni tecniche (di un'ora circa) tenute dal product management Embarcadero, da personale Embarcadero, dai Partner e da esperti da tutto il mondo.<br />
<br />
<a href="http://www.embarcadero.com/coderage/coderage-x-op-sessions" target="_blank">Qui trovate il programma completo</a> della conferenza (tutti e 3 i giorni) e di seguito trovate la mia personale lista di sessioni da non perdere (con l'ora italiana):<br />
<br />
<ol>
<li>14:00, Delphi Product Address</li>
<li>17:00, Update Your Apps UI/UX with the All New Windows 10 Look and Feel</li>
<li>18:00, What's New in FireMonkey 10 Seattle</li>
<li>22:00, FastReport Beyond Basics: Essential Reporting Strategies</li>
<li>23:00, Run-Time Library Deep Dive: New Features, Improvements, and Changes</li>
<li>00:00 (Mercoledì 14), Flexible and Supercharged Key Hashing with TDictionary</li>
</ol>
<div>
Comincia, buona conference a tutti!</div>
<div>
<br /></div>
<div>
Andrea</div>
Anonymoushttp://www.blogger.com/profile/15556612482279148062noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-79581694124879438542015-09-28T16:37:00.004+02:002015-10-01T12:11:46.548+02:00CodeRage X: la conferenza online di EmbarcaderoLa <a href="http://embt.co/CodeRage9" target="_blank">prossima edizione di CodeRage</a>, la conferenza online di <a href="http://www.embarcadero.com/" target="_blank">Embarcadero</a>, si terrà <b>dal 13 al 15 Ottobre</b>!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.embarcadero.com/images/coderage-X/coderangex_970x200px_ctaregisternow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.embarcadero.com/images/coderage-X/coderangex_970x200px_ctaregisternow.png" height="81" width="400" /></a></div>
<br />
Non perdete l'occasione di prendere parte (online) a tante interessanti sessioni su svariati argomenti (e sulle novità della versione 10 Seattle).<br />
<br />
Io darò una sessione su <a href="http://blog.delphiedintorni.it/2015/09/tframestand-firemonkey-tframe.html" target="_blank">TFrameStand, il componente FMX che sto sviluppando,</a> <b>Giovedì 15 Ottobre (ore 9 PDT)</b>, <a href="http://community.embarcadero.com/blogs/entry/coderage-x-object-pascal-track-schedule?utm_content=buffer8b2e6" target="_blank">qui trovate la programmazione attuale per la traccia Object Pascal</a>.<br />
<br />
Time widget per la mia sessione su TFrameStand (potrebbe ancora subire variazioni):<br />
<center>
<span class="wtb-ew-v1" style="display: inline-block; width: 560px;"><script src="http://www.worldtimebuddy.com/event_widget.js?h=8&md=10/15/2015&mt=9.00&ml=1.00&sts=0&sln=0&wt=ew-ltc"></script><i><a href="http://www.worldtimebuddy.com/" target="_blank">Time converter</a> at worldtimebuddy.com</i><noscript><a href="http://www.worldtimebuddy.com/">Time converter</a> at worldtimebuddy.com</noscript><script>// <![CDATA[
window[wtb_event_widgets.pop()].init()
// ]]></script></span>
</center>
<br />
Potete registrarvi al seguente link: <a href="http://forms.embarcadero.com/CodeRageXRegistration">http://forms.embarcadero.com/CodeRageXRegistration</a><br />
<br />
A presto,<br />
AndreaAnonymoushttp://www.blogger.com/profile/15556612482279148062noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-22514810742357874332015-09-21T10:22:00.001+02:002015-09-21T10:22:54.921+02:00TFrameStand: FireMonkey TFrame all'ennesima potenza!<div style="text-align: center;">
<a href="http://wp.me/p6Ioer-K" target="_blank">English version available at my personal blog</a>.</div>
<br />
Questo post è dedicato a <b>TFrameStand</b>: un componente per FireMonkey che ho sviluppato in questi ultimi mesi (nel mio tempo libero).<br />
<br />
Prima di tutto, come reperirlo: il componente (e alcune demo) sono <a href="https://github.com/andrea-magni/TFrameStand" target="_blank">disponibili su GitHub</a> e potete usarlo liberamente. Sull'ultimo numero (45-46) di <a href="http://www.blaisepascal.eu/" target="_blank">Blaise Pascal Magazine</a> trovate un mio articolo che spiega i fondamentali e illustra due delle demo incluse attualmente nel repository.<br />
<br />
<span style="color: #999999;">NB: gran parte del codice è stato sviluppato con XE8, ultimamente sto usando la versione 10 Seattle (quindi non è testato su versioni precedenti anche se dovrebbe essere compatibile anche con XE7).</span><br />
<h3>
Introduzione</h3>
<div>
<div>
Soprattutto durante lo sviluppo di applicazioni mobile, molti sviluppatori semplicemente aggiungono un sacco di controlli al form principale del progetto (che molte volte è anche l'unica form presente). Questo porta rapidamente <b>a problemi di manutenzione</b> del progetto, in primo luogo perché la form di solito diventa troppo affollata per essere modificata facilmente nel form designer e poi perché questo approccio non promuovere il riutilizzo degli elementi (codice e interfaccia utente) della vostra applicazione.</div>
<div>
<br /></div>
<div>
Il concetto di <b>TFrame</b> è stato introdotto molto tempo fa (anche nella VCL) per fornire allo sviluppatore la possibilità di legare insieme alcuni elementi dell'interfaccia utente (componenti) e alcuni comportamenti (codice) in un'unica unità, riutilizzabile. Questo è un bene perché è possibile suddividere l'applicazione in porzioni che possono essere progettate individualmente ed eventualmente riutilizzate (anche in altre applicazioni!) Semplicemente mettendo un'istanza di un TFrame su un oggetto contenitore (può essere una form, una pagina di un TTabControl o qualsiasi altro componente visuale FMX ...).</div>
<div>
<br /></div>
<div>
Un tipico esempio in cui un approccio a TFrame può semplificare molto è quando è possibile scomporre la vostra applicazione mobile in un insieme di "viste" da mostrare all'utente in base allo stato dell'applicazione stessa. È quindi possibile implementare le funzionalità applicative indipendentemente, mostrando questa o quella "vista" (TFrame) a seconda dello stato dell'applicazione stessa (come si farebbe con un TTabControl, usando una pagina diversa per ogni "vista").</div>
<div>
<br /></div>
<div>
TFrameStand nasce in questo contesto e permette di andare anche un po' oltre, dandovi l'opportunità di avere <b>un livello intermedio</b> tra il TFrame e l'oggetto contenitore. Questo strato intermedio (lo "<b>stand</b>", d'ora in poi) può essere visto come la porzione visuale (dell'interfaccia utente) che non è strettamente legata alle finalità del TFrame che si sta mostrando, ma è piuttosto legata al modo in cui il TFrame viene presentato all'utente. </div>
<div>
Questi "stand" sono definiti utilizzando una funzionalità FireMonkey molto basilare: gli <b>stili</b>! Ogni componente TFrameStand dispone di una proprietà StyleBook, un reference che può essere utilizzato per definire la raccolta di stand disponibili. Insieme ad un paio di semplici <b>convenzioni di nomenclatura</b> sono alla base del funzionamento del componente (ad esempio, per definire il punto esatto dove volete che il vostro TFrame sia incorporato nello stand occorre dare un nome preciso "container" al componente visuale che deve agire da parent del TFrame).</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5siARlmkEp76aUjTFtRE3p_SaLkb9-MigsMR2pS_-en1X1qCd62sESzsJ0MMe6oRnOFDJZ2YWxHAc5IeqhXqcBR9LmRKNSaHTQ-HKgOs1bjKt04N2D1bEKhvHc50J6FA9QDRrw83zSFeW/s1600/TFrameStand+-+Schema+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5siARlmkEp76aUjTFtRE3p_SaLkb9-MigsMR2pS_-en1X1qCd62sESzsJ0MMe6oRnOFDJZ2YWxHAc5IeqhXqcBR9LmRKNSaHTQ-HKgOs1bjKt04N2D1bEKhvHc50J6FA9QDRrw83zSFeW/s1600/TFrameStand+-+Schema+1.png" /></a></div>
<h3>
Stand e TFrames</h3>
<div>
Uno degli aspetti chiave di TFrameStand è che consente di <b>riutilizzare</b> uno stand con diverse classi TFrame discendenti e anche di fare l'opposto, cioè, mostrare la stessa classe TFrame usando diversi stand. In entrambi i casi, questo permette di ottenere un buon livello di <b>coerenza visuale</b> nella vostra applicazione (e/o tra diverse applicazioni), a beneficio dell'esperienza utente.</div>
<h4>
Stesso stand, diversi TFrame</h4>
<div>
Per esempio, immaginate di avere uno stand che implementi un "modo" per mostrare un TFrame, ad esempio con un <a href="https://en.wikipedia.org/wiki/Lightbox_(JavaScript)" target="_blank">effetto LightBox</a>: sarete quindi in grado di mostrare contenuti diversi (istanze TFrame diverse) utilizzando lo stesso effetto visivo (usando uno stand "lightbox"). I vantaggi sono evidenti, ad esempio, è necessario implementare l'effetto visivo (stand/supporto) solo una volta e poi si può riutilizzare e, così facendo, ogni cambiamento (miglioramento) realizzato sullo stand interesserà ogni parte della vostra applicazione che lo utilizza (coerenza!).</div>
<h4>
Stesso TFrame, diversi stand</h4>
<div>
<div>
Immaginate di avere una serie di stand che aiutino l'utente a riconoscere il contesto. Ad esempio, si può avere uno stand che indichi chiaramente che il contenuto è legato a una notifica di errore, un altro stand per le situazioni di attenzione (warning) e un altro ancora quando è richiesta l'azione dell'utente (conferme, scelte, e così via). Se, ad esempio, si dispone di un TFrame specifico per eseguire alcuni compiti e visualizzare i risultati per l'utente, è possibile che lo vogliate mostrare all'utente utilizzando diverse accezioni (stand diversi!). </div>
<div>
Tenete presente che, una volta implementati stand per ogni accezione, è possibile utilizzarli con qualsiasi TFrame (non sono richieste parentele o altre relazioni) e che potete scegliere di volta in volta, quale accezione usare (e l'istanza TFrame ha un modo per capire con quale accezione è stato visualizzato, nel caso dovesse essere significativo).</div>
<div>
<br /></div>
<div>
In un'applicazione reale, molte situazioni ricadono in queste due categorie o in una via di mezzo. Molto dipende dal criterio scelto per scomporre la vostra applicazione usando i TFrame.</div>
</div>
<h3>
Funzionalità</h3>
<div>
<div>
Finora, abbiamo parlato di un paio dei vantaggi di questo approccio, che sono: scomporre la complessità di un'applicazione utilizzando dei TFrame e l'utilizzo di componenti TFrameStand per scomporre in qualche modo la modalità con cui il TFrame viene mostrato rispetto al contenuto specifico del TFrame stesso.</div>
<div>
<br /></div>
<div>
Ci sono alcuni altri benefici quando si utilizza TFrameStand, ecco un elenco dei principali:</div>
</div>
<div>
<div>
<ol>
<li>si può lavorare a <b>design-time</b> sia sul TFrame che sullo stand (o sugli stand);</li>
<li>vi è un supporto integrato per <b>eseguire un task in background</b> (utilizzando la Parallel Programming Library internamente) e nel frattempo mostrare una opportuna interfaccia grafica (stand + TFrame) all'utente; una volta che l'operazione è stata completata, questa "form di attesa" può essere facilmente nascosta (con un po' di programmazione asincrona molto semplificata);</li>
<li>TFrameStand è in grado di <b>avviare automaticamente alcune animazioni</b> (oggetti TAnimation e discendenti) contenute nella definizione dello stand o nell'istanza TFrame; Sono supportati attualmente due eventi: OnShow e OnHide (questo significa che è possibile utilizzare transizioni animate nel processo di mostrare e nascondere gli stand e i TFrame, facilmente e senza dover scrivere codice);</li>
<li>vi è una (semplice) <b>meccanismo di dependency injection che permette di ottenere facilmente un riferimento agli oggetti di contesto</b> anche nel codice applicativo specifico di ogni TFrame da mostrare; questo significa che si è in grado, per esempio, di nascondere (o chiudere) lo stand da un pulsante sul TFrame incorporato o di farlo a livello di programmazione nel codice del TFrame;</li>
<li>c'è <b>un modo per rappresentare comportamenti condivisi (pezzi di codice, azioni)</b> attraverso diverse combinazioni di stand / TFrame, per non duplicarle solo per via della necessità di utilizzare uno stand specifico o una classe TFrame specifica;</li>
<li>c'è un modo (altamente personalizzabile) per <b>sostituire la classe TFrame realmente utilizzata in fase di esecuzione</b>; questo significa che è possibile sviluppare considerando una classe TFrame "progenitrice" e avere poi a runtime una istanza di una classe discendente, selezionata in base ad un algoritmo completamente personalizzabile (per esempio, si potrebbe decidere di utilizzare classi discendenti diverse a seconda della piattaforma d'esecuzione);</li>
</ol>
</div>
</div>
<div>
<div>
Scriverò altri blog post per illustrare queste funzionalità, ma se siete impazienti (e spero che lo siate) sentitevi liberi di <b>dare un'occhiata ai progetti demo</b> contenuti nel repository GitHub o almeno <b>ai quattro piccoli video</b> (gif animate, in realtà) in fondo a questo blog post. </div>
<div>
La maggior parte delle funzionalità principali sono coperti dalle demo e ne svilupperò altre a breve.</div>
</div>
<div>
<br /></div>
<div>
Infine, si può notare che un paio di demo sono legate al <b>Material Design di Google per Android</b>: usando TFrameStand è possibile (più facile) implementare alcuni elementi di Material Design nelle applicazioni FMX (nella demo ViewAndDialogs è implementata una transizione prendendo spunto dalle linee guida ufficiali nella documentazione Google), un argomento molto richiesto nel corso della mia attività di formatore e consulente per altri sviluppatori Delphi.</div>
<div>
<br /></div>
<div>
Ecco i "video" con le demo in esecuzione (su Win32):<br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin4Q31ud6cJhkXipmJArCgNTu3L-9-5gHq6MN3fUG2TXMdIhGfEct56wYlEhziANbjh3J4Z1HblFte67qb8GoBy1a6oTBc9nVnKzdK4wszeuIZrL3gKveXgJlul9etEvbUKddPusGOWv4F/s1600/demos_wait.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin4Q31ud6cJhkXipmJArCgNTu3L-9-5gHq6MN3fUG2TXMdIhGfEct56wYlEhziANbjh3J4Z1HblFte67qb8GoBy1a6oTBc9nVnKzdK4wszeuIZrL3gKveXgJlul9etEvbUKddPusGOWv4F/s320/demos_wait.gif" width="291" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTEaWwYHtu1oGtm7ZS_ZWryWhTh3eF0t6bfFV3-zZv7yeFa9E_XzlI1la1pMpSwx3H0Xh7NlLxlwvRfm9WnYWEclXWohZnV9_h4RBu-sftILC0KA_Qk23UiZn8zWtlY4QaVyUTR7erzC3g/s1600/demos_lightbox.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTEaWwYHtu1oGtm7ZS_ZWryWhTh3eF0t6bfFV3-zZv7yeFa9E_XzlI1la1pMpSwx3H0Xh7NlLxlwvRfm9WnYWEclXWohZnV9_h4RBu-sftILC0KA_Qk23UiZn8zWtlY4QaVyUTR7erzC3g/s320/demos_lightbox.gif" width="291" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0500_u46Bml-iIrFOa0QiWhG5UCYrINOxvyyBpa_ipNBm7rYlM-Lthqcr1LuJvu4QjV6PNZg6u_BQKB28kLrvThqK5XB6eX4__7N80e7aH3-4WXLQvEWQg1buGwnSWxWYInvRYvtoNpBB/s1600/demos_materialbutton.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0500_u46Bml-iIrFOa0QiWhG5UCYrINOxvyyBpa_ipNBm7rYlM-Lthqcr1LuJvu4QjV6PNZg6u_BQKB28kLrvThqK5XB6eX4__7N80e7aH3-4WXLQvEWQg1buGwnSWxWYInvRYvtoNpBB/s320/demos_materialbutton.gif" width="291" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4eOljuzIHdG_TXGREu2Ar_gKdGpDlac6s-2EpfemiKRNMUZXsyUXpzdSuc7gxKbWDX4RvD1fseRsecdAQQyKJbpnDYTu4ajuP7C7ISD0Qf3AkfJW0mc2SYbFbshlrp-V2zs_VaaHYRkM6/s1600/demos_viewsdialogs.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4eOljuzIHdG_TXGREu2Ar_gKdGpDlac6s-2EpfemiKRNMUZXsyUXpzdSuc7gxKbWDX4RvD1fseRsecdAQQyKJbpnDYTu4ajuP7C7ISD0Qf3AkfJW0mc2SYbFbshlrp-V2zs_VaaHYRkM6/s320/demos_viewsdialogs.gif" width="291" /></a></div>
<br />
Spero vi piaccia (e non esitate a esprimere il vostro parere!)<br />
<br />
Andrea<br />
<br />
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/15556612482279148062noreply@blogger.com0tag:blogger.com,1999:blog-4261051967240266070.post-30972318120688767362015-09-17T17:43:00.003+02:002015-09-17T17:43:52.436+02:00PasCon 2015: qualche fotografia [Link]<br />
Martedì ho partecipato alla PasCon 2015 a Leida (in Olanda). Trovate un mio blog post a riguardo e qualche fotografie dell'evento e dei dintorni <a href="http://www.andreamagni.eu/wp/2015/09/pascon-2015-some-pictures/" target="_blank">a questo link</a>.<br />
<br />
A presto,<br />
AndreaAnonymoushttp://www.blogger.com/profile/15556612482279148062noreply@blogger.com0