Category Archives: General

For stuff I forget to categorise! Doh!

Open Innovation, RAD Server and Enterprise Connectors

The sheer volume of data that is collected has exploded in recent years thanks to digitalization and modern cloud architectures that support massive data collection, and encourage widespread cross-sharing of data.

The growth trend of having applications with easily accessible API’s, provide a rich base for rapidly adding functionality, and choice of functionality to new applications, based on existing software that is already being widely used. – Enabling a customer to expand their existing systems easily through choice of software is a real example of Open Innovation. This approach makes it easier to get your software adopted into a customer’s existing business capabilities.

e.g. Industry-specific software that is purpose-made for a specific task, can focus on that job alone. Using integration to 3rd party software like Jira and Slack to ensure communication channels and processes and task management are taken care of using existing solutions. Other examples might show accounting software being linked to, so you can process the work, and let other systems manage the money without becoming experts in multiple country-specific legislation.

This Open Innovation approach ensures that the supporting infrastructure around your products continues to improve and offer richer features and capabilities without you having to invest heavily in that part of the process. So while it may seem like your solutions don’t get so much of the pie, you are likely to get more pies to eat, for less cost which means better returns on investment. This approach also lowers time to market, and enables clear focus on the specific task at hand. i.e. Be a master of one job, rather than a jack of all trades!

An additional business model that is growing in popularity and helps with recurring revenue generation (which is best for company valuation) comes from the upsell of free versions (or lower-tiered versions) of your software to those that include specific/popular 3rd party integrations.

As software developers, we often look for a single code base solution to get to market faster, reduce our initial development costs, and ongoing running costs. As we build our solutions, however, we should also be looking at the time, knowledge and code debt that comes with building modules within our software.

This is really where RAD Server and the Enterprise Connectors from CData come in. Using RAD Server, you can build very powerful API’s that are easily integrated into other systems, while at the same time, making sure the key integrations you need for your software features are available through simplified access to 70+ enterprise software solutions. RAD Server also enables the rapid movement of business logic from traditional VCL based applications into new cloud-based versions, so it is ideal for getting more value from your existing codebase.

Interested in RAD Server? You can start a 30 day free trial of RAD Studio and build your first REST module rapidly in minutes.

Learn more about how rapidly you can build RESTful end points with RAD Server in my recent blog posts, visit the Embarcadero RAD Server pages, and also check out The RAD Server – Embarcadero Academy course by David I.

Developer Direct – IDE Special – 8th April

David, Marco, and I are back again on Wednesday 8th at 11am BST / 12pm CEST to talk about Development within the RAD Studio IDE.

After the previous session talking about working from home under Covid19, we asked for input on what you wanted to discuss. From the ideas submitted, we picked a discussion around the IDE.

