News, Blogs, and Tips

More Delphi 10.3.2 patches and an Update on GetIt Installation

Marco Cantu - Wed, 08/14/2019 - 08:36

Just a quick blog post with some updates, in case you missed them.

2 More 10.3.2 Patches

First, there are two new patches for 10.3.2 Embarcadero made available yesterday (older one is here):

Both patches are fairly relevant and recommended to install if you are on Delphi or RAD Studio 10.3.2.

GetIt Update

There is also an update from the PM team regarding GetIt installation availability, as you can read in Sarina's blog post at The service should now respond correctly from your IDE for add-on packages.

Categories: News, Blogs, and Tips

RAD Studio 10.3.2 Runtime Packages Compatibility Patch Released

Marco Cantu - Wed, 08/14/2019 - 00:31

Embarcadero has just released a patch for RAD Studio, C++Builder and Delphi 10.3.2. The patch is available at:

Here are the readme notes:

Issue: Applications compiled with RAD Studio 10.3 or 10.3.1 and using runtime packages will not start when executed against the 10.3.2 version of the RTL runtime package.

Summary: This patch addresses a compatibility issue with mixing runtime packages built with 10.3.2 with earlier releases of Delphi or C++Builder 10.3. The platforms impacted are Win32, Win64, macOS32, and Linux64.

After applying the patch, older applications will keep running when you deploy a new application with new runtime packages. This means that the updated 10.3.2 packages are backward compatible. 

Note: A new application built in 10.3.2 will not run if executed against a 10.3.x version of the runtime packages, showing surfacing an error like 'Entry Point not Found "@System@Classes@TFieldsCache@$bcctr$qqrv"'.

The installation requires copying the content of the ZIP file to the installation folder. The complete files list is in the readme file included in the download.

Notice that this patch is critical for third-party component vendors who plan rebuilding their components with 10.3.2.

Updated on August 11th

There is now also a second patch available for Delphi 10.3.2 and related with macOS 64-bit debugging:

Categories: News, Blogs, and Tips

August 2019 RAD Studio Roadmap Udpate

Marco Cantu - Tue, 08/13/2019 - 09:06

On the Embarcadero developer community site, there is a new blog post by Sarina DuPont covering:

August 2019 Delphi Android Beta Plans & August Roadmap Update

The blog post has an update to the May 2019 roadmap and it also highlights the plans around a Delphi Android 64-bit Beta that's going to be made available soon to update subscription customers. Read the article linked above for all of the details.

Categories: News, Blogs, and Tips

Installation and GetIt Workarounds for Delphi 10.3.2 (Updated)

Marco Cantu - Thu, 08/01/2019 - 03:05

Some of the Embarcadero servers (in one of the web farms) are experiencing some severe and prolonged outage. This is affecting (among other things) Delphi 10.3.2 installation. As a temporary workaround, the company has:

We should soon have the regular GetIt-based offline installer for 10.3.2 working again with the temporary server. 

August 1st Update

We now have the ability to install 10.3.2 via GetIt using this temporary system, there is no need to change the GetIt URL manually, as it is embedded in an updated installer. And CodeCentral MyRegistered products is online again with the updated downloads.  Read more on the latest status at

Thanks for your patience and sorry again for the inconvenience. 

Categories: News, Blogs, and Tips

IDE Fix Pack 6.4.4 Hotfix for Delphi 10.3.2

Andy’s Blog and Tools - Wed, 07/31/2019 - 12:26

There was a bug in IDE Fix Pack 6.4.3 for Delphi 10.3.2 that caused the Win32 compiler to crash. The CodeGenMod.Win32.VirtFinalSealed patch didn’t work correctly. Even if the actual patch code doesn’t run without the “-x-fvs=1” compiler command line option extension specified, the hooking code failed to inject the correct code for the compiler’s version. Only Delphi 10.3.2 was affected by this bug.

