Marco Cantu

Syndicate content
Techie Italian Blogging on Delphi and More
Updated: 25 min 45 sec ago

Key Traits of the Coming Delphi For Linux Compiler

Fri, 02/17/2017 - 09:32

Embarcadero is about to release a new Delphi compiler for the Linux platform. Here are some of the key technical elements of this compiler, and the few differences compared to Delphi compilers for other platforms.

Linux Intel 64-bit

Before we get to language specific features, let me clarify once more the target platform, as Delphi for Linux is a bit vague. The compiler produces Intel 64-bit executables for Linux. This is a key difference, for example, compared to the old Kylix project compiler, that was 32-bit. The new compiler does not include Linux ARM platforms, which we are considering for the future.

Another related element is that the compiler is based on the LLVM compilers architecture, like all the most recent new Delphi compilers (iOS 32 bit, Android 32 bit, and iOS 64-bit). The advantage is that it will provide some significant optimization on the generated code. The disadvantage is that compiling and linking an application takes considerable more time than when using the Windows compilers.

In the rare case you need platform specific code and when calling platform APIs, you can use the {IFDEF LINUX64}.

Object Pascal Language Compatibility

Getting to the language specifics, the level of language compatibility is going to be very high. Almost all of the classic Pascal-based languages features, OOP features, RAD support capabilities, modern Pascal features (generics, anonymous methods, reflection, attributes) are going to work the same. Some beta testers have been able to port significantly complex libraries in a fairly smooth way.

What you might find a little more trouble in is porting some "older" code, like code that is not Unicode enabled or relies heavily on Windows-ism. Below are some of the specific differences. The only area that is not meant to be fully compatible is memory management, given the new compiler is based on Automatic Reference Counting, as explained later.

Core Data Types and LongWord Blues

I'm not going to list all of the core data types that remain the same, as the list is very long, but let's look at what's specific to this compiler. Being a 64-bit compiler, all pointers are going to be 64-bit, while Integer stay 32-bit -- this is the behavior of all other Delphi 64-bit compilers (and most other programming languages, BTW).

The only caveat is for the LongWord type. This is a data type often used when making operating system calls, so the decision that was taken some time ago was to keep it matching the underlying OS. So, for example, on iOS the same API declaration with LongWord compiles to a 32-bit or 64-bit data type depending on the compiler you are using. On Windows, however, Microsoft made a non-standard decision to keep LongWord the same size of an Integer. This implies the Windows 64-bit platforms works differently from the Linux 64-bit platform in regard of this data type. For reference, among other sources, see the long type in C language on different platforms at and the first answer at

You might have to revisit you code using LongWord and decide to keep that data type or use a different one (Integer, UInt32, NativeUInt...) depending on your goal. We have done and are still doing a significant revision of the RTL to make sure we are not misusing this type. In same cases, however, we are going to keep code that behaves differently depending on the platform, particularly when changing core RTL classes would cause a lot of legitimate Windows code working for 20 years not to compile any more.

Strings and Encodings

Since Delphi 2009 the Object Pascal language string type has defaulted to UTF-16 Unicode and 2-byte Char data type. Needless to say the Linux compiler follows the same path. Since 10.1 Berlin, all compilers (including the mobile ones) received full support for the UTF8String type and also (for direct low-level processing) the RawByteString type. The Linux compiler includes these data types, and in fact the UTF8String was added to mobile mostly because we anticipated it as a key requirement for Linux. A significant part of the HTTP-based traffic uses UTF-8 and supporting this representation as a native type -- beside supporting encoding to it -- was considered a requirement for the Linux project.

It is true, however, that some other string types like AnsiString are not supported. This is mostly a "Windows-centric" data type. If you are still using strings and PChar for managing generic data structures, it is really time to move to TBytes and PByte instead -- or enable pointer math for all data structures. Also the support for the old Pascal ShortString type is limited. Declaring a string [20] variable on Linux will fail. The other string type that is not supported is WideString. This is the old pre-Unicode non-reference counted UTF-16 type used for Windows COM platform integration. In fact, any COM-specific type and feature is missing on Linux, like on all other non-Windows Delphi platforms.

Notice that the TEncoding support is available, so you can read and write text files in any format you want. What you are not directly able to do is process an AnsiString in memory with the standard language support. But you can have an array of bytes (TBytes) representing text in any format in memory, and read and write it on disk, or receive and send via a socket connection, and you can use the TEncoding support for conversions.

Linux Defaults to 1-Based String Access

