Will’s June 2019 Meeting Summary


  • Using OmniThread Library – RussellW
  • PI / Arduino / Lazarus – Lorenz Wolf

Will’s Summary

(Kindly accept substitutes. In the sorry absence of Adam and Jason, session leader Brian let me wear the minute-taker badge.)

A pretty full house gathered at our new-ish venue The Greene Man for the June bash. Brian delivered himself of the news. As well as conventional items such as Embacadero’s new product roadmap and the ‘wormable’ vuln which has inspired Microsoft to offer a security patch for defunct OS Windows XP, Brian included a generous portion of whimsy. For example Microsoft has released a YouTube video https://youtu.be/8gw0rXPMMPE to promote a new version of Windows Terminal (i.e. the thing that runs cmd.exe). And on June 7th, a Borland software patent on the Quattro Pro feature of tabbed panes in Windows applications finally expired – apparently Microsoft licensed it for use in Excel.

The usual problem clinic session followed, with an even lower success rate than usual. A veil is drawn.


RussellW gave the first talk proper, which dealt with the well-established open source library Omnithread http://www.omnithreadlibrary.com/. Russell first gave a brief overview of the library’s capabilities, and the programming models it offered that he personally had used (he indicated that others are available – the library is vast).
  • Parallel.Async – ‘Fire and forget’
  • Async.Await – similar to the .NET model
  • Timed Task – Fires on a schedule, eg once every 10 seconds
  • Background Worker – the key threading element, processing a queue of tasks using a pre-allocated pool of threads
Russell then gave us a fairly detailed case study of the library’s use: an invoice-generation project where he had been required to produce extremely high-performing code to meet his customer’s ill-specified and ever-tightening requirements.
Finally, he demoed each of the Omnithread models with some simple programs. Interestingly (okay so I was interested), the library promotes the ‘fluid’ style of coding often favoured by JavaScript libraries, where calls to the property-setting methods of objects all return the object itself, enabling a sequence of calls to be made separated only by the . operator:

Parallel.TimedTask.Every(2000). TaskConfig(Parallel.TaskConfig.OnMessage(Self)). Execute( { anonymous procedure here } );

Russell was very warm in his opinion of Omnithread, especially the Background Worker system for scheduling tasks, and successfully transmitted his enthusiasm, making me want to try the library myself.
Incidentally, he also mentioned the alternative memory manager ScaleMM https://github.com/andremussche/scalemm which dug him out of a hole in which the usually reliable FastMM4 had dumped him.


Next up, LorenzW brought in his toy-box (this description (c) BrianL) of half-a-dozen assorted Arduino and Raspberry devices, most of which he seemed to have plugged in at once. He created his very own Intranet of Things before our eyes. (See attached photo.)
Lorenz gave us some background on how the Arduino evolved from the basic Arduino Uno to the smaller Nano to positively teeny Arduino Pro Mini, and demonstrated several devices blinking an assortment of LEDs.
He also showed us the Windows programming environment that is used to create software for them, downloading code directly into their firmware via a USB connection. The language is a version of C++.
(I noticed from a comment in the code that the original Arduino ‘LED blink’ demo had been written by one Scott Fitzgerald, whose ambition seems to have shrunk since his glory days of writing The Great Gatsby.)
Then Lorenz showed us various models of Raspberry Pi, and used two of his tame Pis to drive the room’s main screen, showing off its Linux GUI.

Lorenz had installed the Free Pascal Compiler and the Lazarus IDE, which looked a bit like Delphi 5. There are many ways to access the Pi’s I/O from within Pascal, including the PXL https://asphyre.net/products/pxl library, which was interesting because it has some degree of platform independence.

Lorenz finished off his session by demonstrating a neat system called Node-RED https://nodered.org/. It runs as a Node.js process on a Pi, and exposes a surprisingly interactive and powerful-looking graphical editor running in the web browser. By dragging shapes around, you can connect together IoT pieces of hardware and so quickly produce prototypes of little systems. Definitely one to try out on that Pi you bought three Christmases ago, and haven’t had out of the box since.


Finally, Delf product manager and former textbook generator Marco Cantù was in Town to pick up hos daughter from college, and Jason had somehow persuaded him to turn up at The Greene Man. Marco had no presentation, but instead placed himself at the mercy of the meeting, accepting hostile and less hostile questions from the floor with a grace and goodwill that argued long practice.
The detailed woes of licence holders of earlier Delphis proved as unresolvable as ever, but Marco was able to cast light on the new Embaracdero road map https://community.idera.com/developer-tools/b/blog/posts/rad-studio-roadmap-may-2019. He admitted that the drive to 64-bit on the part of Mac OS and Android, and the frequent incremental but disruptive changes in iOS had forced the development team to devote precious resource to catching up instead of concentrating on improving Delphi and C++ Builder.
In particular, there is a big push to sort out the IDEs of both Delphi and Visual C++. The current IDE Intellisense features, which apparently are powered by a disparate set of parsers, are finally to be ripped out and replaced with a single system, conforming to a Microsoft standard for integrtating programming languages into compilers (for example, TypeScript in Visual Studio Code).
Not only does this raise the prospect of the notorious ‘red squiggle’ system of indicating language errors in Delphi being fixed, there is the possibility – Marco emphasised that it was only a possibility at this stage – of editing Emb languages from within Visual Stuido/Visual Studio code with active Intellisense support, and/or editing Microsoft languages within RAD Studio.
Also – another one for language nerds like me – Marco floated the possibility of introducing nullable types https://en.wikipedia.org/wiki/Nullable_type into the Delf language, once they have worked through the current crop of must-fix-for-platform issues. Which would be nice.
PS: Brian wanted me to I note that Martin has volunteered to deliver a nugget talk on Directory Opus 12 – a Windows Explorer replacement – in July.
PPS: The Greene Man stocks Newcastle Brown Ale. Hurrah!