Name IDE Version File Size Downloads Added IDE Fix Pack 6.4.2 2009 (UP4)IDEFixPack2009Reg64.2.7z242.75 KB781 times2019-03-23 IDE Fix Pack 6.4.2 2010 (UP5)IDEFixPack2010Reg64.2.7z237.09 KB931 times2019-03-23 IDE Fix Pack 6.4.2 XE (UP1)IDEFixPackXEReg64.2.7z221.38 KB438 times2019-03-23 IDE Fix Pack 6.4.2 XE2 (UP4+HF1)IDEFixPackXE2Reg64.2.7z316.78 KB514 times2019-03-23 IDE Fix Pack 6.4.2 XE3 (UP2)IDEFixPackXE3Reg64.2.7z257.4 KB387 times2019-03-23 IDE Fix Pack 6.4.2 XE4 (UP1)IDEFixPackXE4Reg64.2.7z260.1 KB264 times2019-03-23 IDE Fix Pack 6.4.2 XE5 (UP2)IDEFixPackXE5Reg64.2.7z257.7 KB350 times2019-03-23 IDE Fix Pack 6.4.2 XE6 (UP1)IDEFixPackXE6Reg64.2.7z423 KB303 times2019-03-23 IDE Fix Pack 6.4.2 XE7 (UP1)IDEFixPackXE7Reg64.2.7z429.48 KB457 times2019-03-23 IDE Fix Pack 6.4.2 XE8 (UP1)IDEFixPackXE8Reg64.2.7z431.7 KB371 times2019-03-23 IDE Fix Pack 6.4.2 10 Seattle (RTM/UP1)IDEFixPackD10Reg64.2.7z428.33 KB750 times2019-03-23 IDE Fix Pack 6.4.2 10.1 BerlinIDEFixPackD101Reg64.2.7z430.65 KB879 times2019-03-23 IDE Fix Pack 6.4.2 10.2 (RTM/UP1/2/3)IDEFixPackD102Reg64.2.7z426.27 KB1847 times2019-03-23 IDE Fix Pack 6.4.4 10.3 (RTM/UP1/2)IDEFixPackD103Reg64.4.7z444.98 KB623 times2019-08-01

Download (fastdcc for the command line compiler):
Name IDE Version File Size Downloads Added fastdcc 6.4.2 2009 (UP4)fastdcc2009v64.2.7z112.87 KB244 times2019-03-23 fastdcc 6.4.2 2010 (UP5)fastdcc2010v64.2.7z120.38 KB256 times2019-03-23 fastdcc 6.4.2 XE (UP1)fastdccXEv64.2.7z121.36 KB205 times2019-03-23 fastdcc 6.4.2 XE2 (UP4+HF1)fastdccXE2v64.2.7z166.48 KB205 times2019-03-23 fastdcc 6.4.2 XE3 (UP2)fastdccXE3v64.2.7z150.88 KB191 times2019-03-23 fastdcc 6.4.2 XE4 (UP1)fastdccXE4v64.2.7z153.55 KB159 times2019-03-23 fastdcc 6.4.2 XE5 (UP2)fastdccXE5v64.2.7z151.87 KB219 times2019-03-23 fastdcc 6.4.2 XE6 (UP1)fastdccXE6v64.2.7z198.67 KB182 times2019-03-23 fastdcc 6.4.2 XE7 (UP1)fastdccXE7v64.2.7z219.84 KB197 times2019-03-23 fastdcc 6.4.2 XE8 (UP1)fastdccXE8v64.2.7z224.67 KB192 times2019-03-23 fastdcc 6.4.2 10 Seattle (RTM/UP1)fastdccD10v64.2.7z219.65 KB283 times2019-03-23 fastdcc 6.4.2 10.1 BerlinfastdccD101v64.2.7z223.52 KB320 times2019-03-23 fastdcc 6.4.2 10.2 (RTM/UP1/2/3)fastdccD102v64.2.7z219.06 KB518 times2019-03-23 fastdcc 6.4.4 10.3 (RTM/UP1/2)fastdccD103v64.4.7z228.61 KB160 times2019-07-31


  • Fixed: CodeGenMod.Win32.VirtFinalSealed was broken for Delphi 10.3.2
  • Removed: IDE Insight Listbox drop shadow patch isn’t necessary for Delphi 10.3.2 anymore
Categories: News, Blogs, and Tips

The new 10.3.2 RAD Server Management Console

Marco Cantu - Fri, 07/26/2019 - 03:47

Since Embarcadero started bundling RAD Server development support with RAD Studio, there has been a little-known utility available to manage installations from a desktop client. This application was originally called EMS Desktop console, and used to ship both as a binary in RAD Studio bin folder and with complete source code in the product source code folder. In 10.3.2 we have replaced that application with a significantly re-written version, now called RAD Server Management Console and available as rsconsole.exe. You can read about it also at

A Redesigned UI

The user interface of this FireMonkey application has been significantly redesigned, as you can see in the image below. The RAD Server Console now uses FireMonkey styles and it can switch between a light and a dark style at runtime

The other significant change is the connection configuration. This was covering the top part of the screen and has now been moved out to a separate dialog box. The left panel lists the connections you have already configured (making it easy to switch between different RAD Server instances) and the dialog is used to edit connections or add new ones

An Integrated REST Debugger

In terms of new features, beside the UI and usability improvements, a key addition is the integrated version of the REST Debugger. This pane uses the current configuration and it can list the available endpoints on the specific RAD Server instance:

Once you execute a request, you can see the JSON response data and in case this has a tabular format, convert it to a table and preview is

Notice that from this pane you can also copy the components a client application will need to connect to the specific endpoint. After hitting copy in the application, you can paste the components in a client data module (for any platform), as I’ve done here:

