Perspective

Having recently played Pillars of Eternity 2 and following that the first part as well, the story in those games has gotten me thinking a bit since it ended up speaking to me surprisingly strongly—probably partially because I was so engrossed in the games.

Now, I’ve been somewhat nihilistic for a long time, not really believing there is some great meaning to the universe and our place within it though that doesn’t mean there aren’t causes or values I hold important or even that I don’t feel that the world would be a better place if some of those values were universal (if maybe a bit boring).

But at the same time, it has left me without any sort of driving force in my own life, without a reason to do and achieve things which has meant I’ve been left just kind of floating around without purpose which does mean it is somewhat hard to motivate myself to participate in society as well as actually having dreams and goals. This, along with recent events in the world, has left me with a lot of thinking to do along with a search for that meaning to call my own. I expect this introspection will take some time, and I’m not sure I can say I’m looking forward to it though I think it will prove quite interesting and valuable to me going forward.

Misc

Headless WordPress

So it’s been about a year since I started using WordPress instead of Hugo to publish this blog, and it’s been quite a nice experience so far. I like the editing workflow, that I’m actually reminded to certain things like specifying tags and publish date when I do press the publish button, and that I can schedule posts so I can write when I feel like writing and still end up with a somewhat regular cadence of when the posts actually end up getting shown on the site.

The sligthly less rosy part of the whole thing has unfortunately been the performance, specifically the performance for anyone else than myself since the site gets hosted locally to me. Now there are some things I’ve already done to alleviate this, like using caching in WordPress so that the pages get rendered faster and using Cloudflare in front of the site as a CDN and cache to hopefully deliver the content from a location closer to the reader but it’s still quite slow because in the end speed of light is a thing and the caches don’t last forever. Also, only the assets and not the pages themselves ended up being cacheable with the free Cloudflare plan, so the main content of the site ended up being served rather slowly anyway.

Then, at some point, I remembered looking into Ghost, which is another publishing platform which remains more focused on just the publishing part than WordPress and while looking into it again I discovered a keyword which lead me on something of an adventure: headless CMS. What this specifically means is, that the CMS part is just there for managing the content and then provides an API which a frontend of your choosing can then use in order to render out the actual site—so a greater separation of duties in a sense. Classically in publishing systems, the CMS is responsible for both the whole content management part and the presentation part but this separation of the two means one can take a static site generator like Eleventy or Gridsome, query the API of the CMS for the actual content and still generate the site statically which allows it to be deployed more easily.

Since this site is mostly just me writing for the fun of it and the more interactive parts like comments haven’t really proved that used implementing this approach for the site was something I set about exploring, and what an exploration that was. It all ended up being somewhat more complicated than I expected, partially because the WordPress REST API isn’t necessarily set up for all the functions required for this sort of thing—ended up needing to install another plugin for authentication against the API so that things like site settings could be retrieved through it, normally only the session cookie based authentication is implemented—and another problem ended up being content management since I want to then also deploy the media I might embed in posts so that they don’t end up still being queried from the WordPress server and that use-case was surprisingly unsupported in many of the static site generators I looked at, not even through plugins. Now, of course, most of them support some form of filters or mapping or the like with which I could create this functionality myself without too much trouble, but I wanted something where someone else had (hopefully) figured out the edge-cases for me so that I didn’t have to go around thinking about file I/O and the like.

This lead me to settle on Eleventy which allowed me to reach my goals with the least amount of fuss—which is kind of what it bills itself with as well, “Eleventy is a simpler static site generator”.

Once that decision was made it was a relatively simple task of configuring Eleventy to query the WordPress API in order to fetch the posts and then display them in a near identical manner to the current site, with the biggest differences being the lack of comments because the site is now static as well as removal of some of the shall we say bloat that WordPress as well as JetPack include. It’s all well-intentioned and I could remove it if I liked so this isn’t a criticism of WordPress by any means—and in the case of JetPack I even chose to include that—but it’s still nice to see the site in a somewhat leaner form than it was before.

Getting the category-pages working however, was a bit more of a struggle—mostly because I’m somewhat stubborn however (and also not that familiar with Eleventy)—because I didn’t want to end up retrieving the pages from the API twice so I needed to figure out some way of providing two different collections while only retrieving that data asynchronously once. In the end however, I just ended up retrieving the data twice since that seemed to be the way Eleventy preferred handling this usecase, and in the end it’s just text so it shouldn’t lead to all that big of a transfer anyway.

After that, I simply needed to find a plugin for WordPress that triggers a webhook when a new post gets published so that the hosting for the static site knows to rebuild, and the process is essentially complete. For this I settled on Notification since it seemed on the surface the cleanest and simplest implementation and it looked like it would likely remain supported in the future as well—always a concern when adding a new plugin.

All in all, the process wasn’t perhaps quite as straightforward as I would’ve wanted but still easy enough to get everything going after I stopped being stubborn and just used the systems that actually provided the features I wanted (Eleventy, specifically referring to the local image support) instead of considering developing plugins of my own. From what I can tell the site also feels quite a bit snappier even for me so that’s a big plus as well, hopefully it ends up serving any potential readers better as well! Regardless, it was a fun journey.

