General Updates (But Mostly Thrasher)
I really fell off the updates there. Oops. While I’ve been away, I have mostly been focused on Thrasher. A couple weeks of work went into an overhaul/rewrite of the mobile UI.
There was never an intent to evern have a mobile interface, as I am horrible at UI programming generally, and I had no desire to try to make something like Thrasher work on smaller screens. But not long after getting the desktop version working, of course, I found myself wanting to be able to take it with me. So I hacked together the most minimal possible finger-friendly UI. It was seriously done in about 2 hours of initial effort, followed by maybe a day of tuning. And then it sat for months while much bigger changes were made to the service and the desktop client.
So it was time for a redo, and after a couple weeks of learning and iteration the mobile UI is now in a much better place, and is more responsive, with rendering varying based on aspect ratio.
After that effort I took a short break and did some cleanups (physical and metaphorical) of my office and my music collection. Then I turned my attention to something else that had needed it for a long time: security.
Without going into enormous detail on the why, Thrasher’s original service architecture was meant to act as a proving-out of an mTLS server design. This was not needed for the app, but it seemed a convenient place to do it. And the original Thrasher service design was a successful prototype for a “servers which launch servers” strategy, but this turned out to complicate many things, most especially the front-end proxy.
Of course, initially, there was not originally meant to be a TLS-terminating proxy on the front end but the design (and user expectations) shifted with time, and I jettisoned more and more of the original X.509 flavored plans as time went on. Eventually so much was gone that what remained was more of a hindrance than anything else, so it was replaced with a traditional single-server design and the implementation of users and sessions.
And that has brought us (almost) to where we are now: ready to implement actual playlists. These haven’t waited so long because they’re difficult to implement, but because I never wanted them. That’s not how I tend to listen to music. If you want to know how I do tend to listen to music, just look at the other exposed music selection controls.
But it turns out that other people do like them, so I’m putting them in. All the needed pieces are there now, and I’ve come up with a plan which doesn’t require bolting on a completely separate UI for editing them.
The most recent work, though, has been purely internal/administrative.
Thrasher is meant to be run in a container, so it ships with a script
that makes it easy to build that container. The script started out as
a lightly-edited copy of the one I wrote a couple years ago for
Gnatwren, which was unsurprisingly called build.sh. Now it is known
as fpc-ctl (for Firepear Container Control), and it is an
increasinly generalized tool for managing container-oriented
projects. It ships with:
- Support for Linux and MacOS
- Using Docker, Podman, or
containeras the containerization CLI utility - QoL utils like starting, stopping, shelling into, and copying files to, the project container
- A devmode which runs a non-containerized instance of the service
- With defineable file watching for automatic rebuilds
- Hooks for project-specific shell functions to handle
- Pre-build / devserver tasks
- Online help extensions
- Custom commands for the project
I don’t plan to make this its own project (mostly because there is no clean, systemic way to import shell based things), but I do plan to keep using it across more projects, and I do plan to keep improving it.
…though this might be just the excuse I need to resurrect Stapler…