Perth ADUG Meeting (Online)

Topic: ADUG Perth Meeting - May-2025 - 6pm Start (Perth AWST).
Time: 20th May 2025 18:00 Perth 2025-05-20T10:00:00Z
Join Zoom Meeting

Meeting ID: 823 7926 3676
Passcode: 142405

I may go to gaol, Ned Kelly style, for having taken this long to upload Scott van der Linden’s epic presentation to us in November 2024.

The Principle of Loose Coupling. Scott did an amazing job, speaking coherently on the subject for 3 hours.
He has always been a great presenter, and this was another awesome one.

Zoom Summary :

Dependency Injection and Anonymous Methods

Scott van discussed the concept of dependency injection in programming, specifically using classes and constructors. He explained how to decouple a class from a specific widget by passing through a widget class instead of an instance. This allows for more flexibility in instantiating the widget at a later time. Scott also introduced the concept of anonymous methods to handle multiple constructors in descendant classes. Paul asked clarifying questions about the use of class of and the implications of polymorphism, which Scott answered. The discussion concluded with Scott explaining the need for a specific return type when using anonymous methods.

Loosely Coupled Code With Factories

Scott discussed the benefits of using anonymous methods and factories to create loosely coupled code. He demonstrated how to register and instantiate different classes using a single point of contact, which reduces dependencies and makes it easier to swap out units. Scott also showed how to use a factory to generate forms and how to pass parameters through the factory. He emphasized the importance of having a contracts page, or single point of contact, for all classes. Paul and Richard asked questions about the code, and Scott provided explanations and solutions to their concerns.

TValue, TVariant, and TType

Scott van discussed the use of Tvalue and Tvariant in programming, highlighting their flexibility but also their finicky nature. He explained that Tvalue can store practically anything but can be difficult to extract data from, while Tvariant is more straightforward but less flexible. Scott also mentioned the possibility of using TType for storing types, and the concept of an array of types. The team also discussed the mysterious “HFA” acronym, which was eventually identified as a specialized type of pointer used for optimizing storage and calling conventions on ARM and ARM64 platforms.

Lifetime Management in Object-Oriented Programming

In the meeting, Scott van discussed the importance of lifetime management in object-oriented programming, emphasizing the need to manage the lifetime of objects to prevent memory leaks. He explained that forms manage the lifetime of everything they own, and if an object is not part of the form’s descendant, it needs to have another way of dealing with it. Scott also discussed the difference between interfaces and objects, stating that interfaces are purely a contract and do not manage the lifetime of objects. He also mentioned that in C#, interfaces are not reference-counted, but rather managed by the garbage collector. Richard and Paul also contributed to the discussion, asking questions and clarifying points.

Delphi Interface Implementation and Casting

In the meeting, Scott van discussed the implementation of multiple interfaces in Delphi programming. He explained how to handle conflicts between interfaces with the same method or property, and how to use the “implements” keyword to specify the interface being implemented. Richard shared his experience of not finding examples for creating an object as an interface and casting it to another interface it supports. Scott also demonstrated how to use the “supports” keyword to check if an object supports a particular interface. The team also discussed the potential issues that can arise when casting objects between interfaces and the importance of using the correct syntax to avoid errors.

Interfaces, Properties, and Default Values

In the meeting, Paul and Scott discussed the use of interfaces in programming, with Scott explaining the benefits of using interfaces for loose coupling and high cohesion. They also discussed the use of properties in programming, with Scott explaining that properties can be used to enforce read-only or write-only access to fields. The conversation also touched on the use of default values in programming, with Scott explaining that default values can be used to suppress certain values when streaming data.

[As of right now - currently still processing]

I’m sorry, I forgot to post here.

ADUG Perth will be meeting for 2 hrs from 6pm AWST (about 30min away),
and then joining with the UK Dev Group to hear our own @vincent Parrett presenting, in person, in London.


Topic: ADUG Perth Meeting - May-2025 - 6pm Start (Perth AWST).
Time: 20th May 2025 18:00 Perth 2025-05-20T10:00:00Z
Join Zoom Meeting