The Integrated EmsServer.INI File Editor

The other brand new feature added to the RAD Server Console is an editor for the emsserver.ini local configuration file (this work only on a file on the local machine, we are considering a remote configuration mechanism for the future). Once you select the file, you can see the various sections and change the values in the INI file. The editor guides in filling some of the options by listing available values and checking the input:

Notice that most items have a check box on the side, this is sued to enable a feature or not. When a feature is not enabled the value is written to the INI file but it is commented out (which is the case for most default values). At runtime, RAD Server will just use its current default. If that’s fine, leave the check box disabled. If you want to use a specific value, enable the check box and enter the value.

Categories: News, Blogs, and Tips

RAD Server Improvements in RAD Studio 10.3.2

Marco Cantu - Thu, 07/25/2019 - 02:14

Over the last couple of years, Embarcadero has been expanding the features and capabilities of the RAD Server architecture, while at the same time making it more affordable (by including free deployment  licenses with different RAD Studio editions).

The recent 10.3.2 Release of RAD Studio continues in the same direction, adding several interesting features to RAD Server, which I’m going to cover in some detail in this blog post and in a second coming blog post focused on the RAD Server Console. The focus has not been the addition of totally new features, but improving each of the steps, from development to configuration, from deployment to management.

RAD Server Database Mapping Wizard

In 10.3 we introduced new components that can help you configure a RAD Server endpoint mapped to a database table. While this simplified development quite a bit, there is still a necessary step to configure these components. For this reason, we added to the RAD Server New Module Wizard a new option to select one or more database tables and let the wizard fully configure the data module of a working RAD Server package for you.

The first step is to select the new checkbox, “Database EndPoints”. While you can also keep regular sample endpoints, these are often alternative -- so I disabled the sample endpoints below:

By pressing next, you are now presented with a new page of the wizard, which allows you to pick a FireDAC connection name (out of those already configured) and provide a table filter. In the resulting list you can pick one or more tables. Here I selected a couple:

As you finish the wizard execution, the IDE will add a new data module with a FireDAC connection component and a FireDAC query with a matching EMSDataSetResource component for each of the selected tables:

These components have rather standard settings you can easily configure. The additional benefit, though, is that the component declarations are properly decorated with attributes, making this data module ready-to-use:

Now you can just build the package and run RAD Server, and you’ll be able to use URLs with the matching elements to access the exposed database data. If you just use “/one” you’ll get an error, because the module doesn’t have a global GET operation defined. But a URL like “one/employee/” will let you read the entire query:

Notice you need the final / to hit the resource matching the entire component, while adding to the URL the record key field will end up selecting an individual record for fetching, updating, or deleting, like in:

While using default configuration settings is only a good start, requiring more refinement and configuration and often custom code, having a ready to use server with database mapping is certainly very nice to get started.

Swagger API Documentation Improvements

Another feature of the wizard (see the first image above) is the ability to generate Swagger API documentation attributes for the sample methods generated. While Swagger API support has been in RAD Server for a while, it is far from simple to get it going and for this reason we decided to offer some additional guidance.

If you use the wizard and select the “API Documentation” checkbox while keeping some of the sample endpoints selected, the wizard will decorate your endpoints with proper documentation attributes:

Now if you start RAD Server and hit the /api/apidoc.yaml endpoint you can get the complete documentation for your APIs, including the specific section displayed below that matches “test” endpoint above:

Using a Swagger client you should be able to easily browse that documentation.

Improved Logging and Error Messages

In past versions the logs displayed by RAD Server would display information about registered endpoints in a fairly cryptic way, and not providing the actual URL you can call. Now this is much more clear, better structures, nicely formatted, and also offers much more detailed error messages in case something goes wrong. Here is an example:

ExtJS Web Console

Another change is that the ExtJS Web Console previously available in GetIt as an additional download is now fully integrated with the standard installation, replacing the older jQuery-based Web Console.

The New Windows Server and Linux Installers

Finally, in the GetIt Package manager you can find the downloads for two installers for the deployment version of RAD Server, one for Linux and one for Windows Server, including all of the binaries needed, like the InterBase server installation and the various files to deliver. The installers should make deployment significantly easier.

The RAD Server Console

We have also fully redesigned and re-implemented the RAD Server Console FireMonkey client. Given this is a fairly rich client with many new features, I’ll write about it in a new specific blog post. Stay tuned and .... enjoy the new features and enhanced quality of RAD Studio 10.3.2.

Categories: News, Blogs, and Tips

IDE Fix Pack 6.4.3 for Delphi 10.3.2

Andy’s Blog and Tools - Wed, 07/24/2019 - 12:30

With the newest Delphi 10.3.2 (Rio Update 2) the IDE Fix Pack failed with two compiler extension patches. The updated version 6.4.3 adds support for the Delphi 10.3.2 update.