We aim to share top tips and tricks, and also, as David is the Senior Product Manager responsible for RAD Studio IDE, (along with Visual Assist, – the Visual Studio plugin from Whole Tomato for C++ and C#), we should get some great insight to the background around a number of recent changes, and what to expect moving forward too!

Download the Calendar Invite

If you have issues with the Calendar invite, use this link for the live event. https://global.gotomeeting.com/join/663397045 

Developing from home

Working from home – webinar replay

As software developers, on the whole, it’s relatively simple to switch to working from home, and many of us work from home regularly, or all the time. However, with a quarter of the world’s population already in lockdown, the circumstances are not exactly the same as your typical week at work. 

With a majority of workers now trying to work from home, the daily mix of office news, banter, and general togetherness has been dramatically changed. 

Continue reading Developing from home

Musings from March – Inc Denmark and Poland

This month has seen an ever-changing global situation with the outbreak of the coronavirus. The first time that I can remember I had to radically change / cancel a live event due to circumstances out of our control.

At the start of March we were keeping an eye on the news to see how the spread of the coronavirus had impacted Denmark. With only 2 cases in Denmark, the advice at the time was that it was set to travel and we proceeded with events in Kolding and Copenhagen. Especially nice to see was a growing number of new and younger faces, and a good proportion who’s first-ever version of Delphi or C++Builder what 10.something.

The events were well supported by the local Danish user group, including Danish MVP Jens Fudge, who just so happened to bring along a couple of bottles of his homebrew to share with me afterwards.

The event gave a good chance to discuss the current industry trends, including what end-of-life for Windows 7 means for developers, the current operating system landscape and modern application architectures. Following my 2+ years away at Nokia, it was my first live event in Denmark for over 3 years, so it was a good time to reflect on the dramatic changes in the Idera group over that time too.

This week, I was due to be in Warsaw, Poland. Again we have been closely monitoring advice from local government and our local partners, and on Monday we decided to change the event from being live, to virtual. This is a big change at last minute, but totally the right thing to do. Running a similar event as a webinar is a major challenge, in no small part due to the reduced interaction that you can have with an audience. 3 ½ hours is certainly the longest WebEx I can remember running on my own.

The following is a summary of some key takeaways from the events and hot topics of conversation.

Key Topics – Windows 7 EOL and Rise of Windows 10

The discussion around Windows 7 end-of-life focused around the lowering (but still present) need to support windows 7 and earlier editions, but also how business uses are moving into Windows 10 at a rapid rate, and is driving app modernisation focus. The VCL is, in my opinion, still the best Windows native UI development framework on the market and includes support for the new Window 10 controls in the VCL (that includes support for earlier editions of Windows).

The VCL enables developers to release updated UI’s, including touch enabled controls and wide gesture support to make the most of modern platform hardware. One of the key features with more users now on Windows 10 is HiDPI support.

HiDPI and Per Monitor resolution.

One very important change to keep applications looking good on Windows 10, and in certain places to keep icons being useful, comes from the HiDPI support.

Windows now support multiple DPI’s with each monitor running at its own scale. This can dramatically change the look of the screen as programs move from one screen to another.

If you are needing any reason to move to the latest versions of RAD Studio, this is probably it! – Key to getting ready for HiDPI today is the icons in your applications. Traditionally, these have been served via the TImageList. While this is still the basis for icons in the future, you should also look at the Virtial ImageList components that enable automatic serving of images to match the resolution of the current monitor.

For a deeper dive into using HiDPI support I recommend this video from Den Zubov, Lead Developer at Fast Reports

Windows 10 APPX Distribution

Additionally, we discussed the value of the APPX file generation (that creates a partially-sandboxed application) for support local distribution but also accessing the Windows 10 Store. This is enabled through the Windows 10 Desktop Bridge (something Embarcadero was the first IDE or Installer anywhere globally to support)

Monetization is also possible in the store through the integrated Window 10 Store components.

We also discussed the future of Windows deployment, and the increased focus Microsoft is putting on deploying via signed packages created with the APPX and future updates to the format. A major benefit here is to lower the amount of Anti-Virus CPU cycles required when applications are created in the partially-sandboxed format. This very much is driven by the success on mobile of containerized applications.

If you are interested in further reading on this area, I recommend Marco Cantu’s blog on UWP and Windows App Platform and the Embarcadero Community post on Windows 10 Modernization, but especially this video – Moving Forward with Microsoft and Embarcadero.

Operating system landscape

In short, the landscape today is very around 40% Windows 40% Android, with iOS. macOS and Linux making up the rest. – Desktop first, and expand out to mobile is a valid strategy, as is mobile-first, if you have the right backend in place. While you should target and test Android first, the great thing about the FMX framework is you can rapidly get to iOS with the same source code.

If you are looking to build your first applications on mobile, then definitely check out the courses on the Embarcadero Academy and LearnDelphi.Org.

Modern Architectures

One thing that was interesting to see is that many developers are still not aware of RAD Server. REST and JSON is a fundamental element to building modern middle-tier servers and services today.

RAD Server offers a full MEAP, that can be deployed in Linux or Windows and even offers support for Docker Containers. If you are new to Docker and containers and wonder how they can help you with your application development, then I would definitely recommend watching A Practical Introduction to Docker, presented by Malcolm Groves

For more specifics on RAD Server, then, again, there are some great courses on Embarcadero Academy, and also many videos on YouTube. There are also many more articles on my blog taking you from zero to serving out master-detail-detail data rapidly with RAD Server.

I would also recommend getting to know the REST Debugger, which is in the bin directory of RAD Studio.

Data Data Data… (and component migration)

Finally, its clear Data is everywhere today, and FireDAC does a great job of providing very fast, and very stable database connectivity that works over Windows, Linux, macOS, iOS and Android  Migrating to FireDAC from ADO or the BDE is an important step for many. reFIND is a fantastic tool to use to help that migration. It can help with adding in uses, removing old ones, and even updating component properties. It’s very flexible thanks to the ability to build your own Pearl script that the tool uses. This is very simple to do and when used with a batch file to automate code migration, it can drastically simplify the movement from old DB components to more modern ones. (and in fact, it can be useful for moving almost any other component too).

While a cornerstone of Delphi is code portability, and the ability to keep moving code forward, there are a few things that have had impacts over time. Unicode is one of them, and the introduction of ARC has meant different things to review on mobile for memory management. ARC is on the way out, (as the 10.4 Delphi roadmap shows), and this may actually enable better portability of pre-Unicode code in some regards. So certainly something to keep an eye on. – More information on migrating code is available at the Migration Center.

Delphi is turning 25!

This week, Delphi is turning 25, and as part of the celebrations, members of the community have been encouraged to share their stories about Delphi, what they love and how it has helped their careers.

Delphi was originally launched on the 14th of February 1995, while I was still at 6th form College. It kind of passed me by, to be honest. At the time, I was just purchasing (well my parents did) my first PC with Windows on it. I was, however, using Pascal in the computer labs in some elective modules I took alongside my primary studies. (Progressing on from Basic).

It wasn’t until I left university and took my first post-uni job that I really discovered Delphi. I worked for a relatively new software house in the Leisure management domain, that has expanded into the UK, and because of my role, I ended up working alongside the US-based development team. It was just as they were moving from MS-DOS to Windows, primarily prompted by the wider business adoption of Windows following Windows 98.

The original DOS program was written in Turbo pascal, so Delphi was a natural progression.  It wasn’t long before I progressed fully into the development team. One key aspect of the move was updating my skill set and working towards Delphi Certification. At the time, this was mainly through night school study and through attending BorCon’s. I also joined up with the UK Developer Group and took my first steps into presenting. My first ever topic was around Replication with InterBase (Something we were doing with over 100 health clubs at the time).

One thing I remember from those days was a lot of Buzz around .Net, even David I told me to ensure I was up with it! Customers seemed to want it (Microsoft really sold every one that cool-aid), but none every really understood why when asked.  It was hard as a developer at the time, knowing what to stick with, what to expand on, where to focus the next phase of development. Sometimes you have to follow market demand, even if the market isn’t sure why it’s asking for something (kind of reminds me of 64bit applications only on mobile right now), but sometimes you need to look at the real business drivers and what makes sense for longterm delivery. Whatever has been thrown at Delphi, it continues to thrive. Even, Apple and Google are saying the new cool thing is to be RAD these days!

Thankfully, with a little consumer education of speed and performance of Delphi, the company I worked for ended up winning some big contracts with key health club chains, collecting 10’s of millions a month from recurring monthly memberships. This caught the attention of American Express, who we also wowed thanks to the rapid prototyping capabilities of Delphi. This lead to their first delivery of health club targetted recurring credit card billing.

We were also able to implement SaaS-based models years before they became the norm due to 3rd party libraries we integrated, again expanded with our very own management system written in Delphi.

Everything our customers throw at us, from connecting to Fiscal Printers in Italy, to multi-lingual support, to the integration of various access control scanners and relays (including hand scanners) to Lift control, to magnetic and contactless card encoding, Delphi was always up to the task. (either via direct API’s or support from 3rd party libraries).

With the world wide web growing in importance, it wasn’t long before integration was required. Intraweb provided a great way to expand out certain web applications, targetting the initial generation of web-enabled small form factor devices. Being able to use WYSIWYG with Delphi behind the scenes was massive in being able to get existing code out to new platforms. Web services also enabled the expansion into providing an API for other developers to connect into the core software engine. Critical for online bookings and reservations. This also tied the customers into our software even further, helping sell even more product licenses.

What was key, however, was that as the technical environment evolved, so did the language and the components available to deliver.

That is something that has carried on today. While lessons have been learned through trying new things, e.g. Kylix has come and gone, ARC is also on its way out, the language and features today allow coverage of Windows, Linux, macOS, iOS, Android covering 32bit and 64bit platforms – without compromise! Its fully native, fast and connected with OOP and data at its heart.

The eco-system of 3rd party component vendors and partners is growing again. More and more support around education exists, with LearnDelphi.org and the Embarcadero Academy. – If fact, the stuff you use to wait all year to get at BorCon is now so easily accessible online.

The biggest challenge I hear from people is that they want more Delphi developers, which is a great thing for a skill set to be valued so highly. There is even the Delphi Jobs Board for developers and employers.

For me, Delphi changed the direction of my career. I’ve ultimately traveled to many more interesting places and done many great things because of Delphi. I’ve met with Government ministers, education board members, directors, CEO’s, and thousands of developers, each with their own interest and appreciation of Delphi.

If I look at where Delphi is compared to the other languages and component platforms that have come and gone, it doesn’t feel 25 years old… it feels 25 years young, and like most athletes, just like it’s coming into its prime.

Join the celebration this Friday. #Delphi25th. I’ve some insider knowledge of a few things coming, and it sounds awesome! https://community.idera.com/developer-tools/b/blog/posts/this-week-is-tag-delphi25th

Creating and connecting to MSSQL Database on Azure with Delphi / C++Builder

Creating and connecting to MSSQL Database on Azure with Delphi / C++Builder

I have been asked multiple times recently about connecting to a  Azure databases with Delphi and C++Builder. So….I decided to make a video! Which even shows how to use the data directly at design time in the RAD Studio IDE.

The video follows the the 3 phases.

  • Creating an account
  • Creating a database
  • Connecting to the database from the RAD Studio IDE

Continue reading Creating and connecting to MSSQL Database on Azure with Delphi / C++Builder

Attributes for Documenting TEMSDataSetResource

Attributes for Documenting TEMSDataSetResource

I recently blogged about a number of RAD Server topics, including using TEMSDataSetResource, (the component that enables a TDataSet to be expose as a RESTful resource, and manage all the List, Get, Put, Post, Delete methods – very cool!), how to set named parameters for the TEMSDataSetResource documentation (where multiple keys are passed in e.g. with Master Detail relationships (reviewed below)), and how the YAML and JSON documentation is auto generated with custom RESTful resources / end points

Typically, each custom REST endpoint method (List, Get, Put, Post, Delete), would be supported by separate procedures in the code, with each having their attributes to support documentation, resource name etc. Continue reading Attributes for Documenting TEMSDataSetResource

Developing client applications using RESTful master-detail data with TRESTResponseDataSetAdapter

This is part 3 in my series of developing an REST server and client application and will focus around using the TRESTResponseDataSetAdapter.

In my last two posts, we have created a REST server with a fully documented API using YAML , and exposed 3 datasets with master detail relationships over REST using zero lines of code.  If you have not read and watch the videos. I would suggest starting there. – It’s now time to consume the API into a cross platform Delphi Client.

Steps to making the client

The video and supporting blog post take you through the following.

  1. Setting up components to connect to the REST API. (RAD Style)
  2. Converting the JSON into a master detail datasets (based on the current item in the JSON data)
  3. Enabling the data in the UI with LiveBindings and zero code.
  4. Tricks for reducing API calls.

Continue reading Developing client applications using RESTful master-detail data with TRESTResponseDataSetAdapter