January 6th - February 9, 2025

Last year

2024 came to a close with no accompanying blog post from me, despite my plans. I want to blog so that I can remember what I did, what I was thinking, what happened in the world around me. The farther I get from the past the less of it I remember, and the drop-off is steep.

Speaking of memory, at the end of last year I began to work improving own knowledge retention using a spaced repetition tool called Mochi. There is a lot that I could say about that experience, but I think it deserves its own post, so I'll leave it for now.

On The Computer

Switching to NixOS

Prehistory

For better or for worse, a sizeable chunk of my life has been looking a computer screen. While I can't say much good about the time I've spent my phone, I do earn my living working at a desktop and still hold some hope in the benefit of the personal computer for mankind.

Because I do spend so much time with this thing, I'd like my interactions with it to be satisfying. For many things in life, there are two kinds of users: those who wouldn't think to change the defaults and the rest are serial tinkerers. Over the years I've been unable to keep myself from tinkering with my desktop computer setup.

In high school I installed Linux on a computer for the first time. The year was 2008, and I burned a live CD with Ubuntu 8.04 Hardy Heron. I still remember the default desktop background. Then in college I switched from Ubuntu to Arch Linux, for reasons that might be considered masochistic. In 2013, for my first real programming job I decided to ditch Linux. I bought a Macbook and lived in MacOS (OS X at that time) for a few years. But eventually, I got frustrated with the inability to customize MacOS to my liking.

I returned to Linux and installed Manjaro Linux, then Void Linux for a bit, followed by Fedora Silverblue.

Fedora Silverblue was my first foray into the world of immutable distros, which snapshot every package install so that you can roll back to previous iterations if necessary. I had a bash script that I used to install system packages and I used Chezmoi for keeping my dotfiles in version control. I ended up with something sort of idempotent, but not clean enough to be proud of.

In late 2024 I came to realize that everything I was trying to do in a bespoke way using disparate tools is stuff that the NixOS people have been putting serious effort into for years.

Installing NixOS

My NixOS config is on Github. I use Home Manager, which helps me keep every system modification in version control. I have two NixOS installations, one on my desktop computer, the one I primarily use for work, and another on my work laptop. I aim to keep them both largely in sync, any time I modify my window manager or Emacs configurations I want that change on both machines. However, I need to retain the ability to let each machine configuration diverge from the other. The hostname, obviously, should vary. And then because I have a displays with different DPIs I want to set the Emacs font size separately.

For software development projects I use devenv, which is based on Nix. If I have a software project I want to be able to specify its dependencies in the source code in a way that they can be automatically configured, not just in a README. And beyond that, just because a package is needed in one software project doesn't mean that I need it to be installed system-wide.

Historically, Unix was a multi-user system. Administrators installed packages on a machine, and in most cases each package was made available to every user on the system. There is not a built-in way to designate "why" a package is installed or where it should be applicable. It bothers me when I don't know if a package came with the system or if I installed it, and when I can't remember why I thought it would be useful to have.

Nix, the Language

The basic syntax and semantics of Nix seem elegant enough to me. I like the syntax sugar that expands a.b.c = true to a = {b = {c = true}}. I haven't spent enough time with the language to understand at the more complicated blocks of code, or to find the sharp edges that I'd guess exist.

Code Brewing

In my head I've been working on a library for clojure that does declarative domain modeling. zen-lang showed me that you could have an ambitious library that uses static .edn files to specify huge parts of your system, potentially replacing tools like Malli and Component, in one swoop. I'd like to try my own hand at this concept, but pull in some knowledge or implementation from the semantic web RDF with some reasoning tools like OWL and Apache Jena. I believe this is the path that Arachne was going down.

Family

One-year old

The last time I wrote, our baby M. was taking her first steps.

M. is growing more comfortable with other people. She's stayed overnight at her Nana and Pop's house several times, and doesn't mind leaving us to do so.

My 16-18 month is delighted, or perhaps somewhat compelled, to master patterns. I take her out of the bathtub in a towel and plop her on the bed. She smiles as I dry her off. When I stand up she puts her hands out, knowing that the next step is baby lotion. I put a drop on each of her hands. She checks it out briefly and then begins to rub it on her chest and stomach, while I cover her legs, arms and back. Now her eyes light up and she brings her finger up to her mouth and begins mimicking brushing her teeth. She knows which step is next, and has predicted the future!

The same thing is true for the picture books that we read together. For her favorite books she knows what comes next on each page, and she often has a motion or a sound or an act-out to go along with it. Often times as soon as she turns the page and does her sign, or points out her favorite part of the picture, she starts turning to the next, giving me just a second or two to read the words on the page. It feels like she's drilling the pattern from memory.

Some people hold the position that humans are pattern-matching machines. I think that a one year old makes a good case for that being so.

New Foods

M. eats pickles now and even drank spoonful after spoonful of dill pickle juice one night after dinner.

New Behaviors

She likes to play a game of hiding in her closet and closing the door. We take turns, first I hide and she opens the door and then we switch places. I do feel like I introduced the concept of "hiding" to her, by example. I wonder if she would have ended up playfully hiding on her own before seeing someone else do it.

New Baby on the way

At the end of this period we are awaiting our next child. Alex's due date is mere days away. I am excited for to watch the relationship bloom of two sisters close in age. When M. is being clingy with me I tell her that we are working on getting her a playmate.

Woodworking

My dad gifted miter saws to both me and my brother this Christmas, which renewed my resolve to level up my woodworking skills. I bought a shop vac and a hose that connects the vac to the back of saw for collecting dust as I cut.

I built two saw horses using some 2x4 lumber I had lying around. I was hoping to avoid buying any new wood for this small project. However, I did find that some of my lumber was in pretty bad shape. The long 2x4s had some slight crooking, and even worse, there were pieces that were twisted. I avoided using the most egregiously twisted pieces, and attempted to make due with the pieces that seemed only slightly warped.

I tried to make everything square and glued and screwed it all together. Due to my aforementioned thrift, I did end up with one saw horse with a little bit of wobble to it, due to the cupping on the foot. I think I can glue a shim to one part to stabilize it.

Books Read

Notable Podcasts

The Drive by Peter Attia MD. podcast #299 Optimizing muscle protein

A friend forwarded me this podcast. The guest puts forth the argument that Type II (fast twitch) muscle fibers typically decline in people of old age, but that decline is not gradual. Rather it happens rapidly during periods of inactivity. As examples he mentions multi-day bed rest after a surgery or illness, as well as a particularly lazy beach vacation. During this inactive periods lean muscle mass is lost, and often never re-acquired. Then well-meaning compensations are often then made by the person or their family, avoiding stairs, handling chores for the person, which further exacerbate the deterioration.

Onward

I need to start on the 25.B blog post now, so that I can have it ready to post near the end of the next period: March 23rd.

February 19, 2025