Over Danny

Delphi trainer en ontwikkelaar.

Coderage 2018 – Building Microservices and Progressive Web Apps (PWA) with Delphi

Thank you for attending my Coderage 2018 session on Building Microservices and Progressive Web Apps (PWA) with Delphi and TMS WebCore.

If you want to replay the session, please visit the Coderage 2018 page on Embarcadero Academy.

Please find the download with source and slides here:
Download source and slides
The download has been compressed with RAR with password coderage2018
and has the following SHA-256 checksum

Have fun creating your own REST microservices and PWA‘s!

Note: with newer versons of TMS WebCore you may need to change two lines of code in the file UnitJSONHelper.pas.

Weblib.REST, Weblib.JSON;

lArray := lJSONObject.GetJSONValue('result');

Additionally the no longer needed WebRunner lines in the Project file TheCounterWeb.dpr should be automatically removed when you open the project, if not remove them manually.

CodeRage 2018 – 4-6 December 2018

CodeRage 2018 is just around the corner!



The complete schedule:

This CodeRage I’m showing you how to build microservices and how to consume them from desktop, Android mobile and using a HTML / JavaScript web app. The web app uses TMS WebCore and PAS2JS, but goes beyond basic coding as it also shows you how to convert the web app to a Progressive Web App, or PWA for short

The boilerplate code is of course available for download, please use it to jump start your own software.

Oh, and the nice thing about PWA, an Android device will offer the user the option to install the web app as an actual app with an icon on the start screen. Good stuff!

Register here, it’s free but infinite value for money:

Delphi 10.3 Rio

Delphi 10.3 Rio has been released today!

The most awaited new feature is of course support for Android 8 and 9. As you may recall Google made changes to its requirements for new apps in the app store. These requirements are now all met. Please remember to also use the new PermissionsService.RequestPermissions to request permissions for the app at runtime.

If you’re into nitty gritty details, the internal coding for parameters of methods has changed, allowing better compatibility between C++ and Delphi. What it boils down to is that for 64-bit code more parameters (between 5 an up to 8 byte in size) are now passed to functions using CPU registers, where they would previously be passed as pointers to the actual data. This speeds some code up quite a bit. (sorry messed this up) using pointers to the actual data. This only influences your Delphi code if you use Assembler or direct addresses, usual pascal code needs no modification.

There are also some changes in the way that JSON is serialized. If you are using REST webservices with clients you may need to update both to Rio at the same time, to achieve interoperability. This mainly affects JSON serialization that internally uses RTTI. Its more efficient, but may break some existing code.

For the full list of new things take a look at http://docwiki.embarcadero.com/RADStudio/Rio/en/What%27s_New

Delphi Academy start volgende week

Delphi Academy is een geheel vrijblijvende en voor stagiairs, afstudeerders, scholieren gratis toegankelijk opleiding tot Delphi developer.

Delphi Academy LogoIn een eerdere meetup met Delphi MVPs hebben we het erover gehad. Zou het niet mooi zijn als er een open opleiding zou bestaan om je te scholen tot Delphi developer?

Delphi Academy is zo’n een traject, en in 3 maanden worden de deelnemers opgeleid tot junior Delphi developer. Lukt het je alles mee te doen, aan het eind weet elke werkgever; deze kanidaat weet al heel veel.

Je kunt echter ook gewoon deelnemen aan enkele van de trainingen of course en praktikum dagen. De trainingen zijn Open voor deelname vanuit het bedrijfsleven, de overige zijn voor Stage, voor stagiairs en afstudeerders of voor iedereen die affiniteit heeft met ICT en zich wil omscholen.

En ja, het is echt vrijblijvend, geen verplichtingen achteraf.

Doe je ook mee?

Meer informatie en inschrijven: https://delphiacademy.nl/

Visit to Alister Christie

