I like exercising first thing in the morning. I feel good for the rest of the day, and I’m less likely to skip it.

I also like working first thing in the morning. It’s quiet, there are fewer distractions, and my head is clear of the detritus that inevitably builds up over the course of the day.

On any given day, I can only do one, not both. And I like routine, so I don’t really switch back and forth. So for decades now, I’ve exercised in the morning on weekdays and worked in the morning on weekends.

I guess I could get up at 4am every day, exercise, and then work, but I’m nowhere near that aggressive. (To be clear, I don’t deserve “credit” for any of this anyway. I only do it because it feels good and it works, not out of some Puritanical, holier-than-thou work ethic.)

Still, it would be nice to find a routine that somehow included both of these!


How do we manage our family finances? Let me tell you a story.

The year Gina and I got married, we filed taxes separately. Gina was a relatively sophisticated investor and tax strategist, so she had accountants prepare her return. I didn’t, so she got a front row seat to watch me prepare mine. I did what I always did:

  1. Purchase TurboTax.
  2. Close my eyes.
  3. Click the Next button 50 times in a row.
  4. Enter my bank account details and let the IRS take their money. I rarely noticed how much it was.

Gina was horrified, and I was never allowed near our finances again. That arrangement has worked out well for everyone involved, including our portfolio.

(The flipside of this is, I approached investing the same way. My strategy over the past 20+ years has been to buy Vanguard funds and then forget about them. All things considered, that’s done pretty damn well.)


The idea that new code is better than old is patently absurd. Old code has been used. It has been tested. Lots of bugs have been found, and they’ve been fixed. There’s nothing wrong with it. It doesn’t acquire bugs just by sitting around on your hard drive. Au contraire, baby! Is software supposed to be like an old Dodge Dart, that rusts just sitting in the garage? Is software like a teddy bear that’s kind of gross if it’s not made out of all new material?

Joel Spolsky, Things You Should Never Do, Part I

essay, Uncategorized

Socket activation

I’ve spent some time over the last few weeks reading about the various *nix init systems: venerable SysV, interim replacement Upstart, controversial monolith systemd, Apple’s proprietary launchd, and niche variants like runit and Epoch. Lots of history, lots of flame wars.

One key takeaway: socket activation is a breathtakingly elegant way to parallelize system startup. In every modern operating system, boot consists of starting hundreds of processes and waiting for them to initialize. Most depend on each other, so many init systems encode these dependencies by hand, waiting for each process to initialize completely before starting the next. Not surprisingly, this is heavyweight, slow, and a maintenance burden.

The key insight was that processes generally interact with each other over sockets, usually AF_UNIX (ie files), occasionally AF_INET and others. If a process isn’t yet listening on a socket, connecting to it will fail, so a given process can’t start until the processes it depends on are ready and listening. Continue reading


Last night’s reading: “mercurial” cores, CPUs that very occasionally return the wrong result for some instructions. 😱 Affects a few CPUs per thousand, across vendors.

We’re used to ephemeral bit flips at scale in memory and (some) storage, due to solar rays, which we handle with ECC and CRCs, but we expect a different failure model from CPUs. Maybe no longer.

I mean, how would you ECC compute? Can’t even begin to imagine. Redundant hardware? Starts to feel as big and unfixable as Spectre/Meltdown. 😭😭😭