What about string access via the [] operator? As you might know, there is a compiler default you can change per-project, per-unit, or even per-code fragment that determines if the compiler treats the string access operator with a 1-based Pascal-classic notation or the 0-based notation most programming languages use. While mobile compilers default to 0-based, for Linux we decided to stick with the traditional Windows model, on the ground developers are mostly likely to migrate existing Windows server side code to Linux. The recommendation is to try to use clean, agnostic code, but if you prefer forcing a given string access model for all of your Delphi code, just use the $ZEROBASEDSTRINGS directive in your projects. Just as a reminder all RTL string functions and the newer string helper methods stays the same regardless of the platform and this setting. The first group uses a 1-based logic, the second a 0-based logic. Your pick.

Here Comes ARC

The other notable change from the Windows compiler is that on the Linux platform (as in any new platform) we have decided to use the Automatic Reference Counting (ARC) model for memory management. This is the model Delphi uses for all mobile compilers plus the iOS simulator one. The long term plan is to shift the entire Delphi ecosystem in that direction -- probably keeping the VCL world on the traditional memory model. This is the reason not-picking ARC for Linux would have been very confusing, as given you need testing when adopting a new platform this is the least disruptive moment for such a transition.

Feedback from beta testers has been fairly positive on this, and migration of existing code and libraries has not bumped into big hiccups. Now I don't have room in this blog post to revisit the best practices for ARC migration, but I'll try to have some more extensive material on this in the future.

Shameless plug: My Object Pascal Handbook (and particularly the Berlin revised edition) has some good material on this.

More Information? Delphi Linux BootCamp is Coming!

For more information, sign up to the boot camp (which is actually a one hour webinar) scheduled for March 1st in 3 times zones. For more information and to sign up see

Categories: News, Blogs, and Tips

22 Years of Delphi and it Still Rocks

Tue, 02/14/2017 - 03:04

To celebrate another year of success for Delphi. I dug a bit in my archive. Here are a few old images, mostly ads from Borland, before and after the product release. You can find a higher resolution version of these images at Here are smaller versions, with some comments.

It is interesting to notice how the original business value (increased productivity for developers) is still true today with a totally changed landscape, mobile, and all. We could re-use some of the original ads, as they make sense today. The other things I noticed is that most of the other tools that were popular back than, have long been forgotten. Delphi, on the other hand, is still popular.

The Original Product Box The Trio of the Thickest Delphi 1 Books

Mine, Charlie's and Pacheco/Teixeira where the 3 classic books covering Delphi in all of its angles, and became classic books, all with many editions for following versions. I guess I have them all...

Before Delphi, Was Turbo Pascal

Before Delphi came along, the language, its earlier (and different) OOP model and Windows integration were already there. But Delphi had a new object model in the language, the concept of components, and a new library, including strong database access, and it was a breaking change from previous Turbo Pascal products.

And Borland had a magazine, here you can see the editor:

Here Comes Delphi

Delphi RAD to ROI. We should use this more today!

Visual Basic done Right... The RADical performance... ready for Windows 95. Development got easier (with the family of Borland tools). Even if the product was a bit simpler (with the product matrix fitting a single page) it was powerful.

And magazines focused to it, for which I occasionally wrote articles.

Delphi Prizes

And Delphi won many prices, celebrated when Delphi 2 shipped. See the Jolt Award announcement ("Borland is back") and description:

Delphi 2 and Delphi 3

The easy of VB with the power of C++. On Time and on Budget. Power and performance. And some reviews.


Delphi and a Duck: an anticipation of things to come...

More "Recent" Versions

Delphi 4 (pushing rocks?), Delphi 5 and the Net (meaning Internet... but kind of cryptic), Delphi 6, Kylix (Linux we are coming back real soon!), Delphi 7, Delphi 8 and .NET (ugh!). And a big push towards modeling!

Delphi BirthDay Page

I still and always have Delphi 1 launch information at a page of my regular web site, But enough of history, I'll start blogging on the Delphi language coming back to Linux tomorrow!


Categories: News, Blogs, and Tips

RAD Studio and Natively Compiled Code

Mon, 02/06/2017 - 02:38

In today's development landscape, natively compiled code is making a significant comeback, even if in a fairly different variety of scenarios. RAD Studio has always been focused on it and developers using Delphi and C++Builder probably experience its advantages without even noticing them.

Natively Compiled Code: A Comeback?

Let me clarify the terms first. I refer to natively compiled code as code that is compiled (at some time of the process) into machine code the target CPU can execute. As you start your application, there i no further conversion to take place. I mean, like the output of a traditional compiler producing a binary executable, but not only.