While we where on vacation in New-Zeeland, Alister Christie kindly invited us over to stay at their house for a couple of days. We had a great time with Alister and Jackie, we absolutely loved our stay. Their patch of the world is also really something special. Alister also made some time for an interview, he really makes full use of each day. Did you know Alister makes some terrific wines at home? They where absolutely delicious. Hope to visit again sometime!.

Alister Christie

Alister Christie

We also organized some meetups with Delphi developers in Auckland, Wellington and Christchurch, which were great. Its fun to see such diversity and ingenuity in using Delphi in all kinds of software. On these meetups Alister presented on the PPL and I introduced the TMS Web Core. TMS Web Core can really be a game changer; as its very easy to get into web page based apps using this technology. They can also easily be made Progressuve Web App compliant.

It was great to meet all these nice people in New-Zealand!


Delphi Meetup Web Development bij TMS op 12 juni 2018

Het is al bijna zover, de volgende Delphi Meetup. Dit keer in Wevelgem op het kantoor van TMS Software.

Bruno Fierens laat zien hoe je vanuit de Delphi IDE, met de Delphi taal en componenten, op een een RAD manier web user-interfaces kunt bouwen. Ook zie je hoe vanuit die Delphi web applicaties op eenvoudig bestaande Javascript libraries, zoals bijvoorbeeld jQuery, gebruik kan worden gemaakt van user-interface controls. Als laatste laat hij zien hoe dit samen met Delphi databinding te gebruiken is..

In aansluiting op de sessie van Bruno combineert Danny Wind in een use case een aantal technologieën om je te laten zien hoe eenvoudig het is om gebruik te maken van RADical Web. Danny zal een op REST gebaseerde micro-service back-end gebruiken en een  front-end die zowel RADical Web als Apps (Android/iOS) gebruikt. En dit alles gewoon met Delphi Code!

Meer info vindt je hier:

Get your App in the Google Play store before August 1, 2018

Google is changing its requirements for the target SDK API level. Starting from August 1st any new app uploaded to the Play Store must target API level 26 (Android 8.0). If you have an existing app in the Play Store you’ll have some more time, as updates to the app must only meet this same requirement on November 1st.

This means that if you are currently developing a new Delphi Android App you should consider uploading it into the Play Store before August 1st. Why? The current version of Delphi uses a target SDK of API level 14. If you upload your new app now, this buys you some time until November 1st to become API level 26 compliant with an app update.

I’m working on an API level 26 issue right now, where I’m extending the JContext of Delphi with some of the new API level 26 features for starting a foreground service. This is needed to comply with the new background execution limits introduced in Oreo. This works quite well, and does not require a lot of code.

If you can not upload your app to the Play Store before August 1st, then this blog post from Dave at Delphi Worlds may help you further. It changes some of the Delphi code to achieve (partial) API level 26 compliance.

Delphi 10 Tokyo Update and Firemonkey-Android Power training March-2018

On March 8th and 9th we have the Delphi 10 Tokyo Firemonkey and Android Power training planned in Etten-Leur in the Netherlands. In just two days you will learn how to develop an Android App in Delphi, with high level features in the GUI down to high tech stuff when interacting with the Java side. This training is available in both English and Dutch. Registration can be found here.

A week after, on March 15th and 16th, we have the Delphi 10 Tokyo Update training in our agenda. As one of the previous attendees told me a couple of weeks after attending this training “I’ve learned so many new things in these two days; I especially liked the (PPL) TTasks chapter”. This one is only available in Dutch, registration can be found here. Note: due to a conflict in planning with an on-site training this open training has been moved to April 19th and 20th.

Meltdown, Spectre and Delphi

Don’t panic. 😉

All applications are vulnerable to Spectre attacks.
Unfortunately this also includes applications written in Delphi. Does this mean Delphi developers have been on high alert the past few weeks? Well, it all depends. If you’re creating software for a high-risk business with a large user base and public deployment, then probably yes. But in most cases it’s a no.

