Games March 2025

March 30, 2025 5:17 pm

Played another race in Heat: Pedal to the metal at the board game meetup. I lost. Still enjoying this game a lot each time though.

After the race we played a session of Unmatched. It’s a player-vs-player battle system made of up compatible, themed-boxes of characters. I played as Hamlet who on each turn had to decide whether “To Be” or “Not To Be.” With each option offering various tradeoffs. Hamlet faced off against Ms. Marvel, Dr. Strange, and someone else I’ve forgotten. I lost.

Played a couple of games of Creature Comforts during the month. Still enjoying the cozy art and chill gameplay. I lost one game and won one game.

At the next board game meetup we played another session of Marvel Dice Throne: X Men. This time we played 2v2 teams. I played as Psylocke. I rolled an Ultimate move which tipped things in my team’s favor and led to our scant victory.

With time for something short we played two rounds of Stool Pigeon. This is a silly game of memorization and deception. You each have cards with points on them face down in front of you. You get few opportunities to look at them and many opportunities to swap them around the table. Your goal is to have the fewest points on your cards at the end which occurs when someone uses their turn to trigger a final turn for the other players. I lost the first game, which I called (I managed to work myself down to only 2 cards, but other players swapped in high-value cards on their last turn). I won the second game when someone else called and I was able to keep a hold of only very-low value cards without anyone taking them off me. A silly game, but fun for killing 10-20 minutes at a time.

Jess and I finally got back around to moving our Kinfire Chronicle’s: Night’s Fall campaign forward. We picked up a side quest (Quest 21) and were doing quite well in the battle. But we lost control of our boat and capsized. So we weren’t defeated by the enemy, but neither did we defeat them. Tails tucked between our legs we limped back to town still dirt poor after several less-than-successful missions in a row.

Books March 2025

4:57 pm

The Face of Battle by John Keegan

A British Academic’s attempt at understanding what the experience of “battle” is. He attempts to isolate variables by focusing on three battles for which considerable historical data exists, which all occurred in northern France, and which involved in the fighting the French, the English, and–in the Somme–the Germans.

I found Keegan’s prose to be challenging. Asides within asides made it difficult to parse sentences. Maybe this is a common style of British academia. But it made for difficult reading at times.

While his attempts to characterize “battle” are quite interesting the thing standing out to me most is the incredible scale through which battle has evolved over time. From low tens-of-thousands combatants at Agincourt fighting over the course of hours to more than 3 million combatants at the Somme fighting for over 4 months. It’s staggering how much energy humans will muster to annihilate each other.

Ludicrous: The Unvarnished Story of Tesla Motors by Edward Niedermeyer

This was someone’s pick for our book group at work. Extremely frustrating to read as we watch Republicans give Musk free reign to dismantle our government. The book lays out in excruciating detail how Musk has spent decades flat out lying about anything and everything and getting away with it. Promise after promise and hype after hype he has failed to deliver and simply pivots to a new, shinier, grander lie to distract from his previous failures. And now he’s doing the same thing while destroying our country.

Mistborn by Brandon Sanderson

Having played the recent board game of the same title a couple of times I figured I should read it. Jess has had the trilogy since before we got married, so they’ve just been sitting on the shelf waiting for me.

While I couldn’t put my finger on why, I feel like I can tell it’s one of Sanderson’s earlier works–that his writing has matured since then.

I still enjoyed it though.

The Well of Ascension by Brandon Sanderson

So I went on and read the second book the trilogy too.

While some set up was done in the first book it was clear the first book could have been left to stand on its own if not received well. So it was kind of interesting to get a story that has to pick up from “we defeated the big bad guy and we’re in charge now!” and follow through on “yah, now you’re in charge, how does that work out for you?” It’s not rainbows and sunshine. And then it gets worse.

Looking forward to finishing the story with book three.

Corinne’s 10th Birthday

March 29, 2025 11:39 am

Corinne wanted more Minecraft adventuring for her Birthday. During the past year she was really excited about getting a bees add on so this year’s adventure was focused on bees.

Her adventure started with a return to Blockville from last year. The villagers welcomed her back and informed her of some exciting changes in town. First, the Ender Dragon she helped last year (whose name turned out to be Ethan) had taken a liking to humans and moved into town. Second, bees had appeared and everyone was having a blast raising them and eating honey. They suggested she try her hand at setting up a hive.

Her first task was to speak to farmer Peregrine who knew all about hives and how to craft them. But, alas, a zombie attack had left his hive recipe in tatters. She would need to repair the recipe before she could make a hive.

With the recipe repaired she determined she needed 8 pieces of wood and block of lemongrass to create the hive. So off to the Forest to find it.

With supplies in hand she used the crafting table in the Workshop to make the bee hive. Then she spoke to beekeeper Beatrice, who moved to Blockville to follow the bees, about how to attract bees to her hive. Beatrice told her that her best option was to talk to Ethan (the Ender Dragon). He always had great information about where to find bees. There would be a price to his information, but it would be worth it.