For several years most of the focus has been on execution environments (.NET, Java, the various JavaScript engines) that would either interpret and execute the source code or most often an intermediate optimized format (ByteCode, IL, etc). Most of these systems benefit from some JIT (just-in-time) compiler so that each method is executed and compiled only once after loading the application.

Now while this model is still extremely popular (and it is going to remain mainstream, I'm not suggesting the opposite), there are many signs of a significant comeback of natively compiled code:

  • Apple platforms and iOS in particular have been pushing the "native only" mantra, basically disallowing execution environments other than JavaScript. Odd drawback is pushing developers to package two versions of their applications (32-bit and 64-bit) into a IPA package. Their alternative model is allowing for compilation of bitcode into binary on their own backend systems -- so you are submitting BitCode and Apple converts it to binary before the users download the app.
  • Android has started implementing an "installation-time" compilation (ART), compiling Java ByteCode to binary when the application is downloaded. This "compilation" happens on the user devices, depending on the device CPU and OS version. Beside making it very time consuming to do a system update (as all apps needs to be recompiled), this is making Java apps execution faster.
  • Also on Android it might come to a surprise but most of the best-selling apps are not written mostly in Java, but in C++ using the NDK. Which is the same model Delphi and C++Builder use. If you don't believe me, read for example Microsoft as they said (one year ago):

    "Platform defining, cross-platform, new trendy applications such as Facebook Moments, Dropbox, Office, Skype, popular games (e.g. Fruit Ninja, Clash of Clans, EA Sports titles) are all written in cross-platform C++.  Talking more numbers if you take a look at the top 50 android applications a vast chunk of them (~75%) of them leverage C++."
  • On the Windows platform, most applications have always been native, despite Microsoft pushing .NET for a long time even Office and their mainstream applications are natively compiled and likely mostly written in Visual C++, even if there are exceptions in which Delphi is used ;-). But the trend to opening more native apps has become even more significant after Microsoft opened the Windows Desktop Bridge, with many companies previously trying to build native WinRT apps and now back the business as usual to support Windows 10 with traditional applications -- although to be honest some of them are actually .NET-based. A good example is Telegram, written in C++, which seems to have scrapped UWP WinRT plans in favor of a Desktop Bridge approach. We are witnessing a large number of Delphi (and C++Builder) applications landing to the Windows Store via the bridge.
  • Web services space is also seeing significant migration from scripting (PHP, Ruby) to more efficient solutions in terms of processing. The original idea of "let's throw more hardware at it" doesn't always scale as expected. If you need to 2x machines (like 4 machines instead of 2) no big deal. But when you need 10x machines and the system is huge, 100 servers instead of 10 might push you to rethink the strategy. Including the fact that these servers can be power-hungry and power-consumption has become a significant decision factor. Although limited, some migration to natively compiled server side code has been happening -- or at least, migration from less efficient scripting solutions to more efficient execution environment solutions.
By Why Natively Compiled?

There are many reasons for this push towards natively compiled apps, at very different levels. There are also many reasons this is considered far from ideal, and (as you've seen in the list above) it happens different levels, not always in the development phase and with classic development tools. Anyway, some of the reasons include:

  • performance, better optimization of compiled code, often combined with non-GC memory management (but not always) -- even if JITers create very fast code, they take a hit often at application start time, giving a bad first impression. In case of true scripting, compiled code also implies syntax checking it and writing more robust applications, but also here technologies vary (for example TypeScript does improve the robustness of JavaScript, even if it remains interpreted). Truly the optimization fo teh JITer for a specific machine can end up being even better than a general purpose more CPU-agnostic compiler. So I know this can be debated at length.
  • improved security due to the fact there isn't an execution environment that might be exploited, and again because the code is binary. A related issue is better IP protection, given reverse engineering is significantly more complex on natively compiled code (even if there are notable obfuscation solutions, they often fall a bit short and they don't apply to all languages alike -- JavaScript being fairly weak on this respect)
  • a reason for compiling code upfront (compared to BitCode or Android installation JIT) is full control on the application: if the code being executed by your customers is different from what you wrote, even testing it becomes fairly less deterministic
  • more on the business side, the fact your company might already have existing natively compiled code that you can even move to new platforms without doing a full rewrite (for Windows 10 Store, but even in the mobile space) ca be a significant advantage
  • single source can be native, despite claims (in the mobile space, mostly) that native code ends up being written with different languages, IDEs, and tool chains, there are technologies that allow a good balance of natively compiled code, native platforms support, and code reuse. Visual C++ is one of those (despite the fact that it has no cross-platform framework) and Microsoft is using it for their mobile apps -- and not Xamarin, it seems, while Qt and RAD Studio (on the C++ or Delphi side) offer also higher-end cross platform libraries, covering platform features and also UIs.

