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

Tessa

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.

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

Mia

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

Resignation

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.

Regards
Iris

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

Irydacea.me

Hi, and welcome to Irydacea.me, my little semi-secret project for the past year that’s finally complete!

Cover screenshot

After years of relying on other people to host my website, I’m finally in a position where I can do it all on my own and run any software stack I want — and more importantly, use my own personalized domain name, a name that took no small amount of effort to decide upon but is now consistently used for my socials and GitHub.

(The exception being one service where I’m still shadowm because it’s just so, so lucky I got hold of the name before anyone else back in the day and I sort of want to keep bragging about how I got the name before anyone else there. Naturally, Iris is already taken.)

But the new website isn’t just a pretty domain name, no. Following over a year of constant pestering from Vultraz to join the cool kids and learn about —ugh— modern —ack— Web development instead of staying stuck in 2012 or so, I finally got around to learning... React. Yes. This whole thing is written in React + Gatsby, which probably makes it more of a serious project than Iris/Amethyst or Dorset ever were — by virtue of having had to write half of it by hand instead of relying on a pre-existing CMS, and hand-coding a lot of new features.

So let me give you a little run-down of what’s changed.

Continue reading “Irydacea.me

Wesnoth and me: 2018 edition

Hi.

It’s been quite a while since I last properly talked about The Battle for Wesnoth in here — years, really. Some people know that at some point in 2016 I mostly stopped contributing to the project, aside from some server-side stuff such as maintaining the multiplayer games server (wesnothd) and the add-on content server (campaignd).

Since then, a lot of people new to Wesnoth, as well as people not familiarized with Wesnoth, have heard about me, and they don’t really know what it is I’ve actually done over the years. So, I thought it would be a good idea to write about my involvement with this game since I happen to feel like writing walls of text stuff right now.

So, where shall I start?

Continue reading “Wesnoth and me: 2018 edition