Ethan told her that he had developed quite a taste for honey. He’d tried many kinds, but had heard legend of a special “galactic honey” that he just needed to try. If she could collect the right kind of bees and the right kind of nectar the bees would turn it into galactic honey. He gave Corinne a list of bees and where to find them. (I 3D-printed a bunch of little Minecraft bees in various colors and hid them around the house and outside.)

With the proper bees collected she needed to collect nectar (from in jars with Minecraft flowers scattered about) and then test it for quality. Ethan provided a special testing powder that, when added to high-quality nectar, would cause it to bubble and fizz (I decided to capitalize on Corinne’s lack of a sense of smell; nectar was either vinegar or water, thus the special powder was baking soda).

I apparently didn’t take any pictures of the galactic honey, so we’ll have to make do with this screengrab from the video camera. It was corn syrup with some blue and purple food coloring and some sparkly sprinkles (which mostly sank to the bottom). I had tried to make “rainbow honey”, but the food coloring was far too effective at diffusing throughout the corn syrup even after trying to use corn starch to change the densities of the colors.

Ethan was ecstatic about the galactic honey. To show Corinne his appreciation he gave her a compass he’d received from a wandering trader. The trader had promised it would lead to treasure, so if she found something she could keep it.

The compass was a crowdfunding project I backed last year (Truest North Compass). It uses GPS and a magnetometer to show you the direction and distance to a programmable point on the Earth. Unfortunately, the rain seemed to be interfering with its accuracy. And the magnetometer was confused while inside the van. So it didn’t go quite how I had hoped it would, but we found the treasure box hidden in the hollow of a tree at a nearby park (a friend placed it and kept an eye on it while we made our way there).

Back home to open it up and find it full of coins. Minecraft Coins! (As described in the contained envelope.)

Then Corinne opened some presents. We went to dinner at the location of her choice (McDonald’s). Then back home for cake. Another successful birthday.

Mint 22.1 + Kodi 21.2 + Beelink Mini S12

March 8, 2025 6:46 pm

The latest in my series on the subject, this follows the last upgrade in 2023: Mint 21 + Kodi 19 + Intel NUC i3.

I’ve replaced my aging Intel NUC with a Beelink Mini S12. The fan seemed to have a bearing beginning to fail. I figured I better get on replacing it while it was giving me forewarning rather than waiting for it to catastrophically fail (and before more tariffs increased prices further). I had looked into just replacing the fan, but couldn’t find a part I could guarantee would work. And it was 11 years old. And the Beelink Mini S12 was only $160 and offered a significant leap in processing power, storage, and RAM while lowering electrical usage.

I bought this one. The Beelink Mini S12 with Intel N100 processor, 16 GB RAM, and 500 GB SSD.

My first challenge was getting the Beelink to boot off a USB drive. For whatever reason it didn’t like the drive I was using and after futzing around for a while I tried another one, it booted fine, and I got Mint 22.1 installed without issue.

Install Kodi

The Kodi PPA is no longer maintained and the recommended solution is the Flatpak.

$ flatpak install flathub tv.kodi.Kodi
# To fix pipewire access (maybe not necessary?):
$ sudo flatpak override tv.kodi.Kodi --filesystem=xdg-run/pipewire-0

How to get audio passthrough working correctly changed again in this release. Theoretically the most recent versions of Pipewire handle it correctly with Kodi “out of the box,” but the version of Pipewire installed in Mint 22.1 was not doing it.

This goes hand in hand with configuring the machine to auto-boot into Kodi directly and skip loading a Cinnamon user session.

Create a script to launch Kodi with ALSA:

$ mkdir ~/Scripts
$ touch ~/Scripts/kodi_custom_session_launcher
$ chmod +x ~/Scripts/kodi_custom_session_launcher
$ nano ~/Scripts/kodi_custom_session_launcher

File Contents:

#!/bin/bash
flatpak run tv.kodi.Kodi --audio-backend=alsa

Create a custom XSession entry which we can select from the login screen:

$ sudo nano /usr/share/xsessions/Kodi_ALSA.desktop

And the file contents:

[Desktop Entry]
Name=Kodi with ALSA
Comment=This session will start KODI Media Center
Exec=/home/kyle/Scripts/kodi_custom_session_launcher
TryExec=/home/kyle/Scripts/kodi_custom_session_launcher
Type=Application

Now if you log out you should be able to select “Kodi with ALSA” as a session option from your login manager.  In Mint, this is accomplished by clicking the circle to the right of the user name.

As in the past, after a little fussing and some restarts I eventually saw the correct audio targets in the Kodi settings and everything seems to be happy with the audio passthrough support.

When running as a flatpak, the Kodi configuration is in a new location:
/home/kyle/.var/app/tv.kodi.Kodi/data

I set up some stuff in Kodi’s advanced settings file to disable the splash screen and hide the ext4 file system’s “lost+found” directories.

