Wespal 0.5.0, and musings on KDE Frameworks

Wespal version 0.5.0 is out now! And it’s a very packed release this time around, more than even 0.4.0.

The main highlights for this release include built-in support for Krita and OpenRaster image formats (.kra, .ora) on all platforms, once again courtesy of KDE Frameworks 6; a redesigned main preview UI, a new Settings dialog, a Base64 image URI generator, and several quality-of-life changes and fixes.

Downloads for Windows, macOS, and Linux are available at the Project page or at the v0.5.0 release page on GitHub.

Note: Windows and macOS users may need to work around app signing requirements.

There are so, so many changes this time around that if you want a full list of them, it’d be best if you looked at the changelog found in the v0.5.0 release page on GitHub. To give you an idea, this was originally meant to be Wespal version 0.4.1, but I ended up cramming so many significant features into it that I decided to bump it to 0.5.0 instead.

Let’s go over a few of the more notable additions for this release, before I go into more detail about a couple of them and bore you with an extensive technical rant involving KDE.

Continue reading “Wespal 0.5.0, and musings on KDE Frameworks

Wespal now has unit tests

While working on Wespal 0.4.0 I ran into many regressions, some of them caused by code refactoring, others by behavioural changes I didn’t entirely foresee, including a particularly annoying one involving the XCF plugin and embedded colour profiles that took me about three nights to have an eureka moment about.

Screenshot of a GitHub Actions job output

My future self is gonna be thankful some day that I finally added a CI workflow and test suite to Wespal, built and run on Linux, macOS, and Windows for each push via GitHub Actions, so I can promptly find out if I accidentally break some of the more crucial components, or cause the whole thing to stop compilling on particular platform because of a missed #ifdef or unusual typedef difference. Or, you know, because while I require Qt 6.4 as a minimum, my development environment actually uses Qt 6.4, so one day I may slip up and add code that does not compile against the 6.4 API.

Now if only I could have CI coverage for the static Windows builds as well...

Continue reading “Wespal now has unit tests

Wespal 0.4.0

After a very long hiatus, I finally got around to dusting off an old tool I wrote yeaaaars ago for previewing recoloured Wesnoth assets. Over the past month, I ported it from Qt 4 to Qt 6 (and C++17), cleaned it up, and hopefully properly ensured that this time around everything works 100% fine on macOS — except for the lack of app signing, at least.

Wespal (formerly Wesnoth RCX) version 0.4.0 is out now!

Main window screenshot

File sizes and checksums available at the Project page or at the v0.4.0 release page on GitHub.

Windows and macOS users may need to work around app signing requirements.

EDIT 2024-03-29: Replaced tar.xz tarball with tar.bz2 due to xz no longer being a trustworthy upstream (CVE-2024-3094).

I actually have quite a lot of things to say about this release.

Continue reading “Wespal 0.4.0


Last October I wrote a small Discord bot for a friend who needed help with managing reactions in a guild with over 38,000 members.

Tessa provides as its core functionality the ability to automatically fill up public posts with a predefined set of reactions in order to prevent people from adding their own, while still allowing them to react in some way. Our intention with this was to make it impossible for trolls and edgy teens to post inappropriate reactions to announcements and social media feed notifications in a PG-13 server. The bot has served us well for over 8 months. More recently I added functionality to moderate inappropriate reactions to messages in order to catch people thinking they are oh so quirky and clever posting purple vegetables in response to posts about serious subjects. (Yes, I know aubergine is technically a fruit. That’s not the point. 🙄)

Because I really don’t feel like figuring out how to build a whole web-based configuration system for Tessa right now, it has a couple of major limitations:

  • No public instance.
    If you want to run your own instance of Tessa you will have to obtain your own Discord API token (admittedly this is not difficult, just tedious). If I know you I may be willing to add your guild to my instance if you ask nicely, though.
  • No configuration UI.
    Configuration must be written by hand into a JSON file (tessa.jsonc) that supports C-style comments. I do provide an example configuration file as part of the source code, though.

Ultimately though, for my friend and I’s use case what really matters is that Tessa does its job. Plus we don’t need to alter its configuration very often.

Last night I tagged its first “proper” release as version 0.1.0, after rewriting the reaction moderation logic last night to use on_raw_reaction_add() instead of on_reaction_add() — something I had been putting off for months despite it being a rather trivial change (yeah, I surprise myself with my laziness sometimes). For a project this small I feel like version numbers do not particularly matter, but I guess it’s good to have a reference point where I can say “yes, this does what it is meant to do even if it’s not pretty”.

UPDATE (2023-07-28): I’ve just tagged version 0.1.1 to addresss some major issues with large or overly active Discord guilds.

Happy anniversary!

13 years ago, today, I made my first Twitter account.

It’s funny how people for years prophetised the danger of centralised social media websites controlling all your data — and by extension your online identity — with no mechanisms to take it elsewhere. People were told they were paranoid, that large sites like this could not possibly become victim to a hostile takeover in the style of what a certain shady so-called “entrepreneur” did to freenode in 2021 (I was there, BTW).