CMS

Pillars of Eternity II

So the past week or so my time has been pretty much consumed by Pillars of Eternity II: Deadfire and it has been a pretty amazing time.

Yes, I took a break for about a year.

It’s the first time in a long while for me where I’ve actually been able to get my mind inside the world I’m playing in or reading about which does mean that it does bring me some sadness to have to leave that world but the journey was great.

Writing regularly

It might be a bit late for a New Year’s promise, but having read a post recently of someone missing blogs and well me writing one, I’m considering trying a somewhat more regular writing cadence on here. I’m not still quite sure what that cadence might be, weekly sounds somewhat realistic, and I’m also not sure what that might do to my motivation to do so but it feels like an interesting proposition. Perhaps getting started with it could even prove to be its own motivator, seeing how good it feels when I get a decent amount of things written on here.

I also believe forming the habit of simply writing might prove useful, essentially improving my skill at committing to something since that is something I can at times have trouble with. It will also prove interesting having to more actively seek out topics to write about since that has generally been my biggest problem, which will require me to practice my creativity somewhat—that also being a skill I have not trained as much as I would perhaps like, at least in this context.

Making writing more deliberate also has another side-effect, namely training me to do it over a longer period of time and actually editing what I’ve written rather than as a “one-shot” as most of the previous posts here; me just sitting down and writing because I remember to and pressing publish at the and. The long pauses between posts lead to a mentality of “just get something out there”, which can of course happen again with a schedule if I haven’t prepared anything and that’s fine, but should be less likely to happen assuming I stick with it and actually prepare the posts in advance as is my intention at least. This more drawn-out method of writing will also allow me to think about and state my viewpoints more thoroughly on a subject since I don’t have such a stress to press the publish-button, which will hopefully lead to some longer-form content (or perhaps simply more edited content).

I am not making longer form content a hard requirement for myself though, since this remains an activity mostly driven by my desires rather than anything done for some external purpose. In that same vein, I am also hoping this more deliberate approach to the whole thing will allow me to satisfy that need on a more ongoing basis rather than merely sporadically when I remember to.

Misc

Linux

As is starting to become spring-tradition I feel, I gave switching to Linux as my primary operating system on my desktop another shot, and the results were slightly better than last time though still not quite enough to make the switch permanent. Honestly, the overall experience was rather impressive, the biggest problem is me still needing to shoehorn some Windows-things (games) into Linux, and aside from those I think I would’ve already made the switch.

As a change from last time, I tried the Liquorix kernel, which is the Linux kernel tuned to fit the interactive desktop use-case better and the difference was quite noticeable. This probably made the biggest difference in how everything felt this time around and it’s definitely something I could get used to. There was some funkiness however, as I had installed the Nvidia drivers first but once I installed the kernel I needed to install newer drivers and getting rid of those cleanly and the newer ones installed was a bit of a short pain which does also lead me to worry somewhat of the longterm stability of the system since I have had a bad experience with Arch and Nvidia drivers in the past where the kernel got updated to be newer than the drivers supported. The dangers of binary-blob drivers on Linux I suppose, which I was intending to counteract by using a more stable distro (Debian) but of course the Liquorix kernel releases follow the current kernel releases much more closely so that didn’t really end up being an advantage.

Gaming

As mentioned above, the biggest pain-point for me is still gaming, namely the Blizzard games. World of Warcraft is still my main jam at the moment, and while it isn’t impossible to get running on Linux and actually has a rather decent rating on Lutris, Battle.net was something of a pain for me to get running and then because it’s not just a game launcher but also a chat service, one that I quite heavily use, I want to have it constantly running which doesn’t always work that well and the integration into the desktop is lacking because Wine. Specifically, Battle.net has a tray icon that then gets shown to Linux as some sort of “legacy” format which isn’t supported by the newer versions of the major desktop environments (GNOME and KDE) which would mean I might need to use something more niche which I’m not that into at the moment though it might be interesting at some later point. The customisability of the interface is after all one of the strengths of Linux.

Another new pain-point was actually Epic Games Store, something I hadn’t used the last time I made this experiment but was now using primarily due to the free games they have been offering, which can contain some rather nice deals at times. This feels especially silly, since some of the games they offer—For the King as an example—do actually have a Linux version yet because I own the Epic Games Store version I can’t actually play it easily on Linux. From what I gather, Epic Games doesn’t have the best of reputations when it comes to Linux support in general, which also makes me somewhat wary of trying to run the store through Wine in case they decide to treat it as cheating or the like. The dangers of free stuff I suppose.

Streaming

Also, I never got started on streaming and getting that to work, multiple audio devices as a problem from last time.

Another more minor niggle is streaming. It really is rather minor, since I kind of know exactly how I want it all set up and what I need to do to get there, just the way there is somewhat annoying.