Only Delphi 10.3.2 requires this update. Older Delphi versions are unchanged and stay at IDE Fix Pack version 6.4.2.

Name IDE Version File Size Downloads Added IDE Fix Pack 6.4.2 2009 (UP4)IDEFixPack2009Reg64.2.7z242.75 KB781 times2019-03-23 IDE Fix Pack 6.4.2 2010 (UP5)IDEFixPack2010Reg64.2.7z237.09 KB931 times2019-03-23 IDE Fix Pack 6.4.2 XE (UP1)IDEFixPackXEReg64.2.7z221.38 KB438 times2019-03-23 IDE Fix Pack 6.4.2 XE2 (UP4+HF1)IDEFixPackXE2Reg64.2.7z316.78 KB514 times2019-03-23 IDE Fix Pack 6.4.2 XE3 (UP2)IDEFixPackXE3Reg64.2.7z257.4 KB387 times2019-03-23 IDE Fix Pack 6.4.2 XE4 (UP1)IDEFixPackXE4Reg64.2.7z260.1 KB264 times2019-03-23 IDE Fix Pack 6.4.2 XE5 (UP2)IDEFixPackXE5Reg64.2.7z257.7 KB350 times2019-03-23 IDE Fix Pack 6.4.2 XE6 (UP1)IDEFixPackXE6Reg64.2.7z423 KB303 times2019-03-23 IDE Fix Pack 6.4.2 XE7 (UP1)IDEFixPackXE7Reg64.2.7z429.48 KB457 times2019-03-23 IDE Fix Pack 6.4.2 XE8 (UP1)IDEFixPackXE8Reg64.2.7z431.7 KB371 times2019-03-23 IDE Fix Pack 6.4.2 10 Seattle (RTM/UP1)IDEFixPackD10Reg64.2.7z428.33 KB750 times2019-03-23 IDE Fix Pack 6.4.2 10.1 BerlinIDEFixPackD101Reg64.2.7z430.65 KB879 times2019-03-23 IDE Fix Pack 6.4.2 10.2 (RTM/UP1/2/3)IDEFixPackD102Reg64.2.7z426.27 KB1847 times2019-03-23 IDE Fix Pack 6.4.4 10.3 (RTM/UP1/2)IDEFixPackD103Reg64.4.7z444.98 KB623 times2019-08-01

Download (fastdcc for the command line compiler):
Name IDE Version File Size Downloads Added fastdcc 6.4.2 2009 (UP4)fastdcc2009v64.2.7z112.87 KB244 times2019-03-23 fastdcc 6.4.2 2010 (UP5)fastdcc2010v64.2.7z120.38 KB256 times2019-03-23 fastdcc 6.4.2 XE (UP1)fastdccXEv64.2.7z121.36 KB205 times2019-03-23 fastdcc 6.4.2 XE2 (UP4+HF1)fastdccXE2v64.2.7z166.48 KB205 times2019-03-23 fastdcc 6.4.2 XE3 (UP2)fastdccXE3v64.2.7z150.88 KB191 times2019-03-23 fastdcc 6.4.2 XE4 (UP1)fastdccXE4v64.2.7z153.55 KB159 times2019-03-23 fastdcc 6.4.2 XE5 (UP2)fastdccXE5v64.2.7z151.87 KB219 times2019-03-23 fastdcc 6.4.2 XE6 (UP1)fastdccXE6v64.2.7z198.67 KB182 times2019-03-23 fastdcc 6.4.2 XE7 (UP1)fastdccXE7v64.2.7z219.84 KB197 times2019-03-23 fastdcc 6.4.2 XE8 (UP1)fastdccXE8v64.2.7z224.67 KB192 times2019-03-23 fastdcc 6.4.2 10 Seattle (RTM/UP1)fastdccD10v64.2.7z219.65 KB283 times2019-03-23 fastdcc 6.4.2 10.1 BerlinfastdccD101v64.2.7z223.52 KB320 times2019-03-23 fastdcc 6.4.2 10.2 (RTM/UP1/2/3)fastdccD102v64.2.7z219.06 KB518 times2019-03-23 fastdcc 6.4.4 10.3 (RTM/UP1/2)fastdccD103v64.4.7z228.61 KB160 times2019-07-31


  • Added: Delphi 10.3.2 (Rio Update 2) support
Categories: News, Blogs, and Tips

Building macOS 64-bit Applications with Delphi 10.3.2

Marco Cantu - Fri, 07/19/2019 - 03:59

Yesterday, Embarcadero released RAD Studio 10.3.2, which includes Delphi 10.3.2 -- available also as a stand-alone product. There are many great features in 10.3.2, along with a high number of quality improvements, but the most notable is certainly the addition of a new target platform.