Then an incompetent buffoon that also happens to be a highly malicious transphobe and professional conman bought Twitter Inc for $US 44 billion in 2022.

While I continue to keep my @irydacea account on Twitter in order to safeguard my identity — due to the new inactive accounts policy, although to be fair Musk’s administration really just unshelved an old project of Twitter Inc’s that they backed out of following heavy criticism — I will not be publicising my Twitter account going forward on any public pages, and it will remain private. I updated my About page accordingly, some time ago.

I’ll see you in the Fediverse as @irydacea@fosstodon.org.

The power of creativity, Part 1

Maintaining open source software can be quite a chore. The bigger something becomes, the greater the chances are that people find bugs in it and that those bugs interfere with their user experience. After a while, you end up with so much work to do – often for free – that you start to wonder if it was even worth embarking on that endeavour in the first place.

Now, what I am about to talk about is my own experience as an open source game developer. The magic of OSS manifests in wildly different ways depending on what the software’s purpose is, but I think some of these feelings are relatable for those who work on anything meant for use by a non-technical audience, such as desktop environment components and apps, image editors, media players, and so on.

So, let me tell you about immortality.

Continue reading “The power of creativity, Part 1


On my birthday this year, the unthinkable occurred and things finally came full circle. For the first time ever, I’m joining the Apple world with an Apple M1-based MacBook Pro!

VSCode running on macOS

Portable, powerful and able to run on battery power for many hours*, this 16” MacBook Pro — which I’ve dubbed Mia — is without a doubt the most beautiful machine I’ve ever used. Although back in 2012 I moved away from using laptops as my daily driver, I can’t help but be more excited about using my MacBook than my desktop right now, probably because of how seamless the entire experience is compared to the usual Linux or Windows fare. Not to mention, of course, the astounding display quality compared to the 1080p 60 Hz dual screen experience.

* Apple claims this is approximately 14 hours of wireless web browsing, but we all know that’s based on an artificial “normal” workload that’s rather unlikely to happen in practice.)

Saying I’m happy would be a massive understatement, basically. 😄 And as you can see, I already customised it a fair bit to suit my personal aesthetic and preferences — sorry, fans of all-default settings!

Continue reading “Mia


Effective as of today the 22nd of February, I have officially resigned from the Wesnoth, Inc. Board of Directors.

The post wherein I inform of this to the Board and the Project Council is not currently public, but I am including its full contents below for reference.

Due to recent changes in my life, I can no longer adequately dedicate time to unpaid activities such as Wesnoth-related work in the way people are probably accustomed to, which is why I have decided to officially step down from my position as member of the Wesnoth Inc Board of Directors. I do intend to continue to be around to help out with server administration and maintenance of the add-ons server software until someone else is able to commit to the same tasks in a more reliable fashion, although my presence on Discord and IRC is going to remain scarce and prompted primarily by direct tagging/highlighting of my username.

It is my hope that the Board will be able to find an adequate replacement and/or expand its membership further so it can continue to uphold the 2/3 requirements stated in the Project Constitution.


Just to be clear, there are no ulterior motives behind my decision and this is purely something that I needed to do in order to better prioritise other work outside of Wesnoth.

A breath of fresh air

On February 1st 2022, at 5:31 pm, I became an Arch Linux user, finally putting an end to over 9 years of running Debian on my desktop machine.

Arch Linux running KDE Plasma on Hana

2012 Debian installer logs

2022 Arch install logs

In the process, I also finally replaced my desktop account name shadowm with iris, as well as officially relabeled my desktop from Hanacore to simply Hana. Of course, in order to do this in a way that wouldn’t silently break anything I had to throw away about a decade of configurations and maintenance scripts dating back to October 25 2012, when I originally installed Debian on Nanacore/Nana — the machine whose storage drives, GPU, and operating systems I bestowed upon hana. 👋 By doing this I’m ensuring that anything I’m bringing back has to work with the new name if at all. I’m kind of ridiculous, I know. 🤷‍♀️

One big bonus of doing the system setup dance all over again like this is that I am absolutely forced to start over and organize my decade-old mess of personal files and forgotten software packages. So far I’ve been enjoying coming up with a proper categorisation of files in my home directory instead of having files strewn all over.

Continue reading “A breath of fresh air

Wesnoth and me: 2021 edition

Hello again and welcome to my increasingly infrequent round-up of Wesnoth-related activity for the past number of years. Although the sparseness of my schedule in this case might actually work to my advantage — Wesnoth 1.14.0 went gold on May 1st 2018, and its feature release successor is version 1.16.0, released on October 25th 2021 merely two weeks ago!

This time around there are no big life-changing events in between — well, sort of — so I’m gonna spare you the pain of reading through an overdramatic intro and just skip straight to the nitty-gritty.

Continue reading “Wesnoth and me: 2021 edition