While I know things are way more complex than I've tried to depict in this blog post -- and sorry if I skipped or missed some relevant details -- my point was to underline the fact that "execution environment" are not the only model you should consider, they are not they way to the future, but the present is and the future will continue to be a mix of natively compiled and intermediate compilation or scripting. While a few years back things were more one sided, there are now even more signals that natively compiled code has a place and it is going to stay and receive continuous investment, both by the platforms vendors (Apple, Google) in terms of post-development tuning and by development tools vendors focused on the natively compiled space.

This is a reason Delphi and C++Builder have and will keep having their role, bringing natively compiled applications to Windows 10 (Store included), the mobile space, and soon also the Linux platform -- as we saw optimizing server side code execution is also relevant. Having different options and solutions for different projects remains critical for developers. Don't rule out natively compiled code, if you thing it is just going away, you might want to reconsider.

And if you have been staying on the natively compiled side, keep appreciating its value and virtues. Alternative options do have merit, for sure, but natively compiled code has a place. And not a small one!

Categories: News, Blogs, and Tips

Delphi Blogs of the Week #50

Mon, 01/30/2017 - 13:40

Another review of announcements, news, blog post, webinars, and anything else related to Delphi that I feel important to share.

Embarcadero News

Embarcadero competition, Delphi 10.2 T-Shirt Graphic Contest:

​Rebooting the Podcast with Nick Hodges at

Events and Webinars

An Internet of Things (IoT) BootCamp 2017 by Embarcadero is scheduled for next week, see This is a 4 days event, with webinars each day, covering a set of diverse topics, from interfacing with IoT devices to communicating with Arduino boards, from creating federated IoT systems to collecting data in a central database, from creating custom Arduino boards to using Visuino for programming them. The subtitle "Build a RESTful Network of IoT Devices with Arduino and RAD Server" gives a technical overview of what will be included. Dates are February 6th to 9th.

The webinar "Migrating Delphi - Case Studies" is scheduled for tomorrow, January 31st. Register at

Notable Blog Posts

Windows Media Player in Delphi by Craig at

DprojNormalizer by Uwe at

Using Facebook SDK native framework for iOS and Android for Social Login and more (Part 1), a long and extremely interesting blog post from a technical point of view by Allen Drennan at

And by the same author, Using the Google Cloud Platform APIs at

And on a similar tone, FireBase Cloud Messaging with Delphi 10.1 Berlin update 2 by Jordi at

Delphi Code Monkey: One month after Diving Back into Delphi...

Podcast Streaming - FireMonkey Demo by Sarina at

TCalendarView Custom Painting by Pawel at

50 Posts in This "Weekly" Series

Even if I'm not keeping this with a weekly schedule, the series of post has been ongoing with some regularity (every 2 or 3 weeks) and I got to the 50th installment. I plan continuing, as I think the fast paced flow of social media is hard ot keep up with, and all of us end up missing notable news like those I summarize here. Let me know what's your take.

Categories: News, Blogs, and Tips

January Updates in RAD Studio GetIt Package Manager

Wed, 01/25/2017 - 03:11

I guess I should turn this into a regular blog post, here are some more updates in GetIt package manager, after those in December. I'm listing updates for Berlin, only some of them are also in older versions. More are coming shortly.

RAD & Installer

There is now a second tool to build installations, beside InstallAware, called RAD & Installer. This tool is an expert for creating installation script from the IDE, more than an installation tool in itself. This is the "Installer" category in GetIt now:

TMS IDE Plugin Pack

After a nice collection of trial version of their component packages (see last blog post), TMS has added to GetIt a free collection of IDE enhancements. This is not a trial, but free working software. Quite nice, I have to say.

Updates and More

Updates to TurboPack libraries including VirtualTreeView, SysTools, Mustangpeak Virtual Shell Tools and other packages. Also, there are 2 or 3 additional submissions begin worked on, so keep an eye to GetIt (and possibly to an update of this blog post).

As you can see above, there are currently 114 entries in GetIt for RAD Studio Berlin, as the system has been growing in content over time.

Jan 25h Update 

We now have also an additional Trial component, JAM Software ShellBrowser, the 115th entry.

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #49

Sun, 01/22/2017 - 02:35

The first list of interesting links and blog post of 2017, focused on Delphi development.

Embarcadero Updates

Press release "Embarcadero Announces RAD Studio Desktop Bridge Support for Windows 10 Deployments" including a comment by Kevin Gallo, corporate vice president for the Windows developer platform at Microsoft at

This press release got also referenced by SD Times at