As you are probably aware of, Apple has stopped accepting 32-bit applications to the online macOS store, has started adding a warning screen when you run a 32-bit app, and has announced that the next version of the operating system (Catalina) won't run 32-bit applications at all. These are all reasons that pushed us to increase the priority of a Delphi macOS 64-bit compiler, that we are shipping with all the required libraries, IDE support, and so forth.

More precisely, the is a new Delphi compiler for the macOS 64-bit platform, based on the LLVM compiler infrastructure, with a non-ARC model like all other Delphi desktop and server platforms (macOS, Windows, Linux). The RTL includes all core file features from system access to platform integration, from memory and threads management to HTTP and REST client libraries.

Of course, we have complete support for the FireMonkey library and all FireMonkey controls previously available on the macOS 32-bit platform are also in the 64-bit version. Regarding database access, the core database RTL and the FireDAC client access libraries are there, with support for the same databases previously available on the macOS 32-bit platform. The ClientDataSet component is also working, while the older and long-deprecated DBX drivers are not available. Finally, there is IBLite and IBToGo support for the Delphi macOS 64-bit. Here are some FMX 64-bit apps, but they don't really look much different than their 32-bit counterparts.

There are also specific new features and improvements for macOS. Notably, you can use the IDE directly for macOS notarization support, see and for more information.

There is another small change worth noticing. The way the system menu items are merged, has changed compared to the past versions of Delphi -- for both 32-bit and 64-bit versions of macOS. Now in the Application menu, which appears just after the Apple icon in the menu bar, system menu items (Services, Hide, Hide Others and Quit) are added automatically, so do not need to be added by the developer. Other items can be added manually to the Application menu using sub-items of the first visible main menu item in TMainMenu. You can see an example in the macOS screenshot above.

Categories: News, Blogs, and Tips

Delphi 10.3.2 is Now Available

Marco Cantu - Fri, 07/19/2019 - 01:59

Embarcadero has just announced Delphi 10.3 Release 2:

Most notably, this release adds macOS 64-bit support, with App Store and even Apple Notarization support included from the IDE. But there are many other features available I'll blog about in the coming days,

Some links for now:

That's all for the time being. We are hosting a webinar next week covering the release, as I blogged about yesterday.

Categories: News, Blogs, and Tips

What’s New in Delphi 10.3.2 Webinar Next Week

Marco Cantu - Wed, 07/17/2019 - 09:53

Embarcadero has announced a webinar for next week, focused on the new features of the coming 10.3.2 release. The title is "What’s New in Delphi, C++Builder, and RAD Studio 10.3.2" and it is scheduled for Wednesday, Jul 24, 2019 at 8:00 AM US Central Time (that is 3:00 PM in Europe).

I'll present it with the other RAD Studio Product Managers, Sarina DuPont and David Millington.

In the free webianr we'll introduce and demo new features in the coming release of Delphi, C++Builder and RAD Studio.

Register at

Categories: News, Blogs, and Tips

IDE Fix Pack moved to a new server

Andy’s Blog and Tools - Sat, 06/29/2019 - 04:53

After 18 years of using a sub-domain on a very old server on a domain that wasn’t owned by me, my blog and therefore IDEFixPack got a new home.

My blog is now accessible via . The old sub-domain has a “Moved Permanently” redirection to the new domain. Some time in the future the old sub-domain will be deleted.

Categories: News, Blogs, and Tips

First Steps with FMXLinux

Marco Cantu - Wed, 06/26/2019 - 03:41
RAD Studio Bundles FMX Linux

Yesterday Embarcadero announced with a blog post I published at the immediate availability of FMX Linux for all Delphi Enterprise and Architect customers. In short, you can use this library for building Linux client applications with FireMonkey, with code fully compatible woth other platforms.

You can read the announcement above  and also check:

FMX Linux Practical Introduction

So how does it work? First you need to use RAD Studio 10.3.1 and download the FMX Linux package from GetIt:

Second, open or create a FireMonkey multi-device application and use the special menu at the top of the Project Manager local menu (with the project selected) -- notice this is a temporary solution needed until we fully enable Linux FireMonkey support in the IDE:

At this point the Linux platform is available in the project target platforms:

Next create an application with a user interface:

Add some code to it:

Build it for Linux, open PASrver on your Linux machine and deploy it (you can also run/debug it if everything is configured properly). From the Linux box, you can use a file manager or a terminal windows to reach the scratch-dir with PAServer artifacts:

Now run the application, as with the command above and you get ti up and running on your Linux desktop:

That's all to get started. For more information and prerequisite on the target machine, read the docwiki information in the link above. In my case, I installed a complete gnome desktop, but that's not strictly required.

Enjoy this new great additional feature, which brings Linux on par with all other platforms Delphi supports!

