Wednesday, 23 September 2026

And now for something completely different

For those who don't know ...

I have been (and still am) an avid player of Magic: The Gathering since 1995 when Ice Age was released. There was a solid near-decade-long hiatus starting in the 2010s when making money in my software dev career obviously took higher priority than turning cardboard sideways, but soon went back on the cardboard crack train when this hiatus ended.

Over time, my MTG card and deck collection has obviously grown to levels that mental cataloguing/inventory of the collection in my brain no longer cuts it. I need to know where every playable card is at any given time so that when I build a deck, I can easily know if I have a given card for a given quantity, and not waste $$$ buying singles from my LGS or online when I actually have the cards in question.

Obviously this means looking for a tool for card collection management and tracking, but most of the solutions are for smart phones or are websites. I want to track my collection locally from my desktop computer, not from my phone or some third party website.

So as a software developer by trade, the solution was obvious: Build my own MTG collection tracker!

Since this need for a collection tracker came around the time I had concluded my Avalonia test run, this was also the perfect project to fully dive in to building an actual multi-platform .net GUI application using Avalonia.

So after 2 years of development and strong internal dogfooding tracking a personal collection of over 10000 cards, I am ready to reveal this project to the public.

Introducing ... the MTG collection tracker (totally original name! Yes, I know)

This is a .net multi-platform desktop application using Avalonia. On Linux, which is now my daily driver OS after the forced migration from the (end-of-life) Windows 10, it is shipped as an AppImage, making the app an easy single file you can double-click to run.

Collection data is stored in a SQLite database via EFCore. It uses the Scryfall API for card data/images and downloads price data on-demand from MTGJSON, which lets us do things like tracking price history for every card.


Some other key features of the app include:

Deck management and viewing



Wishlist management, so you know what cards you are intending to buy or trade for.


My most used feature: An easy way to find out if you can build a given deck based on your current tracked collection, with a button to easily add the cards you don't have to your wishlist.


General note taking capabilities


And finally, the end result of early DeepSeek evaluation after the GitHub Copilot rugpull: A crude, but functional play-testing surface for any deck in your collection!


So if you play Magic like me and have a need to track your collection and the existing solutions out there don't cut it for you. Maybe this app will fit the bill for you, like it has for me.

Project on GitHub

Tuesday, 22 September 2026

For the price of a cup of coffee ...

Our DeepSeek credit spend has yielded thus far:

