Adam’s November 2018 Meeting Summary


  • Talk: Writing real-time collaboration software – David Capps
  • Talk: Creative debugging techniques: Part 2 – Brian Long
  • Nugget: FMX – 3D elements on forms – Ian Hamilton

Adam’s Summary

Jon Aasenden pulling out at short notice left us with a hole in the schedule very adequately filled by Brian Long with an excellent session on advanced debugging techniques.

Dave Martel spoke for about 15 minutes about his experiences with Assembla, an SAAS tool providing source-code control. Assembla has recently been bought by Idera, owners of Delphi. This sparked a bit of interest in the product. Dave showed how it integrates with conventional source-code repository software such as GITT, SVN or Mercurial and allows complex issue/bug-tracking. A 10 user annual license is roughly $600.

At the start of the session members discussed plans to work on the VAT API. It’s looking like January’s meeting will now be dedicated to this as there are a number of members working on this.

Brian spoke at length about debugging. First about the potential for “side-effects” in which adding watches and break-points to code can trigger methods unexpectedly. He showed a wide range of techniques with break-points including how to create and use Break-point groups. A new one on me was the fact that once execution is stopped by the debugger, it is possible to drag the blue execution-point indicator to another location to advance execution, skipping lines. We were reminded that you get one call stack per thread, and it is always useful to check that you select the correct thread prior to checking the call-stack window. The usefully named “NameThreadForDebugging” method comes in handy here.

David Capps then spoke about writing real-time collaboration software.
David has written an application VTable, which allows users to share a “Desktop”, this can include graphic and textual visual features. As any one user updates this Desktop, all the users’ views update.
David has written VTable in Visual Studio, using the Lidgren library to pass data between instances of the application using UDP. He has also used the Skia graphic library. Use of UDP allows very fast execution, even on relatively slow and unreliable WiFi connections, but means that data-packets are not guaranteed to arrive. Lidgren works around this, giving an extra wrapper around the UDP standard to help guarantee data integrity where necessary. David discussed serialization and de-serialisation of data-objects into XML and how to do this selectively to reduce data-requirements.

Ian Hamilton then showed using Firemonkey to display 3D images on forms. The statement that caught my eye was: “It was easier for me to move from Delphi to C# than it was to move from VCL to Firemonkey 3D” Ouch. Not exactly a recommendation there!
The main issue with programming 3D work seems to be the vast amount of baggage that comes over from the world of visual-animation. Objects are placed in “ViewPorts” on forms and given 3D positioning with X, Y and Z co-ordinates. The position of the “viewer” (user) is represented by a “Camera”, allowing complex panning. Objects have “lights” applied to them, and can have “Textures”.

Many of these features feel arbitrary. For example Textures apply somewhat randomly and objects have different “sides” which are given names like “Source” (front) “Back” (back) and “Shaft” (all the other sides!). If you are used to the language of 3D animation this all makes sense, but it leaves more rational beings scratching their heads a bit.

Overall it was a good final, formal meeting for 2018, with about 20 people present on a warm winter day. See you all again in 2019.