Categories: News, Blogs, and Tips

UWP and Windows App Platform

Marco Cantu - Mon, 06/17/2019 - 07:51
UWP and Windows App Platform

As you have probably seen, over the last month there has been some discussion around UWP (Universal Windows Platform) and the current focus, or change of focus, for Microsoft in terms of how developers should build applications for their mainstream operating system, Windows 10. There have been claims and counterclaims, making the entire debate quite interesting.

Needless to say, Microsoft directions for building Windows applications is of critical importance to most of our customers, and also for us as at Embarcadero, given RAD Studio has a strong focus on Windows development.

For a summary of Microsoft point of view, you can read this interview by Mary Jo Foley of Microsoft Corporate Vice President of the Windows Developer Platform Kevin Gallo:

But let me start from the beginning and recap Microsoft plans (and how Embarcadero addressed those).

UWP Holy Grail and WinRT

A few years back, when Microsoft introduced Windows 10 for desktop the company still had high hopes for its twin Windows 10 Phone operating system. We know the phone ended up being a big failure for Microsoft, but at the time they were betting heavily on it. The idea behind UWP was to create a new common API and core operating system infrastructure that would allow the same application to run on all versions of Windows (including also Xbox and HoloLens). Technically, Windows 10 came with a new "core" called WinRT (initially introduced in Windows 8), a subsystem you can target with a specific API. This is not a .NET API, but more of a native, C++ type of API.

Side Note: Turns out that WinRT is "invocation compatible" with COM and it can be easily mapped to Delphi interfaces -- which is what Embarcadero did offering direct support for this new platform API.

There were other key tenets: increased security (as apps run more in isolation and are safer in their memory management), more stability (with more responsive UIs and async processes), and that could allow Windows become a more stable ecosystem.

So why didn't all developers jumped to UWP and WinRT? Microsoft offered a variety of programming languages (C# and .NET, C++, even JavaScript) and they expected large adoption. However, UWP came with its own UI design guidelines (wide spaced controls, full screen mode) and technical specifications (almost all code requiring to be asynchronous) that hampered development. Nice, modern, but quite different from any other API, platform and UX -- and so difficult to adopt by developer, particularly if the target is more than one platform. Basically none of the existing code was ready to run there, regardless of the programming language you picked. And doing a full rewrite is not something developers (and their companies) are keen on doing.

Cross the Bridge or Stay on the Trusted Side?