There is Debugger Hotfix for macOS Sierra and the iOS Simulator for 10.1 Berlin. Information at and download at

Blog Posts

World First! A Linux web service written in Delphi by Craig at

Got a link to this fairly interesting blog on Delphi:

Did you ever use Bold? Check out

I don't know who write this and don't agree in full (and it stirred some discussion), but I found it interesting:

A Delphi wrapper for Slack API by Andrea at

Integrating with you favorite CRM/ERP web based client -- or poor mans integration? -- by Steffen at

Webinars and More

Check out 2017 upcoming Delphi webinars at

In particular, there is a new BootCamp focused on Arduino and IoT early February, that looks pretty interesting. More information to come.

Categories: News, Blogs, and Tips

Fun with Delphi Contest: NASA API Mashup

Fri, 01/20/2017 - 00:20

Embarcadero is promoting a contest for applications that leverage OpenData, in particular the NASA API (available at Given the large amount of data available, there is room for building many different applications. Also, you can submit Windows or Mobile applications, as long as it is built with RAD Studio.

Full announcement and competition details are at:

We have a sample application on GitHub at with a video at and accept submissions on GitHub and with a companion video. All of the information is at the page above.

While this isn't strictly tied to my "Fun Side of Delphi" old material, there is a clear relationship in terms of thinking out of the box and coming up with amusing demos, which also include some technical challenge.

We are waiting for your submission, a nice prize, and visibility in the Delphi community. So, start browsing the APIs and get to coding... submissions are due by the end of the month.

Categories: News, Blogs, and Tips

Answering the Question: Do I have Berlin Update 2?

Mon, 01/09/2017 - 00:44

There is a glitch in RAD Studio Berlin Update 2: For some users the About Box indicates the wrong version number in the "Installed Updates" field.

An example is below:

So how do you know if you actually have Update 2 installed? An easy way is to keep an eye to the Splash Screen, which was updated with the fireworks:

The more official way is to check in the About Box the actual version number. As you can see in the first image above:

Berlin Update 2 has version number 24.0.25048.9432

Berlin Update 1, instead, had version number 24.0.24468.8770

The first release (RTM) of Berlin was 24.0.22858.6822


Categories: News, Blogs, and Tips

My Year in Cities 2016

Sat, 12/31/2016 - 02:36

Following a long tradition of this blog, dating back to 2006 (and continued in each of the following years), here is my year 2016 seen through the cities I've been to. The rule is: Places I've visited in 2016 for at least one night (plus some relevant daily trips), in chronological order. At times, the reason for the trip is listed. In bold are cities or countries I've been to for the first time.

  • Piacenza, Italy, is where I live
  • Assisi, Perugia, Italy
  • Berlin, Germany (RAD Studio Berlin Launch)
  • Cannes, France (Film Festival)
  • Courmayeur Mont Blanc, Italy
  • Trip to Germany and Denmark
    • Zurich, Switzerland
    • Erfurt, Germany
    • Berlin, Germany
    • Hamburg, Germany
    • Middelfart, Denmark
    • Billund (Legoland) Denmark
    • Bad Salzschlirf, Germany
  • Courmayeur Mont Blanc, Italy
  • Koeln, Germany (Delphi Tage)
  • Rome, Italy (ITDevCon)
  • Viareggio, Italy (Lucca Comics)
  • Duesseldorf, Germany (EKON)
  • Frankfurt, Germany (Delphi Developer Days)
  • Zeist, Netherlands (SDN Event)

While I've been traveling quite a bit, my trips this year have been limited to Europe. Hope to be able to get back to the US to meet my coworkers next year, and I already have some other long trips planned for 2017. Stay tuned. 

Have a great 2017 full of happiness (and traveling!).

Categories: News, Blogs, and Tips

Delphi Blogs of the Week/Month #48

Fri, 12/30/2016 - 01:08

It has been a long time, but here is another roundup of notable blog posts in the Delphi space.


Debugger Hotfix for iOS32 (for RAD Studio 10.1 Berlin) at

Technical Blogs

Optical Barcode Recognition Library For FireMonkey In Delphi 10 Berlin On Android at

Conditional Uses Clause Considered Harmful at

Changing the color scheme of an Android style at

The Best Windows Support RAD Studio 10.1.2 Berlin at

Running Delphi applications on Raspberry Pi 3 at

Introducing SubHub (a complete, real world Delphi + RAD Server project):

Towards Linux

Running Delphi VCL code on Linux via Wine, at

Preparing for Linux at

Configure Delphi and RedHat or Ubuntu for Linux Development at:

InterBase on Linux at

Setting up SUSE Linux Enterprise Server/openSUSE Server for the Delphi on Linux Beta at (with some beta info shared under permission)

Open Source Projects and Libraries

Interfacing with Slack from Delphi:

Some CodeRage 2016 code at

Delphi LeakCheck at

FireMonkey snow effect:

And finally a video with this effect on YouTube, as a way to celebrate the winter season and wish you a great 2017:

Categories: News, Blogs, and Tips

New GetIt Packages: AQTime, InstallAware, Redis, ErrorSoft, Component Trials by TMS and Others and Much More

Tue, 12/27/2016 - 12:35

There are many additional packages recently added to the GetIt Package Manager for Berlin, from free tools and components, to trial versions of paid ones. The list include AQTime, which was until recently an integrated third-party tool and it is available now for Berlin as part of the core product. Similarly, there is now also InstallAware, an updated version of NexusDB, some new free tools (including a Redis Client by Daniele Teti).

Finally, there is a fairly long list of trial versions of paid components, including many from the large TMS offering. You can now try these components directly from the IDE. The following images provide more details.

Berlin Add-On Value Tools    More Free Component Libraries


Trial Versions of Popular Third-Party Components Great Games with Full Source Code

More Coming

More libraries of components are added over time, and the entire TurboPack list has been updated with the latest versions. Overall, there are 58 different entries for Components and Libraries, outside fo the "Internet of Things" collection. Feel free to email me if you have libraries or tools available for inclusion.

Categories: News, Blogs, and Tips

Microsoft mentioning RAD Studio Desktop Bridge Support

Wed, 12/21/2016 - 01:13

It is a fairly interesting time to see Microsoft promote RAD Studio Berlin Update 2 support for the "Centennial" bridge, as the only IDE providing this capability out of the box.

First, Microsoft Windows Developer account tweeted about it at (see below):

Second, RAD Studio has been mentioned in the blog post "Conversion options for bringing your existing desktop app to the Universal Windows Platform using the Desktop Bridge" at, Towards the middle of the long post you can read:

"Additionally, Embarcadero has announced support for the Desktop Bridge in RAD Studio, which lets you directly output a Windows app package through the build process."

And third and even more relevant RAD Studio in mentioned in the official MSDN documentation at

For more information on our side, you can refer to:

- The new desktop Bridge landing page:

- The blog post (and webinar recording) by Pawel: (the video is at

- My blog post offering an overview:

There are more and more of our customers publishing Delphi and C++Builder applications on Windows Store, let us know of any relevant application that gets published so we can track it. As a reference, my "My MiniFigures" store app has been had 420 downloads so far, but I'm sure you can beat it!

Categories: News, Blogs, and Tips

Less is More - Why Less Major Releases with Non-Breaking Updates Adding Features is a Good Thing

Wed, 12/07/2016 - 06:25

Answering to pressing requests from customers and partners, RAD Studio is moving this year from a 6 month release cycle with one main bug-fix update to a 1-year release cycle with multiple updates including fixes and new features. 

As we announced in our last published roadmap,, we are significantly slowing down the release cycle, going back to a more or less yearly major release for the product, from the faster cycle of recent years. There are many reasons for this change, but it mostly addresses complaints from customers (and tech partners, and component vendors).

The original requirement to release more often was driven by the fast-paced change in mobile operating system, compared to the Windows world -- which is actually now moving much faster under Windows 10, but that's a separate story. This requirement still applies, but it can be fulfilled in a different way.

This change in delivery cycle and model, in fact, is tied to another change, namely the fact that update subscription is now compulsory. I know you might not see the connection, but this gives us freedom to release new features and support new versions of operating system in updates, with no negative effect to the business financials. The only caveat, of course is maintaining the largest degree of binary compatibility with existing DCU files and packages. This might not be doable for a new operating system, but it is certainly doable for VCL and Windows, which is the platform the largest projects from our customers are on.

Berlin Update 1 was borderline, with some new features like native iOS grid added to the product, but most of the focus on fixing bugs. Berlin Update 2 has been the first this release in this new direction, with new VCL controls, new IDE designers, support for Desktop Bridge, and more.

It is true that delivering the same amount of features in a non-breaking update will require us some extra work, and in some cases (like Delphi language changes) it won't even be doable. So we might have to delay some features, because of the technical limitations due of non-breaking updates. But we feel the benefit of a slower release cycle to the stability of RAD Studio and of our customer projects, and hope this will allow more customers to stay and migrate on the latest version sooner -- with a good benefit in terms of their experience.

Needless to say your feedback is critical -- and even more because this was mostly driven by customer feedback. Do you still feel the product can move in the right direction with this model? Do you feel your update subscription remains relevant? Will you be able to safe time and money while keeping up to date with RAD Studio? Or will you upgrade your projects every 2 or 3 years no matter what? Let us know.

Categories: News, Blogs, and Tips

Speaking at SDN Event, December 9th, in the Netherlands

Tue, 12/06/2016 - 12:36

Bob Swart, who coordinates the Delphi events for SDN, invited myself and Andrea Magni (all Italian crew) to talk at the SDN Event next Friday, December 9th. I'll be giving a keynote on the status of Delphi, a session on Windows 10 and the Centennial Bridge, and one on my experience publishing mobile applications. Andrea is talking about this FireMonkey and REST open source libraries.

More information at

​I won't be around much, traveling only for the event, feel free to stop by and have a chat.

Categories: News, Blogs, and Tips

Building and Deploying a Local Appx Package

Thu, 11/24/2016 - 06:17

With Delphi (and C++Builder) Berlin Update 2, you have the ability to create and deploy on the local machine an Appx package, leveraging the Microsoft Desktop Bridge (aka Centennial Bridge). The IDE also support deployment for Windows Store, using slightly different steps.

However some of the steps are far from obvious, particularly including generating and registering a self-signed certificate. This blog post highlights some of the steps need, and the related video (extracted from one of my CodeRage sessions) show all of the steps in details, going from a vanilla version of Update 2 to the APPX deployment.

Detailed Content

The video covers:

- Configuring the Windows SDK in the IDE to enable the execution of the required SDK utilities

- Creating a self-signed certificate from the IDE

- Creating a project and build it for store deployment, configuring the provisioning page

- Looking into the list of deployed file and in particular into the Appx manifest file

- Installing the self-signed certificate among the trusted certificates on the local machine (for this step, there is a detailed description below)

- Installing the Appx package on a machine, uninstalling it, looking at the file system location where it is stored and the versioning model

The Video

The video in itself is slightly over 10 minutes, and you can see it on YouTube at

Further Instructions for Certificate Registration

To import the certificate having the .pfx file generated by the RAD Studio IDE:In File Explorer, select the certificate file and use the Install PFX local menu item:

  1. In the Store Location group, select Local Machine
  2. Click Next and OK to confirm the UAC dialog
  3. Confirm the certificate file selection
  4. Enter your certificate password
  5. In the next screen of the Certificate Import Wizard, change the selected option to "Place all certificates in the following store"
  6. Click Browse. In the Select Certificate Store window, scroll down and select Trusted People and click OK
  7. Click Next. A "Completing... " screen appears
  8. Click Finish

As an alternative, you can import the certificate from the Appx package (like a customer would) and in this case the password won't be requested:

  1. In File Explorer, right click an Appx that you've signed with the certificate (most likely the Appx package you want to install) and choose Properties from the context menu.
  2. Click the Digital Signatures tab
  3. Click on the certificate and choose Details
  4. Click on View Certificate
  5. Click Install Certificate
  6. In the Store Location group, select Local Machine
  7. Click Next and OK to confirm the UAC dialog
  8. In the next screen of the Certificate Import Wizard, change the selected option to "Place all certificates in the following store"
  9. Click Browse. In the Select Certificate Store window, scroll down and select Trusted People and click OK
  10. Click Next. A "Completing... " screen appears
  11. Click Finish (agreeing to the following confirmation dialog if displayed)

These are steps I borrowed from Microsoft, of course, but worth sharing, as they are critical to be able to do local debugging or your applications once deployed into an Appx package. Remember that file access rules and even WinRT API call rules are different for applications executed via an Appx package and the Windows Desktop Bridge, so you need to do adequate testing in this scenario.


Categories: News, Blogs, and Tips

Further Information About RAD Studio Berlin Update 2

Fri, 11/18/2016 - 01:54

Here is some further information and links related with the recent Update 2 release of Delphi, C++Builder, and RAD Studio Berlin 10.1.

More official info

- The official press release can be found at

- The specific page of the web site with update 2 info is (a bit hidden) at

- The blog post by Stephen includes all release videos: see

The Special Offer

If you haven't updated to 10.1 Berlin and are not on Update Subscription, there is a special offer until the end of November to celebrate the release: 10% off Professional, 15% off Enterprise and 20% off Architect. Read about this and other active offers at

Issues, Workarounds, Etc

- Issue with winapifamily.h (for C++Builder) explained at

- Deferring of C++ Rename Refactoring covered at

- Startup problems and fixes by Daniele at

And A Nice Tweet

A nice tweet I saw. Well, we call it CodeInsight, but the fix around static arrays causing trouble was done and well received:


Categories: News, Blogs, and Tips

RAD Studio Berlin 10.1 Update 2 Anniversary Edition Available

Tue, 11/15/2016 - 01:05

Embarcadero released today the second update of RAD Studio, Delphi, and C++Builder 10.1 Berlin, with significant new features (mostly focused on Windows 10 Anniversary Update) and quality improvements.

The features were announced in last week webinar available as a replay at and include support for Windows Desktop Bridge deployment in the IDE, a new CalendarView control, new designers called QuickEdits, and much more. You can read a detailed description of these new features in the docwiki help page at

The update has also several quality improvements and bug fixes, including the most voted issue on Quality portal, the problems with CodeInsight and static arrays. Other notable fixes include dynamic arrays optimizations (following regressions in Berlin), DataSnap issues, several DBGrid regressions fixes, C++ compiler improvements, REST clients calls with compressed data on mobile, and many others. You can find the list of publicly reported bugs fixed in this update at

All customers with an active update subscription can download the new version of the product at one of the following links:

- The GetIt based Web installer can be found at

- The ISO with the traditional installer is at

Notice that if you want to preserve your registry setting in this uninstall/re-install cycle you should use the same installer technology of your most recent install. Before you ask, the GetIt based installer this time will ask you if you want to preserve your registry settings, and would make a copy and reapply them after the installation completed.

Hope you like the quality improvements and new features of Berlin Update 2. And stay tuned to CodeRage today and the coming two days.

Categories: News, Blogs, and Tips

CodeRage XI Next Week

Fri, 11/11/2016 - 03:23

The 11th edition of the online CodeRage conference is kicking off next Tuesday. As usual it features dozens of technical sessions by Embarcadero speakers, MVPs, and tech partners. Don't miss the most comprehensive online event of the year for Delphi and C++Builder developers.

Titled Productivity, Platforms and Performance, CodeRage XI is going to be informative but also a lot of fun. While you'll be able to view the session replays later, only attending them live give you the opportunity of asking questions and of interacting with other attendees. 

The conference program, from Tuesday to Thursday, is kept up to date on the Embarcadero community at:

The conference offers sessions at different levels and for different audiences, covering most of the technologies in RAD Studio, and has specific parallel tracks for Delphi and C++Builder.

I'll be giving the Delphi keynote on Tuesday, after the conference kickoff -- at 7AM PST or 4PM Europe, and a session on Windows 10 and the Desktop Bridge on Thursday (which is a day reserved for customers on update subscription) -- again at 7AM PST or 4PM Europe. And I'll try to be online as much as I can during the conference, to help answering questions. I'll probably also blog quite a bit. Stay tuned.

Categories: News, Blogs, and Tips

A Delphi UWP App on Windows 10 Store

Fri, 11/04/2016 - 05:57

Using the Windows Desktop Bridge (aka Project Centennial), I've been able to publish a Delphi-based UWP application on the Windows Store, for Windows 10 Anniversary Update desktop user. This is great news as it proves in practice a long anticipated opportunity Microsoft is giving to developers with Win32/Win64 code bases. The desktop bridge, in fact, allows developers to take existing applications based on the Windows API and package them as UWP applications (or appx packages) to be distributed directly to Windows users or to be distributed (and sold) via the Microsoft store.

The specific app in question is a Win64 FireMonkey app, the Windows version of my (and my son) My Minifigures app that is fairly popular on Android (with over a quarter million downloads). The Windows version hasn't been clean up and optimized much, so it feels a bit odd -- hope to have time in the next few days to make it work better on Windows.

You can find the app here:

The point I want to make, of course, is not about the app itself but the fact that this is becoming a very interesting way to distribute applications built with RAD Studio. I showed the install process in the Berlin Update 2 Webinar we did yesterday (replays will become available) and we also explained in that same webinar how RAD Studio will make it extremely simple to create appx packages with IDE integrated support -- in a very similar way of creating mobile and macOS packages with the IDE. This is going to be another first, as (for what I know) Visual Studio still lacks integrated IDE support for the Windows Desktop Bridge.

As soon as we'll release Update 2 I'll follow up with a lot more technical details. If you want to get started, though, there are two steps you should do. The first is submit you Desktop Bridge app request to Microsoft at The second is to actually register yourself as an app developer with Microsoft, at There is a one time only fee of 19 USD/EUR or 99 USD/EUR for individuals or companies.

I'll follow up soon with the steps needed for store deployment, compared to what it is needed to create an appx package for direct use, something I already covered in this blog a few months ago.

Categories: News, Blogs, and Tips