Zoom

Join our Cloud HD Video Meeting

Meeting ID: 823 7926 3676
Passcode: 142405


Last month we had a good bunch of people (14) turn up for “Delphi Interfaces for the Confused and Distressed”.

I have been making a summary of all the excellent elements that came out of the discussions, along with web links, and other references. BUT they are not typed in yet. :slight_smile:

This is the meat of it :

Getting in to it, listening to @Vincent

1 Like

Perth peeps will be online (and in-person) in about an hour …

Agenda … flexible.


A quick reminder that this month’s ACTUAL meeting will be in-person (and online), tomorrow Tue 15th at the Belmont Dome Cafe again.

We will make a second (at least) attempt to make the audio as good as we can for our friends online.

And we will be hearing in-person about dev for VR :

George Dinnison - has had a conflict, but another dev - Blake Lovelace - is onboard to speak to us.

Last Tuesday … the Non-Meeting Meeting
… pretty much turned into a Meeting(!) ¯\(ツ) :sweat_smile:

Peter Thonell is away overseas for several weeks now … but we got to hear him speak in great detail about some program structure he’d introduced in his ADUG Symposium talk in 2018.

I started & managed to reproduce the very first beginnings of David Millington’s talk from ADUG Symposium 2023, and add a Menu Item into the IDE. With the help of Claude.ai.
The funny thing was we didn’t realise we’d gotten there … just as our conversation tangented off in a different direction.