Basically, the big problem is that my audio setup in Windows is actually rather complicated, with four different (virtual) audio devices so that I can cleanly separate game, music, voice and desktop sounds and then only pipe some of those through to the stream. The different audio devices also more easily allow me to adjust the different audio levels for me and the stream, for example my game and music audio is rather quiet because I want to hear what’s going on in voice but as that isn’t piped to the stream most of the time I can actually turn those up a bit for them so that it isn’t all so quiet and they can enjoy the music. The game sounds are also more important to me than to the stream, so being able to adjust those separately is quite nice.

Now, all of this is rather trivially possible with Pulseaudio, which does support creating virtual audio sinks without any extra software installation as is required on Windows (though I guess what’s core and what’s not is somewhat more loosely defined on Linux than Windows, since it’s dependant on the distribution), however I want all of this to automatically be the case from the moment I log in so that I don’t have to keep readjusting my software to use the correct sinks and did unfortunately not find a good way to do this. Some sort of login script would be the obvious example but I didn’t really want to take the time to program something like that.

Then there is the case of the bots. Namely, chatbots. While a lot of the popular ones are cloud-based these days, which one would think would mean that running on Linux wouldn’t be a problem, the song request part often requires a Windows application in order to provide the currently playing song to the streaming software in the form of a simple text file. Since these seem to be mostly Electron-applications, I don’t really see the reasoning behind this other than the developers not considering Linux a big enough market in order to make the effort which does make it all a bit more of a pain for me. There are also more “pure” cloud variants like StreamElements which do have a mechanism of providing the song title through a web browser interface but unfortunately the last time I used it the song request functionality was somewhat flawed, skipping some songs completely and not doing a particularly good job of shuffling the songs.

Now I have been wanting to write my own bot for the song requests because all of them feel a bit janky in one way or the other anyway which would alleviate these concerns and allow me to use the others just for moderation, however as I haven’t done that yet it’s something of a blocker at the moment.

Finally, one major problem from last time that I didn’t end up running into this time but could rear its head again, some versions of OBS oddly enough did not include hardware acceleration (on Nvidia cards at least) for the encoding which for a single PC streaming setup like mine was a complete non-starter. This seemed to primarily depend on the distribution and not OBS itself, with some strangeness like Ubuntu 18.04 at the time having hardware acceleration but 19.04 did not. I believe at the time the flatpak also lacked hardware acceleration which if it was still the case would have been a blocker this time around as well since using an outdated version of OBS since new features tend to be rather significant in something so relatively recent as live game streaming.

Minor things

Beyond those two main problems, there were a few more minor things that I would need to figure out were I to decide on a more permanent switch but that don’t really impede my day-to-day too much. Namely:

  • OneNote
  • Development environment
  • Hardware acceleration in Firefox

OneNote

I’ve recently re-discovered OneNote for notetaking, and so far it’s actually been rather nice to use for the small amounts of notetaking that I do. It seems to sync pretty snappily between devices, has performant enough clients for the operating systems I use regularly at the moment, and mostly just gets out of the way of me writing something short that needs remembering. Unfortunately, as far as I know, there isn’t a version available for Linux, outside of potentially a web-based one, which would mean I need a replacement. At the same time, my notetaking needs at the moment are rather light, so this shouldn’t pose too much trouble but still it is something that will need consideration if I make the switch in the future.

Development environment

This one is rather easy, it’s just mostly a matter of remembering everything that’s necessary. Currently use a fair bit of web development stuff, so Node, webpack and the like, and all of that probably even runs better on Linux than it does on Windows. Similarily, I do some Go develoment, and that is probably also more intuitive to use on Linux than Windows so no problem there, and my current editor of choice, Visual Studio Code, is also available. The biggest hurdle if one can call it that would just be getting everything set up the way I like it so that the threshold to get something done when I want to is as low as possible.

Firefox hardware acceleration

So this is just one of those things that yes, it’s solvable, yes, it’s not too much work, but quite honestly it should just be standard at this point and not something I need to go hunting for how to get working properly. I get that it’s probably a hard problem to get working for the generic case and with all the open and closed source drivers, but the unecessary CPU load just shouldn’t be there when I’m watching videos or doing other browsing on more graphically intensive websites. It’s a minor thing because I know it’s fixable just didn’t get to the point of looking up exactly how, but it annoys me that it’s a thing I need to fix in the first place.

Conclusion

In the end, this time (as well) ended up being a failure, but it did give me new hope once again that some day in the not too distant future this will be an option that I can reasonably choose, since the roadblocks are becoming fewer each time and the only really big remaining one is gaming which seems to be getting better each year on Linux with more support from publishers. Even there I also have pretty big hopes concerning the future since Blizzard has already supported Mac gaming for so long it seems reasonable that they would in turn also support Linux in the not too distant future. And if even if they don’t, at some point I’m probably going to have played their games enough and find others that I want to play, so maybe that’ll be a good opportunity to narrow my search and focus on ones that have Linux as a supported platform.

The general state of the desktop and seeing how good it has gotten also makes me think that there are some other systems in the house that can be converted since they don’t have some of the requirements I do, so at the very least the knowledge gained from the experiment will prove very useful to me and here’s hoping next time around everything’s far enough along that it doesn’t just stay an experiment!

Misc