Using MPD to set up HomeAssistant remote speakers

August 28, 2023

Of late I’ve been experimenting with HomeAssistant, a self-hosted home automation system. It started as a way to get a working doorbell without needing to rip the walls open, and I’ve been gradually adding new features like spoken reminders to put the chickens to bed.

Repurposing an old Android phone as a USB-driven text display

January 19, 2023

Over the years I’ve ended up with an assortment of phones that are no longer fit for purpose – maybe the touchscreen is held together with tape, or they stopped getting security updates years ago, or the camera lens is shattered. But that doesn’t mean they aren’t still useful for other things!

Airsonic-Advanced on NixOS with libopenmpt and libgme transcoding

April 26, 2022

Airsonic is a web-based music player. I’ve tinkered around with a lot of options over the years and keep coming back to Airsonic; the UI is kind of clunky, but it has a bunch of features that I can’t seem to find anywhere else without serious compromises. In particular:

  • it lets me browse the music collection based on filesystem layout, rather than relying solely on embedded metadata (my collection is well tagged in general, but the filesystem layout encodes some information not present in the tags, and some of my music is in formats that don’t support tags at all)
  • it defaults to playing music on the client through the browser, rather than being a remote control for speakers attached to the server
  • it has a mobile client that supports downloading music for later offline play

Getting Started with Productive Bees

April 13, 2022

My daughter has been getting me back into Minecraft with her, so I set up a private server we could both play on. And since it’s me, I also installed a whole bunch of mods, including Immersive Engineering, Tinker’s Construct, Beyond Earth, and Productive Bees, a beekeeping mod that lets you attract, capture, and/or breed a wide variety of bees that produce various useful resources.

Improved read markers in Ubooquity

April 3, 2020

Last fall I posted about a javascript injection for adding useful read markers to the Ubooquity comic server. I haven’t been idle since then, since I kept tripping over areas for improvement while trying to read things, and I’ve finally gotten around to cleaning up and releasing those improvements:

DoomRL in the browser -- with sound!

December 19, 2019

The public DoomRL server I host now supports sound and music, as long as you’re playing it in the browser (as opposed to connecting via telnet). If you don’t care about the technical details and just want to play, you can stop reading now – sound is enabled by default for browser games.

Read markers in Ubooquity with JS and nginx

October 31, 2019

Ubooquity is a web-based comic and ebook reader; I’ve never tested the ebook support, since I have an e-ink reader for that, but the comic support works well, and I run a local instance. However, the whole thing is pretty barebones, and missing features common in other readers like Perfect Viewer. The most aggravating lack, I found, was the lack of read-markers; it remembers where you are in each book, but doesn’t tell you (in the book selection window) which ones you have and haven’t finished.

Headless BitBurner with VNC

June 25, 2019

I enjoy the occasional idle/incremental game. I generally prefer the relatively short ones with clearly defined goals and story arcs, like Spaceplan or Paperclips, but I do enjoy larger ones like Trimps or KittensGame on occasion (although I have finished neither of those, and probably never will). Of late, my poison of choice has been BitBurner, a cyberpunk incremental that is less about playing the game directly and more about writing javascript (or anything else you care to write that compiles to JS) to play the game for you.

Share-By-Link with fgallery and nginx

May 20, 2019

For a while I’ve wanted a better solution to personal file sharing. Just tossing stuff into /srv/www works, but makes it hard to isolate files shared with one person from files shared with anyone else. Nor does it have a good UX for sharing photo galleries, or a convenient way to say “shove all these files into a zip and share that”. Using Google Drive and Google Photos solves that, but has issues of its own, like making it easy to leak personal information and not having a line client.

A prettier zpool status

February 18, 2019

I run ZFS on my server, and that means I’m often looking at the output of zpool status, especially when shuffling drives around. Out of the box, however, it’s kind of bland and has lots of wasted space:

Adding subcommands to arbitrary programs

February 10, 2019

Git – like many other Linux programs – has a bunch of subcommands. You never run git on its own; you always git <verb>, e.g. git commit or git log. Under the hood these are handled by hyphenated commands: git-commit, git-log, etc. This is fairly standard; it’s a UI paradigm used by other version control systems, backup software, the ZFS and mdraid tools, taskwarrior, beets, and so forth.

Ancilla hardware migration

January 25, 2019

I recently migrated the family server, ancilla, to new hardware and new disks. This post is primarily a record of that process. Hopefully it will be helpful to someone; I suspect it will, at least, be useful to Future Me when planning the next migration.

Automounting ZFS on NixOS

January 24, 2019

ZFS and NixOS are two great tastes that taste great together, if you configure all of your ZFS datasets as mountpoint=legacy and list them in configuration.nix. Having done this, the NixOS boot scripts are able to import and mount anything mandatory for boot (notably, /nix), and systemd is made aware of the mountpoints and can ensure that before it starts a service, all the datasets that service uses are mounted.