When used properly (let's call it: vibe, but verify), AI is indeed a beneficial force multiplier of one's existing capabilities. I certainly wouldn't have achieved this volume of MapGuide and FDO wins in such a short time-frame otherwise!

And the spend has only been equivalent to a cup of coffee!

And we're just getting started!

Sunday, 13 September 2026

What happened to that plan?

5 months ago, I laid down the plans for what was going to happen going forward with my various open source projects. But after that post, it has been nothing but ... silence! If you were to look at my GitHub contribution graph, there was also a noticeable drop-off there too.

So what happened?

What happened was there was a major rug-pull. GitHub copilot changed their pricing model to usage-based billing on June 1 and that completely threw by GH copilot powered plans into complete disarray. The existing subscription at that point pretty much amounted to ~30 spins on the AI slot machine per month, hoping it will produce the outcome I desire and that was just untenable for something I am paying out of my own pocket!

So come June 1, I terminated my GitHub copilot pro subscription and pondered what my next moves were going to be. I wasn't going to give up on the productivity gains that agentic coding gave me, so the option was clearly to look for alternative AI coding provider. Because try as I might (I religiously keep watch on advancements in LocalLlama), locally hosted AI coding models is not (yet) tenable on my personal hardware. I bought that PC to 6 years ago to last a decade at least, and it will still last a decade as long as you give up on locally hosted AI models as desired workload.

I eventually settled on Deepseek and straight away, its payment model was very attractive to me: Just load up your account on credits and reload when credits start running low. This was a low risk approach where I loaded up $20 $10 USD in credits, give it a spin on my various open source projects. If Deepseek didn't pan out for my use cases, no harm, no foul. I simply don't reload with any more credits. But if it did work out for me, I can just load more credits as I go.

So as my initial $20 $10 load is down to its final dollar after several months of sporadic evaluation. I can confidently say that Deepseek adequately meets my AI coding agent needs while maintaining the "bang for buck" that I used to have with GH copilot before their June 1 rug-pull. I will lose some capabilities from GH copilot (cloud agents was nice), but they are acceptable losses.

So what that means in the grand scheme is that I should start ramping up my OSS dev machinery again and resume the plans that I had stated 5 months ago. Our regular broadcasting will resume shortly!

Thursday, 9 April 2026

New plans and stuff

So after finally getting MapGuide Open Source 4.0 out the door, I took a self-imposed hiatus from all things mapping/GIS related for several months, permanently moved from Windows to Linux as my daily driver OS just in time before the end of Windows 10 support, and also to mentally recharge and savor the relief of having this major burden (of releasing MGOS 4.0) being finally lifted off of my back.

I now return with a renewed vigor and some rough roadmaps for things going forward in MapGuide and my other various projects. Part of that renewed vigor is due to the advent of ...

GitHub Copilot

In the past few months in my day job, I have been exposed to GitHub Copilot and it has changed the way I build and ship software, some changes bad, some changes good. Say what you will about AI (or AI-generated code/content) in general, but GitHub Copilot (or any other AI coding assistant) has ultimately been a net positive for me.

What separates how I use AI coding assistants from most depictions of "vibe coding" is that I know the technical and architectural fundamentals of what I am actually after. So I know when GH Copilot is generating what I'm after and when it's generating garbage, and knowing the right prompts to guide it back on track if it starts going off the rails, or know when to cut my losses if the situation is un-salvageable.

So with several months of GH Copilot usage at work, I have been thoroughly convinced that I should get a GH Copilot pro subscription for my own personal use. So last month, I finally bought a GH Copilot pro subscription and ... proceeded to blow my monthly allowance of usage credits in 2 weeks! ðŸ˜‚

But in those 2 weeks, I was able to make some major progress in mapguide-react-layout, knocking off some long standing technical debt and feature requests, some of which you'll see in future dev diary updates on this blog. The productivity gains were massive and turnaround times were quick! A new month has rolled over and with that, a reset of my monthly allowance and I have since learned to judiciously use GH Copilot in a less wasteful manner.

So, now armed with GH Copilot, I have a rough roadmap of things I want to achieve in my various projects, which are all outlined below. So let's start with MapGuide.

MapGuide Open Source

The next release of MapGuide Open Source will be 4.0.1. It will be a bug fix release and include any updated web tier components and upstream FDO fixes since the 4.0 release.

Since permanently moving to Linux as my daily driver OS and understanding that I will still need to produce Windows builds of MapGuide and FDO, I've been re-establishing my windows dev environments for MapGuide/FDO inside a virtual machine and reinstalling all the necessary dev tools. 

One surprise that caught me off-guard was installing Visual Studio 2026 Community Edition. Even though MSVC 2019 is the standardized windows compiler for building MapGuide/FDO on Windows, we can install older compiler workloads on newer releases of Visual Studio. So as part of reinstalling all the required dev tools, I thought it would be a simple case of installing VS 2026 with the MSVC 2019 compiler workloads and everything should be all good, right?

Well, near the tail end of my first MapGuide windows build inside this new VM, I hit a snag on the Windows Installer portion. It turns out our WiX 3.x installer projects are no longer supported in Visual Studio 2026! I was not going waste time and disk space to install VS 2022, so I looked at what options we have for Visual Studio 2026. The answer was to migrate our installer projects to WiX 6.x.

Before GH Copilot, the migration process would've been tedious, having to read migration docs, assess the impact of any breaking changes, etc, etc. But with GH Copilot, I was able to migrate and iterate rapidly towards a WiX 6.x windows installer project that successfully builds and produces a MSI installer.

Now here comes the tedious part that GH Copilot cannot help me with. I still have to manually test this Windows installer, making sure all the feature toggles, custom actions, registry and start menu registrations still work as before and I expect this to take several weeks.

Once this updated Windows installer has been verified as working, there'll be a 1-2 week window of incorporating any bug fixes and updated web tier components before putting out the 4.0.1 release.

mapguide-rest

We will start wrapping up various loose ends on this project. The next release will be 1.0 RC7 and will:
  • Drop support for versions of MapGuide Open Source older than 4.0.
  • Represent mapguide-rest as being feature complete. RC7 to final will be bug fixes only.
I expect GH Copilot to pull heavy duty in helping me knock off all of these long standing items.

mapguide-react-layout

The next release will be 0.15. It will have some exciting new features that you'll see in future dev diary entries on this blog, but the main feature will be to fully decouple ourselves from the Blueprint UI toolkit. Blueprint gave us a nice cohesive set of UI building blocks, but our production bundle sizes have paid a price for this convenience, not to mention that integrating this viewer into other projects that use other UI libraries is problematic as Blueprint is always included, whether you like it or not.

As part of this dev cycle, I've been taking inventory of everything in Blueprint that we actually use and refactoring their usages through a layer of indirection of "abstract UI components" so that we can supply an alternative implementation that is more bare metal and whose appearance and styling can be customized through good ol' CSS.

0.15 will be on the horizon upon the completion of this Blueprint replacement. GH Copilot has paying massive dividends in terms of progress and momentum on this particular project, so I am hoping for a fast turnaround on these remaining items.

MapGuide Maestro

Finally we come to MapGuide Maestro. I will finally bite the bullet and put an end to this endless series of 6.0mSomeNumber releases by putting a final MapGuide Maestro 6.0 release. This 6.0 final release represents the end of MapGuide Maestro in its current form as a Windows Forms based MapGuide authoring and administration tool.

After the 6.0 final release is out. MapGuide Maestro will be rebuilt from the ground-up as a true cross platform MapGuide authoring and administration tool. It will be built on modern .net (and all of its patterns and practices) and our ability to have a true cross-platform UI will be achieved through the use of Avalonia as our UI toolkit. 

A little experiment some years ago plus experience from building/maintaining a separate personal project that uses Avalonia for the UI (not yet announced/revealed on this blog, maybe I will someday) and once again armed with GH Copilot, I have great confidence in pulling off a ground-up rewrite.



And that is a peek into what's in store in the near future. Exciting times are ahead!

Sunday, 12 October 2025

Announcing: MapGuide Open Source 4.0 Final (yes, you read it right!)

I am pleased to announce to final release of MapGuide Open Source 4.0!

It has been 6 years, 6 months and 14 days since the last major stable release (3.1.2). What started as something that was supposed to be the 3.3 release stretched out to what is now the 4.0 release. Maybe some things could've been done better to not make this release gap so big, but things transpired the way they did and what's done is done.

Download

Wednesday, 10 September 2025

Announcing: MapGuide Open Source 4.0 RC1 and MapGuide Portable

We're on the home stretch now!

The first (and hopefully only) release candidate of MapGuide Open Source 4.0 is now available.

Changes since Beta 3

This release has the following changes since Beta 3:

  • A new .net repository admin tool that replaces the existing series of PHP scripts that required a super-ancient PHP binary.
  • Apache httpd updated to 2.4.65
  • PHP updated to 8.3.25
  • Tomcat updated to 9.0.108
  • Plugged a memory leak in selection processing if it throws an FDO exception
  • The .net bindings now have experimental support for Linux

New nuget packages

As a test run for the final release, the .net bindings have also been published to nuget.
To get started building a .net MapGuide application for 4.0 RC1, install the above packages (ver 4.0.0.10185) via the nuget package manager or via the dotnet CLI.

Need an idea or example of how to build a MapGuide application using these packages in modern asp.net core? Have a look at the mvc core sample.

As already stated, these bindings also have experimental support for Linux, meaning you can publish your .net application to run on Linux as opposed to Windows. Here's a screenshot of the mvc core sample application published to and running on Linux, talking to a MapGuide Server also on Linux being contacted from a web browser on Windows.


MapGuide Portable

The sub-project formerly known as mg-desktop is now known as MapGuide Portable (or mg-portable).

Why the name change? The "desktop" moniker felt too constricting. You're not exclusively tied to building just desktop applications. You could build "headless" console applications or maybe even MapGuide Server-free web applications with this library. As such, "portable" is the better moniker as it is a MapGuide Platform that goes with your application, in effect being portable.

Why are we mentioning MapGuide Portable in a 4.0 RC1 announcement? Because our extensive work on generating API bindings with vanilla SWIG had some minor splash damage. As MapGuide Portable builds on top of the shared Foundation/Geometry/PlatformBase series of libraries, we'd be leaving this in the lurch if we got these new fancy .net bindings for MapGuide proper, but still had to resort to the old crufty legacy bindings for MapGuide Portable, so extra effort was spent to get the .net bindings for MapGuide Portable to not only be generated through vanilla SWIG as well, but also retain package modularity by being able to depend on the new Foundation/Geometry/PlatformBase nuget packages.

The end result is a new series of nuget packages that you can use either in a legacy .net Framework 4.8 WinForms application or a WinForms application in the new modern .net!


Unlike the proper MapGuide API nuget packages, the MapGuide Portable packages are still Windows-only (since WinForms is tied to Windows). The new MapGuide Portable packages are:
The older mg-desktop-* packages on nuget should be considered deprecated and you should move over to these new MapGuide Portable nuget packages as these packages support modern .net while the mg-desktop-* packages can only be used in legacy .net Framework.

The final stretch

Between RC1 and the Final release I will be primarily focusing on an API documentation sweep, getting functional API documentation up and ready. Only bugs of a show-stopping nature will be addressed and only if such bugs have easy means of reproducing (I can only do so much). I am allowing for up to a month for this development window before the Final release, so that we can wrap things up before Windows 10 reaches end of life, just over a month from now.

This long and arduous journey is almost at an end!

Friday, 6 June 2025

Announcing: MapGuide Open Source 4.0 Beta 3

A new beta release of MapGuide Open Source 4.0 is now available.

The main driver for this release is updating an assortment of bundled components:

  • PHP updated to 8.3.20
  • Apache httpd updated to 2.4.63
  • Tomcat updated to 9.0.104
Sticking with PHP 8.1 would've meant that come November this year we would be bundling something that would've been end-of-life. Updating our bundled PHP to 8.3 gives us the maximum possible runway in terms of support (on the PHP side) as its end-of-life is 2.5 years from now.

This release also plugs an assortment of memory leaks found in:
  • The King Oracle FDO provider
  • Rendering of tiles from tile sets
  • Rendering of watermarks
  • In-memory feature joins
  • Render profiling