$ nano ~/.var/app/tv.kodi.Kodi/data/userdata/advancedsettings.xml

File contents:

<?xml version="1.0" encoding="UTF-8"?>
<advancedsettings>
  <splash>false</splash>
  <video>
    <excludefromlisting>
      <regexp>lost\+found</regexp>
    </excludefromlisting>
    <excludefromscan>
      <regexp>lost\+found</regexp>
    </excludefromscan>
    <excludetvshowsfromscan>
      <regexp>lost\+found</regexp>
    </excludetvshowsfromscan>
  </video>
</advancedsettings>

IR Remote Control

The Beelink Mini S12 doesn’t have a built-in IR receiver like the NUC did. So I bought a FLIRC USB IR Receiver. The system sees it as a keyboard, so you don’t do any configuration with Linux’s built-in IR receiver support. Instead run the FLIRC configuration tool. It helpfully has a Kodi configuration mode which shows you all the keyboard commands that Kodi understands and trivially lets you map buttons on your remote to those commands.

Here’s my configuration which maps the buttons to the same ones I’ve been using on my Onkyo RC-764m remote using remote code 33003:

Lyrion Music Server

Logitech Media Server is dead, but Logitech rather graciously handed the project over to the community (presumably with the requirement that they not use Logitech’s name). The community rebranded it the Lyrion Music Server.

I downloaded the package for version 9.0.1 from
https://downloads.lms-community.org/LyrionMusicServer_v9.0.1/lyrionmusicserver_9.0.1_amd64.deb

And to install:

$ sudo apt install ./lyrionmusicserver_9.0.1_amd64.deb

Preferences are stored at /var/lib/squeezeboxserver/prefs

External Hard Drives

I’m still having issues with the external hard drives disappearing and needing to be remounted. I’ve slightly updated my script from the last post as I discovered there were 2 possible failure modes to check when deciding if a disk needed to be remounted:

#!/usr/bin/bash
needed_to_remount=false
if ! mountpoint -q /mnt/TV || ! ls /mnt/TV > /dev/null; then
  needed_to_remount=true
  mount /mnt/TV
fi

if ! mountpoint -q /mnt/General || ! ls /mnt/General > /dev/null; then
  needed_to_remount=true
  mount /mnt/General
fi

if ! mountpoint -q /mnt/Movies || ! ls /mnt/Movies > /dev/null; then
  needed_to_remount=true
  mount /mnt/Movies
fi

if ! mountpoint -q /mnt/4TB_Storage || ! ls /mnt/4TB_Storage > /dev/null; then
  needed_to_remount=true
  mount /mnt/4TB_Storage
fi

if [ "$needed_to_remount" == "true" ]; then
  echo "$(date) Needed to remount disks"
fi

And the cronjob in /etc/crontab that runs this scripts every minute:

# Work around external drives being unmounted randomly
* * * * * root /home/kyle/Scripts/remount_disks.sh >> /var/log/remount_disks.log

Games February 2025

February 28, 2025 8:21 pm

Played The Vale of Eternity at the board game meetup. Overall gameplay is pretty simple, but with many opportunities for emergent complexity and dramatically different strategies and play styles. Definitely a game that requires playing a few times in order to learn what kind of cards exist in the deck and how you might plan around them. Otherwise can be challenging to make much headway since most progress is made by gaining cards that play off each other. I enjoyed it. Would happily play again.

After The Vale of Eternity we played Marvel Dice Throne: X-Men which just came out this year. Select a character and fight each other to the death by rolling dice to determine which action you take each turn. Tons of variety across characters making it nearly impossible to know what other players can do (or if they’re playing accurately unless you’ve played a ton). Dice-rolling games aren’t generally my jam, but the way the mechanics are designed significantly limits the pain of having a bad roll. So that helped. Still not really my jam though. Wouldn’t seek it out myself, but if others wanted to play, I’d still play.

Had friends over and played Ex Libris with the Expanded Archives expansion (which I gave Jess for our anniversary last year). This games is always a challenge to play after time has passed and difficult to learn fresh. While the mechanic of your turn is simple (place a worker on one spot and complete that action) what spots exist each round changes and there are a lot of options. So first just understanding what all your options are is tiring, then figuring out how to utilize those options effectively is an additional challenge. Jess has won Ex Libris every time we’ve played–until now! My only win of the month.

Played Mistborn cooperatively again at the board game meetup. Had mostly players who had played at least once before this time and we did significantly better, but still ended up being defeated in the end. In a crushing blow all 4 of us were brought to 0 health at the same time. I enjoyed it more the second time–now having a slightly better grasp of the general strategy and progression arc.

After being defeated in Mistborn we played a quick game of 7 Wonders. A tableau-building game played across 3 rounds (“ages”) in which you build your civilization and attempt to complete your world wonder. Play is simultaneous and moves fast regardless of player count. This was one of my earliest purchases after starting to attend the board game meetups. I still enjoy it, though it doesn’t get much play. I lost this time.