RAD Studio 10.4 – Being Well Received !

Recently released RAD Studio version 10.4 “Sydney” seems to being well received by everyone. I’ve just moved a project due for delivery at end of June across from 10.3 to 10.4.

There’s a good video about what’s new at:

What’s new in 10.4

There’s also a load of support / demonstration material on a Google Drive shared folder provided by Embarcadero at:

Shared google drive folder for RAD studio

RAD Studio 10.4 is here !

Embarcadero have now released RAD Studio version 10.4 – named after the great Australian city of Sydney.

There are many new features in this release as summarised here.

Marco Canto has put together a list of sites related to this new release in this blog.

You can download a trial version from here.

So what are you waiting for? Get developing Windows / Android / IOS applications now!

Remote Working – Remote Assist

With the on-set of lock down in many parts of the globe (I’m writing in the UK, currently under pretty stringent movement controls) many customers are asking for remote assistance rather than on-site visits.

 For many people the most well known solution to providing this is “TeamViewer”.

I choose to use “Supremo” as my solution. Licensing is slightly cheaper and being less well known I argue that it is perhaps less likely that it’s AES 256-bit data flow will be the target of hackers.

 It also has a very light footprint on the target PC (and also on my PC too). It can be run without any formal installation.

 I also like the fact that I can personalise (with my company logo etc) the start up screen seen by my customers, which they find reassuring.

 Supremo remote access home page

This excellent simple to use tool happens to be written in Embarcadero Delphi.

 I am NOT on commission and have no personal or professional contact with the Supremo development team.

Code Review – Guidelines

I’ve taken on a new role for a software project based on Embarcadero Delphi code, that of Code Reviewer.

I’m a C++ programmer and have little experience with actually writing or debugging Delphi code.

So does that mean that I am the wrong man for the job?

Here are two things I won’t be doing:

I won’t be testing the code by running it (other people in the development team will be doing this alongside the original testing done by each other programmer as he/she develops the code).

I won’t be looking for syntax errors. The code should compile and run before it is passed to the code reviewer.

So what will I be doing?

I will be looking at the overall method used to perform the functions. Is it a sensible algorithm? Are looping structures sensibly implemented?
I will be looking at the choice of names used for variables, procedures and functions (there are plenty of blog postings about this here!).

I will be looking at comments, particularly any lengthy text that summarises the tasks achieved by the code to try to ensure that they are clear and simply written yet are accurate and complete and not open to misinterpretation. I will also check that they actually exist at the top of each source code file.

Whilst doing so I will be careful to be positive and respectful to my fellow team members. In particular for many, English (the language used for the code and comments) may not be the native language of some of the team members so any grammar / spelling or improvements to accuracy or coherency of explanation will be done in a sensitive manner.

That’s my aim.

If you consider these items you realise that in depth experience with Delphi is not a prerequisite to achieving the aims. In fact it may be argued that a lack of in depth expertise may even be useful!

#Delphi25th – Embarcadero Delphi is 25 Years Old !


2020 marks the 25th Anniversary since the launch of Delphi and Visual Component Library (VCL) back in 1995.

 Everytime a C++ Programmer writes using the Embarcadero VCL they are also using Delphi “under the hood”. The power and flexibility that this combination yields is one of the things that makes the Embarcadero RAD studio the “best in class” product.

You can see my happy birthday message by clicking here.

 Happy birthday video from Roger

Embarcadero RAD Studio Rio 10.3.3 is here !

Embarcadero have just announced the availability of RAD Studio Rio 10.3.3.

This introduces Android 64 bit support for Delphi users and Mac iOS 13 App Store for both Delphi and C++, as well as a host of other significant fixes and improvements.

So what are you waiting for? Go get it!

Here are some useful links.

What’s new in Rio 10.3.3

10.3.3 Summary (including a video)

Embarcadero CodeRage 2019 is Here !

CodeRage 2019 Full

Embarcadero’s annual on line series of webinars is back again !

This time they’ve changed the format to make it a large number of smaller videos, allowing you to dip in and out much more easily.

There is an overall theme for each week.

 For more about CodeRage 2019 (including the list of each of the active weeks and how to register) go to Jim’s CodeRage2019 Blog


Naming arguments and variables: Index and Number

It’s very common to have integers that are used to count objects. It’s also very common to have integers that are offsets into arrays (or similar structures).

Humans tend to count from 1 to n. In almost all cases when software uses offsets it makes sense to design the offset to run from 0 to n-1. Sometimes it is obvious which applies to a variable or function parameter. Sometimes this starts off being obvious but with the passage of time and the increase in the code complexity it becomes less obvious (even to the original code author). I know because I’ve been there.

There are also cases where it may not be so obvious from the start. Suppose you have a function which is passed the user response to the question “which one in this list of items do you want?”. Does the function return “1” if the user want’s the first one in the list or does it return zero?

I strongly encourage the use of the words “Index” in variable names which are expecting 0 to n-1 values and “Number” in variable names which are expecting 1 to n variables.

Thus you might declare the above function as

int GetUserSelectedNumber(void);

if the function returns 1 if the user selects the first item, or

int GetUserSelectedIndex(void);

if the function returns 0 if the user selects the first item.

Similarly if you have three things to control stored in an array, you might write:

const int NumberOfWidgets = 3;
TWidget Widgets[NumberOfWidgets];

and you could have a function somewhere that is declared as

void DoSomethingWithWidget(int WidgetIndex);

This is then immediately clear to everyone that the integer passed must run from 0 to n-1 (ie 0 to 3).

It’s a simple naming convention but it can save you hours when supporting your older (ongoing) code..