I will have the video from the day online soon( https://www.youtube.com/watch?v=6r1FiIxUYSU ),

Regular Zoom link below.

Cheers,
Paul McGee


I believe this will be our online Zoom link :

Paul McGee is inviting you to a scheduled Zoom meeting.
Topic: ADUG Perth Meeting - July-2025 - 6pm Start (Perth AWST).
Time: 15th July 2025 18:00 Perth 2025-07-15T10:00:00Z
Join Zoom Meeting

Zoom

Join our Cloud HD Video Meeting

Meeting ID: 823 7926 3676
Passcode: 142405

G’day All.

We will be meeting back online on : Tuesday 12th August, at the usual time of 6:00pm

We will be hearing from :

Myself - on news in the Delphi & FreePascal ecosystem ... eg the impending releases of Delphi 13 & Quartex 1.0
Geoff Smith -  for an update on some recent projects
Peter Thönell - dialing in from Europe, on Notifications (via Interfaces) in his publicly available BatSoft library.

I’m sure AI will be getting a mention in proceedings :smiling_face_with_sunglasses:

Everyone, please feel free to join us if you can …

It should be at the following Zoom details.

Cheers,
Paul McGee

Topic: ADUG Perth Meeting - August-2025 - 6pm Start (Perth AWST).
Time: 12th August 2025 18:00 Perth 2025-08-12T10:00:00Z
Join Zoom Meeting

Zoom

Join our Cloud HD Video Meeting

Meeting ID: 823 7926 3676
Passcode: 142405

1 Like

1 Like

Normally, the next Perth WADUG meeting would be this Tuesday 9th September … but given the imminent release of Rad Studio 13, we are going to push it back a week to Tue 16th … and no doubt talk about the new release quite a bit. :slightly_smiling_face:

PS : Next Melbourne meeting is next mon 15th.

1 Like

Reminder : running through Rad Studio’s latest features tonight at 6pm Perth time.

Plus maybe some OOP questions I’ve had, brought up by the new Ternary Operator.

Zoom Link : as above :fast_up_button: :up_arrow: :upwards_button:

1 Like

Perth meeting is tonight … 6pm Perth time, 9pm eastern daylight savings time.

We had some suggestions last month, but we will see what is going to come up.

Personally, I’ve been working on a presentation, describing Rust concepts in terms of what is familiar to Delphi people … and the recent post about PasFmt encourages me to want to go back again and try to understand more about that (Rust) codebase, with the help of Claude.

Not saying that any of that will be of interest to people at the meeting … but it’s a possible discussion point.

We’ll be happy to see anyone that can make it.

(Also as a sidebar - books about tech companies and software. I gathered quite the list from a podcast that discussed this … haven’t had the time to write up a post yet)

(Another possible topic - figuring out what JetPascal (announced on fb) is and aims to do)


ADUG Perth Meeting
6pm Start (Perth AWST), 6:15 first presentation. (2025-11-11T10:00:00Z)

Join Zoom Meeting
https://us02web.zoom.us/j/85135922335?pwd=MLSisB724fpWbTCxfasjUbPk70MZhq.1

Meeting ID: 851 3592 2335
Passcode: 444000

1 Like

Perth meeting tonight (… it’s sadly ironic that I can’t remember to post here early)

Meeting starting at 6pm Perth time (10am UTC) 2025-12-09T10:00:00Z

@jgardn3r Josh Gardner will be our special guest around 7pm Perth time (10pm eastern) to give us a tour around PasFmt - the (written in Rust) formatter for Object Pascal code.

Josh obviously knows his way around Rust, and has been using static analysis tools (sonar-delphi and delphilint) for Delphi. And I believe automation and/or correctness for generating code changes.

Other topics in the mix :

  • A review of the CodeRage content (6 days!) so far
  • a potential look at Claude-Code, but also
  • some interesting *local* AI functionality (via Ollama) both as the Q&A type of interface, and with
    ollama-code to be able to look directly at your code files and directories.

This should be our Zoom link :

[ it wasn’t ]

Sorry guys …

Join Zoom Meeting
https://us02web.zoom.us/j/85135922335?pwd=MLSisB724fpWbTCxfasjUbPk70MZhq.1

Meeting ID: 851 3592 2335
Passcode: 444000

A summary of our discussion with Josh Gardner, about PasFmt. Video will be available asap.

@jgardn3r Josh Gardner - IntegraDev - Melbourne

HOLD THE PRESS:  
  • I just realised they have an IDE plugin. I would have 100% interested to ask more about that process!
    

Background

  • IntegraDev has a polyglot system, including a lot of Delphi.

  • They use and have contributed a community Delphi plugin to SonarQube - a platform for automated code quality and static/security analysis.

  • The company created DelphiLint as an IDE plugin for sonar-delphi.

  • As a Delphi code base that is 20+ years old, the formatting was highly variable.

  • Josh researched and iterated the idea for the formatter for a long time before starting the project properly.

  • Eventually, the project was greenlit for Josh and a colleague to work on during company time.

Language

  • It is written in Rust, as Josh had an interest in it, was learning it, and had a more familiar coding partner to learn from.

Project

  • The code is open source on GitHub.¹

  • They don’t use any Rust libraries for lexing or parsing and represent the code as “logical lines” rather than in an AST. [ie lines that ‘should’ naturally sit on a line together ]

  • Parsing and optimising approach inspired by Clang Format (C++).

  • Determining the approach to take was a significant deal.

Style Guide

  • Primarily influenced by Google Java Format and their “Rectangle Rule”. ²

  • They canvassed the other developers to some extent.

Delphi Code

  • Delphi’s one- (or low-) pass compilation has certain idiosyncratic features.

  • ‘ifdefs’ (conditional compilation) were a challenge to deal with, but the solution was inspired by Clang Format.

  • It doesn’t touch inline assembly code. [ and comments, I think ]

Parallel

  • It will process all input files in parallel threads

TDD

  • Developed with many tests, in a TDD manner.

Web Demo³

  • WASM functions compiled directly from the same Rust source code.

  • Javascript/Typescript source was created to utilise the WASM functions. [ kinda like using a DLL ]

  • Runs entirely locally. No source code text leaves your browser.

Future Development

  • How will it cope with future changes in syntax (like recent ternary operator)?

    • They have ideas, but are lacking the time to work on it.

¹ Github : GitHub - integrated-application-development/pasfmt: Delphi code formatter
² Rectangle Rule : The Rectangle Rule · google/google-java-format Wiki · GitHub
³ Web Demo : pasfmt demo