Thursday, May 28, 2020

Delphi 10.4 Sydney is here!

Hi folks,

Delphi 10.4 Sydney has just released and this version comes with a lot of interesting features:

    • New Delphi CodeInsight based on LSP server
    • Custom Managed Records in the Delphi Language
    • New VCL Components, including TEdgeBrowser, and expanded High DPI support for VCL styled applications
    • Enhanced Delphi multi-device platform support integrating newer Apple APIs and supporting the latest Android
    • New LLDB-based debugger for Windows 64-bit for C++
    • Unified installer for online & offline installations
    • GetIt Package Manager Enhancements

            I would like to spend few words around the features that impressed me:

            Code Insight Technology in Delphi 10.4

            From David Millington blog post:

            In 10.4, Code insight features are implemented using a ‘LSP Server’. LSP refers to the Language Server Protocol, which is a standardized way to implement code insight-like features for many languages. An IDE talks to a ‘language server’, which is a small helper app that calculates and generates the information the IDE displays. It does so using a defined protocol, and that’s the language server protocol.

            In other words, the IDE now talks to a helper app when you do something like open a project, or type a keystroke in your file.

            What does it means?
            • Communication with another process is asynchronous
            • The work is done in another process
              • This means all the memory usage for calculating results is no longer in the IDE itself. The IDE has more memory, and the helper app can use its entire memory space dedicated solely to providing results
            • What you see onscreen is what the compiler sees. 
              • If your code compiles, you won’t see any Error Insight errors; conversely, if you do see red squiggly underlines in your code or in the Structure view, your code will not compile.
            • You can get code completion while debugging.

            If you want to know more about it have a look to David Millington post 

            Custom Managed Records 

            This is absolutely the top new language feature of Delphi 10.4!

            Now in 10.4 the Delphi record type supports custom initialization and finalization:

            From Marco Cantù blog post:

            You can declare a record with custom initialization and finalization code regardless of the data type of its fields, and you can write such custom initialization and finalization code.
            This is achieved by adding specific, new operators to the record type (you can have one without the other if you want).
            Below is a simple code snippet:

              TMyRecord = record
                Value: Integer;
                class operator Initialize (out Dest: TMyRecord);
                class operator Finalize(var Dest: TMyRecord);

            The huge difference between this construction mechanism and what was previously available for records is the automatic invocation. If you write something like the code below, you can invoke both the initializer and the finalizer, and end up with a try-finally block generated by the compiler for your managed record instance.

            Marco Cantù post to know more.

            GetIt Package Manager Enhancements

            GetIt Package Manager Enhancements in Delphi 10.4:
            • the ability of sorting the list of entries by date, seeing the most recent ones on top
            • for each entry you have already installed, the indication that an updated version is available
            • the ability to list all installed entries that have an update available

            Rad studio patches

            A killer feature of the new GeIt is absolutely the ability to use GetIt to distribute patches, with a specific way to alert customers that a patch is available. There is a new section to the Welcome page to indicate when a patch is available and you have not installed it:

            Here a screenshot of Rad Studio patches in action:

            As you can see there is already a patch available through GetIt, this will completely revolutionize the patches distribution!

            Webinar Delphi 10.4

            Here the link for the launch webinar - - Enjoy it!

            Other useful resources 

            As you can see from the info above this is a fantastic release! Enjoy it!

            Tuesday, January 8, 2019

            Delphi Flux application architecture

            A good application architecture

            Finding a good application architecture is not easy, but defining an architecture for your application is important: like it or not, every application is going to have an architecture.
            There is no such thing as the Best Architecture, but there is the Best Architecture for your current application! (finish the project on time, with quality, less bugs as possible - no bugs preferred :) - and easy collaboration with your teammates).
            Flux is the application architecture that Facebook uses to structure client-side web applications, is very simple to understand and there is almost no code for it. It's just a way to do things.
            It’s a Clean Architecture so it’s not intended only for web apps, but its features and simplicity will allow us to adapt it very well to other kind of projects.
            I believe Flux is very good choice.

            Delphi Flux

            Base Flux concepts, I created a project on Github Delphi-Flux-Seed. This project is an application skeleton to apply Flux concepts in Delphi applications. You can use it to quickly bootstrap your Delphi application. 

            About Delphi Flux I held a session at CodeRage 2018, so you can watch the replay of that session at this link. Here are the slides of my presentation at CodeRage 2018:

            Monday, August 6, 2018

            Delphi Cookbook - Third Edition

            This book is the 3rd edition of the Delphi Cookbook serie: Delphi Cookbook is a best sellers for PacktPub (the editor) in its category, so the editor decided to ask me a 3rd edition in co-authorimg with Daniele Teti (author of the 2 previous versions). So here it is!

            What's new

            In this third edition we wanted to add content to keep the book updated with emerging technologies and new features made available by Delphi: there are 2 chapters completely new, one for Linux Development and one for Integration with IoT, added useful chapters on FireDAC and RTTI attributes. Furthermore, this edition contains all the recipes from the previous editions updated to the new Delphi 10.2 Tokyo: reaching 780 pages for 78 recipes!

            This book today lets you learn all the development possibilities offered by Delphi: cross-platform (Firemonkey), mobile applications (Android and iOS), server-side programs (Linux and Windows), integration with IoT, working with data (FireDAC, JSON, XML) and so on...

            Topics of the book

            • Develop visually stunning applications using FireMonkey
            • Deploy LiveBinding effectively with the right OOP approach
            • Working with data (JSON, XML)
            • Design, develop and deploy server-side programs to serve RESTful web services (Linux and Windows) and provide data to your mobile apps
            • Use well-defined GUI design patterns to build mobile applications that provide a great user experience
            • Extremely useful recipes on FireDAC database access framework
            • Build mobile apps that read data from a remote server efficiently
            • Call the platform native API on Android and iOS even for an unpublished API
            • Manage software customization for your customer by making better use of an extended        RTTI
            • Implement the most popular design pattern without wasting too much time on debugging and bug fixing
            • Enrich your knowledge of Delphi deepening the libraries made available
            • Integrate your applications with Internet of Things

            It is not an introductory book, you will not find any “Introduction to the Object Pascal language”, however the majority of the chapters are not too complex and can be grasped also by the new Delphi programmers.

            Another interesting thing is that thanks to the release of the Delphi Community Edition (you do not know what it is ?? go here ...) all chapters except chapters 6 and 7 can be addressed through the use of this free version. For chapters 6 and 7, as it is Linux and server-side development, the Enterprise version of Delphi is required.

            Where to buy

            The book is available for sale on the editor website and on Amazon.

            PacktPub (Official book page)


            GitHub repo for recipes code

            Table of contents

            Chapter 1: Delphi Basics

            • Changing your application's look and feel with VCL styles
            • Changing the style of your VCL application at runtime
            • Customizing TDBGrid
            • Using owner-draw combos and listboxes
            • Making an owner-draw control aware of the VCL styles 
            • Creating a stack of embedded forms 
            • Manipulating JSON 
            • Manipulating and transforming XML documents 
            • I/O in the 21st century – knowing the streams 
            • Creating a Windows Service 
            • Using the TService.LogMessage method 
            • Be coherent with the Windows look and feel using TTaskDialog 
            • The amazing TFDTable – indices, aggregations, views, and SQL 
            • ETL made easy – TFDBatchMode 
            • Data integration made easy – TFDLocalSQL 

            Chapter 2: Becoming a Delphi Language Ninja 

            • Fun with anonymous methods – using higher-order functions 
            • Writing enumerable types 
            • Using enumerable types to create new language features 
            • RTTI to the rescue – configuring your class at runtime 
            • Duck typing using RTTI 
            • BOs validation using RTTI attributes 
            • Creating helpers for your classes 

            Chapter 3: Knowing Your Friends – The Delphi RTL

            • Checking strings with regular expressions 
            • Consuming RESTful services using native HTTP(S) client libraries 
            • Coping with the encoded internet world using System.NetEncodings 
            • Saving space using System.Zip 
            • Decoupling your code using a cross-platform publish/subscribe mechanism

            Chapter 4: Going Cross-Platform with FireMonkey

            • Giving a new appearance to the standard FireMonkey controls using styles 
            • Creating a styled TListBox 
            • Impressing your clients with animations 
            • Using master/details with LiveBindings 
            • Showing complex vector shapes using paths 
            • Using FireMonkey in a VCL application 
            • Reinventing your GUI, also known as mastering Firemonkey controls, shapes, and effects 

            Chapter 5: The Thousand Faces of Multithreading

            • Synchronizing shared resources with TMonitor 
            • Talking with the main thread using a thread-safe queue 
            • Synchronizing multiple threads using TEvent 
            • Communication made easy with Delphi Event Bus 
            • Displaying a measure on a 2D graph like an oscilloscope 
            • Using the Parallel Programming Library in the real world: Tasks 
            • Using the Parallel Programming Library in the real world: Futures 
            • Using the Parallel Programming Library in the real world: Parallel For/Join 

            Chapter 6: Putting Delphi on the Server 

            • Developing web client JavaScript applications with WebBroker on the server 
            • Converting a console application into a Windows service 
            • Serializing a dataset to JSON and back 
            • Serializing objects to JSON and back using RTTI 
            • Sending a POST HTTP request for encoding parameters 
            • Implementing a RESTful interface using WebBroker 
            • Controlling remote application using UDP 
            • Using app tethering to create a companion app 
            • Creating DataSnap Apache modules 
            • Creating WebBroker Apache modules 
            • Using native HTTP(S) client libraries 
            • Logging like a pro using LoggerPro 

            Chapter 7: Linux Development 

            • Creating Linux TCP/IP servers
            • How to correctly handle Linux signals
            • How to build a modern Linux daemon 
            • Building a TCP/IP Linux server and daemonizing it 
            • Building a RESTFul server for Linux 
            • Building a complete RESTful server with database access and web client interface 
            • Creating WebBroker Apache modules for Linux 

            Chapter 8: Riding the Mobile Revolution with FireMonkey

            • Taking a photo, applying effects, and sharing it 
            • Using TListView to show and search local data 
            • Using SQLite databases to handle a to-do list 
            • Do not block the main thread! 
            • Using a styled TListView to handle a long list of data 
            • Customizing the TListView 
            • Taking a photo and location and sending it to a server continuously 
            • Talking with the backend 
            • Making a phone call from your app 
            • Tracking the application's life cycle 
            • Building your own SMS sending service with the REST API 

            Chapter 9: Using specific platform features

            • Using Android SDK Java classes 
            • Using iOS Objective-C SDK classes
            • Displaying PDF files in your app 
            • Sending Android Intents 554
            • Letting your phone talk – using the Android TextToSpeech engine 
            • Using Java classes in Android apps with Java2OP 
            • Doing it in the background, the right way – Android services 

            Chapter 10: Delphi and IoT 

            • How to blink an LED using Arduino 
            • How to drive multiple relays with Arduino and Delphi
            • Reading data from Arduino 
            • How to blink an LED using Raspberry Pi 
            • How to drive multiple relays with Raspberry Pi and Delphi 
            • Reading data from Raspberry PI