After the initial dismal adoption (which allowed developers to publish app on the store -- but a store that wasn't well maintained) Microsoft started promoting a set of "bridges" to allow bringing existing code to the new UWP platform. There was a bridge for Android apps support on Windows Phone, one for Objective-C conversion, and one to allow Win32 native apps to become part of UWP. Now these were non-universal UWP platform apps, given they could run only on one of the versions of Windows 10, desktop or mobile. This ended up only adding to the confusion.

Moreover, Microsoft kept indicating these bridges were meant to help converting your applications to the new model, one form and one module at a time -- rather than all at once. But the destination was still supposed to be a complete rewrite of your code. "If you have a million lines of code, you want to move to the new platform over time", Microsoft was officially stating. But it was obvious developers didn't really want to do ANY rewrite of their code for moving it from Windows to Windows 10! Considering all old applications kept running smoothly and the brand new features offered by the operating system were fairly limited.

Now again, RAD Studio (as well as Visual Studio) started offering support for the Desktop Bridge, but our goal was only letting developers target new APIs available only on the WinRT side (like notifications or BLE) and be able to deploy applications on the Windows Store -- for easier distribution, taking advantage of low commissions, and additional monetization options (via subscriptions).

Is Microsoft Giving Up?

This brings us to today and the recent "announcements" by Microsoft. An interesting POV is at:

The company has apparently just come to the realization that no matter their insistence developers are not going to rewrite applications to target the Windows operating system. In fact they keep using WinForms and MFC (on Microsoft developer tools side) or VCL (on the RAD studio one) or other native libraries. These days Microsoft is clearly downplaying UWP as a development model.

Notice that there are also reports of the fact XBox apps are now being built with Electron, a JavaScript desktop library:

The claim development for the Windows platform has stopped seems fairly exaggerated. There are still a lot of business applications written for Windows, and also real time control systems and games. While a lot of consumer apps moved to the web and mobile, investment on Windows development is still a significant portion of the IT budget -- even though maintenance of existing applications is likely a significant part of it.

In any case, this is only one side of the scenario. The APPX model of the desktop bridge implies apps run "partially sand-boxed". They cannot be elevated with admin permission, they can access only their "view" of the registry and operating system. Granted, they can still do damage, but the store vetting procedure should also help filtering out the bad guys. The concept around UWP / APPX is applications can be more easily isolated (and with .NET Core even have each their own copy of any required library). They can be installed with no admin permission and removed leaving a clean (or almost completely clean) operating system, mimicking the experience users have on phones.

Now this is not just surviving to the UWP model, but Microsoft has double its effort with the MSIX technology. This sounds and it is being promoted as an "installation" technology, but it is in fact the next interaction of APPX. MSIX apps can be distributed via Windows Store or within an enterprise distribution model, allow for extra security and what Microsoft originally called "virtualization" and now dubs as "containerization" -- to piggyback on a common trend.

The idea apps should live more and more in isolation is also backed by changes at the .NET level, with the idea (a key element of .NET Core) that each app should ship with its own version of .NET rather than relying on the version of library the operating system provides -- with the big advantage of reducing dependencies and allowing users to update .NET without fearing to break existing applications on their systems.

And What About RAD Studio?

This is how I understand the future of the Windows App platform -- a future that allows Delphi and C++Builder VCL applications to play on par with Microsoft own UI libraries and ecosystem, with a much higher degree of compatibility with existing code and investment.

Windows 10 as target platform is alive and growing (within the desktop OS total, if not in absolute terms) and the VCL with its support for Windows API, COM, WinRT and APPX model has everything you need to target the platform. Our libraries integrate Windows 10 feature, High DPI support, and compatibility in a way that's unparalleled in the industry -- without forgetting a large ecosystem of great third party controls!

Categories: News, Blogs, and Tips

Aqua Data Studio Adds InterBase Support

Marco Cantu - Tue, 06/04/2019 - 07:41

Recently the ADS team at Idera released a new version of their database management environment. The new version notably adds direct support for Embarcadero InterBase relational database.

You can read the full announcement at delve into the specific features at and watch a full and complete video at

If you are a RAD Studio architect customer with an active update subscription, your licenses allows you to upgrade to this version of Aqua Data Studio. If you are a RAD Studio customer on a lower edition using InterBase, or an InterBase user in general you can download the 14-day trial of ADS and take a look.

What’s the advantage of using ADS compared to InterBase specific database tools? First, Aqua Data Studio will run on not only on Microsoft Windows but also on Linux and Apple macOS. Second the same low-priced IDE offers support for over 30 data sources, beside InterBase.

Among the core features of ADS there is a modern and intuitive graphical user interface (GUI), flexible administration of object and management of data, an efficient SQL editor, with SQL checker, visual query builder, and ER diagram modeler; powerful data visualization and analytics with dashboards and reporting; tools for the comparison of schemas and their  synchronization, and much more.

An Aqua Data Studio Overview webinar is planned for tomorrow, June 5, 2019 at 11am EST (6 PM in Europe)

Categories: News, Blogs, and Tips

Android Firebase Push Notifications Patch and Blog Post

Marco Cantu - Fri, 05/31/2019 - 02:15

Embarcadero has released a patch to extend FireMonkey with support for Firebase Push Notifications on Android clients. The patch is available on GetIt as you can see below. 

The patch includes the required JAR files, the Delphi interfaces, and a snippet.txt file with code snippets for your application, both source code and manifest and configuration files you need to add to an existing or new application. 

We have also published a very long and detailed blog post, with all of the steps needed to create a Firebase project on the Google platform, instrument your application with the code from the snippets, and even test the resulting project. Hope this helps adding push notifications now that Google GCM is going away. The blog post is at:

For the future, as per the product roadmap, we are planning deeper integration of Firebase in FireMonkey, even beyond the Android platform.

Categories: News, Blogs, and Tips

The May 2019 RAD Studio Roadmap

Marco Cantu - Mon, 05/27/2019 - 02:07

The official RAD Studio Roadmap May 2019 has been published at

There is also an extensive and much more detailed commentary blog post, with text by Sarina, David and myself, available at 

As a related update, you might also want to read about the new policy for registration bumps (which has been partially amended) in the Embarcadero General Manager blog post at

Categories: News, Blogs, and Tips

RAD Server Webinar Repay and Ebook by David I

Marco Cantu - Wed, 05/15/2019 - 02:19

While Embarcadero keeps adding features to RAD Server (more to come soon) we have made some additional effort to help developers better understand how to use RAD Server for hosting REST APIs and building a modern web service architecture.

We have asked David I to help and he delivered for us:

As mentioned, we are planning further development for RAD Server, stay tuned for more info and let me know your ideas for improvements.

PS: Today we have another great webinar coming, with Cary Jensen covering FireDAC:


Categories: News, Blogs, and Tips

Random Thoughts on the Passing Scene #162

Nick Hodges - Mon, 06/14/2010 - 15:07
Categories: News, Blogs, and Tips

Delphi Pretty Good Practices #5 – Don’t Use Literals

Nick Hodges - Wed, 06/09/2010 - 11:03

If there is a bedrock, bottom line, everyone-should-follow-it-all-the-time rule in programming it is “The DRY Principle” – Don’t Repeat Yourself.  This simple rule states that you should write code once and only once, and that you shouldn’t allow the same code to be used all over the place.  Or, as the Wikipedia article deftly states: "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system."  Put more simply, it means that you shouldn’t have the same thing repeated all over your code, but that you should create a single identifier and use that in the many places where it might be needed.

As a practical matter, the DRY principle in its most basic form tells us that we should, as a matter of course, not use literals in our code, but instead should declare constants (or resourcestring types as we’ll discuss in a minute) and use those instead. That way, if you need to change the value for something, you can do it in a single place instead of having to make multiple, error-prone changes throughout your existing code.

For example:  Say you have a system that has an arbitrary number of required repetitions, say 17.  You might end up writing a whole bunch of code like this:

for i := 1 to 17 do begin ProcessStuff; DoSomeMoreStuff; end;

Now imagine that you have that kind of code all over the place, and then your boss comes around and says "Hey, we need to repeat all that stuff 18 times now, not just seventeen.” Well, if you haven’t followed the DRY Principle, you could very well end up with a lot of code to change.  And don’t use search and replace, because what if you change the 17 that is part of a variable name or something?  Things could get ugly fast.

Of course, the thing to do is to declare a constant:

const NumberOfRepetitions = 17;

and declare your loops as

for i := 1 to NumberOfRepetitions do begin ProcessStuff; DoSomeMoreStuff; end;

and now when your boss switches things up, you have but one simple change to make, and all is well.

Now this is a pretty simple, basic thing to do, but I’m constantly surprised at how often I find myself forgetting to do it.  (For instance, if you look through the code for TextScrubber, you’ll probably notice that I need to apply the DRY Principle to the TVersionInfo constructor in uTextScrubberTypes.pas.) You might be surprised how many literals you use in your code. I often take advantage of the syntax highlighting feature to scan code for specific colors for strings and numbers and replace them with constant values as much as possible. For instance, some code from TextScrubber used to look like this:

procedure TStraightTextMainForm.InitializeMainFormInformation; var IniFile: TIniFile; begin IniFile := TIniFile.Create(IniFileName); try TextScrubberOptions.ClickChoice := TClickChoice( IniFile.ReadInteger('Options', cClickChoice, 0)); TextScrubberOptions.ShouldTrim := IniFile.ReadBool(cOptions, 'ShouldTrimText', False); finally IniFile.Free; end; end;

with a bunch of string literals.  Instead, now, I’ve declared two constants in the uTextScrubberConsts.pas unit

const cOptions = 'Options'; cClickChoice = 'ClickChoice'; cShouldTrimText = 'ShouldTrimText'; cVersionLangCodePage = '040904E4';

and the new code looks like this:

procedure TStraightTextMainForm.InitializeMainFormInformation; var IniFile: TIniFile; begin IniFile := TIniFile.Create(IniFileName); try TextScrubberOptions.ClickChoice := TClickChoice( IniFile.ReadInteger(cOptions, cClickChoice, 0)); TextScrubberOptions.ShouldTrim := IniFile.ReadBool(cOptions, cShouldTrimText, False); finally IniFile.Free; end; end;

Those constants are also used when I write out information to the INI file, so that I can change the value in one place if I need to, and so that I can know that there won’t be any typographical errors in my strings that will cause a bug.  The same string value is always going to be used for the INI file entry.

Now let’s take a look specifically at strings.  Strings are a bit special because they are very often used to communicate information, and as such, they frequently need to be translated into other languages through the process of “localization”.  Windows provides an easy way to do this via string resources, and Delphi provides an easy way to create string resources via the resourcestring identifier.  These strings are then created as resources, making them easy to translate.  And “easy to translate” can often be, well, translated into “cheaper to translate” and that is a good thing.

Practically speaking, I apply this principle by placing as many const and resourcestring declarations as I can in a single file, thus centrally locating them for easy management and translation.  In our case with the TextScrubber project, I’ve created a file called uTextScrubberConsts.pas and put constants and resource string values into it.  If you look through the project code, you’ll probably notice that I need to apply the DRY Principle to the TVersionInfo constructor in uTextScrubberTypes.pas, even if it is keeping those constants within the unit.

One question that might get asked is “How do you choose what to make a const and what to make a resourcestring?”  My answer is that as a general rule, any string that could change without changing the UI or the functionality of the code, make a const.  Any string that, if changed, will trigger a change in UI or translation should be made a resourcestring.  There are exceptions to that, of course. More simply, a rule to use that anything that might get translated should be a resourcestring.

Now, this is a pretty simple “pretty good practice” to follow, but for you folks who have not been following this principle,  simply doing so can make your code more readable and maintainable.

Categories: News, Blogs, and Tips