Reverse proxying Plex using nginx on NixOS

January 21, 2019

Plex is a popular media server. I switched to it (from Kodi + a bunch of network shares) a while ago, primarily because it supports server-side transcoding, meaning I can watch things that the itty bitty RPis I use as media players just don’t have the beef to decode, like 1080p HEVC files.

Remote URL handling in weechat and tmux

January 19, 2019

My approach to IRC (and a number of other chat systems, like Discord and Stack Exchange) is to run WeeChat on my server inside tmux. This is very convenient for me; I don’t need to configure multiple chat clients, each with their own UI paradigms and credentials, on every machine I use, I just need to ssh home and tmux attach.

Morroblivion Wizards

February 10, 2017

Morroblivion itself isn’t too hard to install, but it can rapidly go out of control once you realize (a) how much better a few mods make the Oblivion UI and (b) how many bugfixes for Morroblivion exist that haven’t been merged into the main ESP yet. (b) is especially pernicious because the Morroblivion forums have lots of threads about mods and fixes for it, but rarely if ever do they make it clear which ones are still useful and which ones have been obsoleted by subsequent Morroblivion releases.

Setting Up Morroblivion

February 1, 2017

Morroblivion is a fan-made remake of Morrowind in the Oblivion engine. It works by running an installer that automatically converts the TES3 data to TES4 format, in conjunction with about 2GB of mod data that overhauls the textures, models, and so forth, either by replacing them with high quality originals or remapping them to Oblivion equivalents, and recreates feature from Morrowind that Oblivion doesn’t support natively using the scripting system, like cast-on-use enchantments.

NixOS -- Installation & Initial Hurdles

December 21, 2016

The NixOS installer is, well, there isn’t one as such; there’s no guided installation program like you get with (say) SUSE or Ubuntu. The good news is that the actual process of installation is very quick and straightforward if you’re comfortable managing partitions and mountpoints by hand:

Adventures in NixOS

December 20, 2016

So I recently learned about NixOS. A lot has been written about the philosophical underpinnings of its “purely functional package manager” Nix; I’m more interested in the practical aspects, in particular the combination of one central (version-controllable) location to define the entire system with fast, painless rollbacks to any previous configuration. I’m already using Ansible, which kind of gets me the first of these, but not really; the actual state of the system is defined by the ansible configuration + whatever changes have accumulated to things that ansible doesn’t touch as packages get upgraded and tweaks get made that I forget to add to ansible. In contrast, in Nix most of the system (in particular, most of /etc) is read-only; you must make edits to /etc/nixos/ in order to change the configuration of the rest of the system.

Google Spam Filtering as a Service

August 9, 2016

So you’re hosting your own MX for what I’m sure are very good reasons. But the spam is killing you. You don’t want to migrate all your email (and users) to Google, but you’d gladly pay, say, $5/month for Google spam filtering and continue hosting the MX yourself.

Making your PSP delicious

August 6, 2016

The PSP may be ten years old, but there’s still a lot you can do with it. This post is documentation for my adventures with custom firmware (CFW) on the PSP.

Emufun no longer under active development

December 22, 2015

The thing I originally wrote it for (easily launching emulators via a controller) is no longer something we need, and the thing we ended up using it for in practice (watching videos) is now better served by Kodi (formerly XBMC).

Emufun v1.2 released!

January 6, 2015

The release is available, as usual, via Github. There’s only one significant change in this release, but it’s a big one: file metadata and directory listings are now stored in per-directory .emufun.cache files rather than a central per-user file.

doomrl-server released!

November 29, 2014

Go get it on Github! This is a dgamelaunch-like telnet frontend for Doom: The Roguelike, allowing people to play DoomRL over telnet with recordings, spectator mode and shared high scores.

ifIRC 0.2.0 released

October 17, 2014

ifIRC 0.2.0 features a complete rewrite of command line handling using tools.cli 0.3.1. It now has sensible defaults for various command line flags and doesn’t use the positional arguments.

ifIRC 0.1.0 released

October 11, 2014

ifIRC, the ifMUD <-> IRC proxy, has now been officially released, after a bunch of restructuring to improve reliability and remove the dependence on the Saturnine library. I’ve been using it locally for about a year, but haven’t considered it ready for general use until now.

Searchable maps for System Shock

September 28, 2014

To celebrate the SS1 20th Anniversary Devstream – and because I’ve been meaning to do this for a while – the System Shock maps I’ve been generating are now searchable by object name. You can search just the current level, or (if using the “all levels” map file) the entire game. The search will show both the location of the objects themselves, and the location of any containers that they’re in.