Howdy!

Welcome to my blog where I write about software development, cycling, and other random nonsense. This is not the only place I write, you can find more words I typed on the Buoyant Data blog, Scribd tech blog, and GitHub.

Hashicorp Nomad, almost but not quite good

My home office has grown in size and for the first time in decades I believe I have a surplus of compute power at my disposal. These computational resources are not in the form of some big beefy machine but a number of smaller machines all tied together by a gigabit network hiding away in a server cabinet. The big problem has become how to effectively utilize all that computational power, I turned to Nomad to orchestrate arbitrary workloads on static and ephemeral (netboot) machines. As the title would suggest, it’s almost good but it still falls frustratingly short for my use-cases.

Read more →

Why we re-export symbols from other libraries in Rust

Dependency management in the Rust ecosystem is fairly mature from my perspective, with crates.io, Cargo, and some cultural norms around semantic versions, I feel safer with dependencies in Rust than I have in previous toolchains. It’s far from perfect however, and this question helps highlight one of the quirks of how Rust dependency management does or does not work, depending on your perspective:

Read more →

Dynamically forwarding SSH ports with "commandline disabled"

I frequently use SSH for accessing one of the many development workstations I use for work, which includes developing network services among other things. A couple of years ago I wrote about this hidden gem in ssh which allows dynamocaily forwarding ports. This handy little feature allows dynamocailly adding local port forwards from within an already running SSH session. Recently however this feature has stopped working properly, emitting commandline disabled.

Read more →

Requiring non-default features to be set in Rust

I found myself refactoring a Rust crate in which I had two non-default features but at least one would need to be set in order for cargo build to function. Cargo allows a default feature set, or allows different targets to have required-features defined. My use-case is different unfortunately, I wanted slightly different semantics to support either s3 or azure features. I stopped by ##rust on libera.chat and as usually happens, got a nudge in the right direction: build.rs:

Read more →

AIDS/LifeCycle 2023 is a go!

I am really excited to be officially in for AIDS/LifeCycle 2023! This will by my third year supporting the life-saving services offered by San Francisco AIDS Foundation and the Los Angeles LGBT Center by riding from SF to LA with AIDS/LifeCycle.. This past 12 months has been among the most stressful and rewarding in my adult life, so I’m doubly excited to have the support of so many friends and fmaily. In the next month I’ll continue fundraising to try to meet my goal, and would appreciate your help too!

Read more →

Invalid signature in boot block on FreeBSD

I don’t have a lot of opinions about UEFI, but it seems that building something as critical as booting around the FAT32 filesystem is not a great idea. FAT32 is a simple but archaic filesystem which has the resiliency of a paper boat. While moving machines around in my homelab this weekend I was bit by that resiliency as halfway through booting my FreeBSD NAS it complained that it could not complete fsck operations: Invalid signature in boot block: 0000.

Read more →

Considering object-orientedness from the Rust perspective

A very simple question in a community channel earlier this week sent me deep into reflection on software design. I started writing software as is classically understood as Object Oriented Programming (OOP), with Java, Python, Ruby, Smalltalk. Design has been mostly about creating those little boxes that encapsulate behavior and state: the object. Rust in contrast I wouldn’t describe as an object-oriented programming language, to be honest I’m not sure what we call it. It’s not functional programming and it’s not object-oriented programming as I understand it. It’s something else which is the key to why Rust is so enjoyable.

Read more →

Ditching the cloud is most likely a bad idea

I have the dubious honor of leading a migration from an on-premise managed colocation facility into AWS. It was necessary to help the business succeed, but frankly I would rather not have needed to do it. Earlier this morning I saw a post about ‘leaving the cloud” by that attention-seeking guy who keeps trying to keynote RailsConf, I had some opinions. I was hopped up on caffeine and free office snacks, and just could not help but share my thoughts in the fediverse.

Read more →

Scheduling work with market dynamics

I had a lucky break in the day and was able to read this blog post which popped up in my social feed. In essence it talks about what Fly.io did to rebuild their scheduler to better match what they’re trying to accomplish. Orchestration and scheduling are topics I like to geek out on, going back many years as part of the Jenkins project. But this quote in particular caught my eye:

Read more →