What programming/technical projects have you been working on?
This is a recurring post to discuss programming or other technical projects that we've been working on. Tell us about one of your recent projects, either at work or personal projects. What's interesting about it? Are you having trouble with anything?
I'm working on a library for Clojure for musical notation. First idea I've been excited about in a while!
Just wanted to update on this - it's going super well, I'm just churning out some tests now for the part that deals with 12-TET notation and the part that deals with diatonic scales. I may release once I get that plus chords done, then I can work on pentatonic and chromatic scales and modes (I'll have to brush up on modes). Stretch goal of maybe some MIDI functionality, but I'd have to study up a bunch on that because I want to build everything from scratch for practice.
Although I haven't written in Clojure in a couple years, it's all coming back to me really nicely, even the emacs shortcuts. It's been a long time since I've actively enjoyed coding - Clojure is an absolute JOY to write in for me, and I think it's a sign that I should really dig to find a job in Clojure on my current search. I love love love it. I might expand to Elixir as well.
I finally got a K3S cluster up and running and all but one of my docker containers deployed to it. Some aspects of getting it set up were a real pain in the ass, mainly NFS share permissions and traefik not using my TLS cert until it randomly did.
I've moved all my computers to NixOS over the past two weeks.
NixOS is a declaratively configured Linux distribution. In many cases you can just add a few lines of Nix language to your configuration files to activate a pre-defined module, and with a single additional command, NixOS will install and configure the desired software for you. The ecosystem is fantastic; the only real problem is that the Nix language itself is kind of arcane and difficult to grok at first.
There are many upsides I see when using NixOS on all of my computers:
The configuration is stored in a single version-controlled repository. Making a change on all four machines is about as simple as making it on one computer only.
An add-on called Home-manager manages my dotfiles. There are a ton of pre-defined modules you can enable with a one-line config change. This obviates the need for most of the usual configuration files (e.g.
.bashrc), because those get automatically built from a high-level description of what you want.
My Homeserver can be automatically deployed to with
deploy-rs; this is something that's unique to NixOS, and even Ansible can't match its power. It will build an updated system locally, transfer that to the server, activate it, and, should anything go wrong, has automatic rollback.
I'm using devenv.sh for my programming projects now. It extends the idea of a lockfile from just language-specific dependencies to the entire project -- the compiler and all tools can be version-pinned through the power of Nix.
For things I don't need very often, the
commatool is pretty cool. It is basically 'command-not-found' on steroids. Instead of printing a string that tells you the name of the package for the program you intended to run, it'll just go ahead and install that package ephemerally and then run the program for you. You just have to prefix the invocation with a comma:
, cowsay foo.
I made quite a few mistakes along the way, but now that everything is running smoothly, I'm very happy with the setup.
I migrated all my domains to my