As you may already know, its sibling called Meltdown (Rogue data cache load, CVE-2017-5754), can be completely fixed with updates. Most of these are already available, so update your computers. Use some care though, some of these patches have been reported to cause reboots and blue screens on specific CPU versions from both Intel and for AMD as reported by Microsoft.

However, Spectre attacks can not really be mitigated with microcode updates or operating system updates alone. That’s because it attacks at the way that most CPU’s optimize code execution, which is not something you can simply turn off. The simplest CPU’s are the only ones that are not affected, as you can read in this rather easy to read article on RaspberryPI.

The Spectre attack requires the hacker to construct a specific attack for each specific piece of software. Setting this up takes some work as you need to trick the existing application to leak its information via a side channel attack through repeated iterations of having it call into specific instructions. In other words, suppose a vulnerable instruction sequence would be triggered by a click on a specific “button”; the hacker would have to write some code that would keep clicking this “button” while data is leaked from the applications protected memory locations.

This means the hacker would have to analyze the application beforehand and write an exploit specifically for this application, and somehow persuade the end-user to run this exploit side by side with the vulnerable application. This takes some serious effort. In fact, if you can already get such an exploit to run in the same user space, there are many more ways of attack that are far easier to perform. This means that a Delphi (or any other)  application with a small user base, say below 10.000 users and/or those without public deployment (not in any app store) have a relatively low risk of being attacked. It’s still possible though, just not very likely.

Does this mean we could just do nothing, like go Niksen? Well, that’s not exactly what I meant. What if someone analyzes the compiled code for one of the most popular used components of Delphi and writes an exploit for that? This hasn’t happened yet, but given time, someone will find a way to more easily exploit Spectre in a generic fashion. Need an example? The past weeks you could already exploit Spectre by just running JavaScript inside a browser, as described in the paper. Yes, this does mean that the Delphi TWebBrowser component, which is just a window to the underlying OS browser architecture, was vulnerable. Hopefully you’ve already got your browsers updated.

Ok, so what can we do? For variant 1 of Spectre (Bounds-Check bypass, CVE-2017-5753) Intel suggests using a LFENCE instruction. There is a compiler switch, that was previously undocumented that results in adding these LFENCE instructions for the MSVC compiler. In Delphi you can just add LFENCE instructions in your code using


but I’m not sure if you can place these LFENCE instructions in between pascal statements at exactly the right positions for this to always work out as we want. If I translate the example Microsoft uses for Bounds-Check bypass into Delphi:

if (untrusted_index < array1_length) then
  value := array1[untrusted_index];
  value2 := array2[value * 64];

this results in the following view in the disassembler:

This looks OK, the LFENCE is placed at the same location as in the Microsoft example, so you could modify your existing sources with this code. Still, it’s probably better if adding these LFENCE instructions were handled by the compiler.

Google has proposed a solution on a compiler level to prevent the branch-target-injection variant of Spectre (CVE-2017-5715) using retpoline. Open source versions of the code have already been submitted to LLVM and GCC. However, there is no easy way to modify your Delphi code to introduce this solution. The indirect branch that is vulnerable is generated by the compiler, for instance when you write polymorphic code that calls a overridden virtual method of a subclass such as described in Google’s example. For the Delphi developer that’s just one line of code, with no easy way to add this new calling construction. This one needs to be handled by the compiler and for LLVM and GCC this change is being evaluated.

If this all works out that means we will have an option to mitigate these two variations of Spectre attacks on existing applications by just recompiling that application. These solutions could become part of all compilers out there, including all of the Delphi tool chains, LLVM-based or not. My preference would be to add this as a Compiler Option similar to the one we had for the Pentium FDIV bug. Because just like the FDIV bug, Spectre will also disappear with newer CPU’s that handle things a little differently, and then you can choose to disable that option again.

If you’re into a challenge and want to know more on the details of Meltdown and Spectre I suggest reading the original posting on Googles Project Zero page.