For a long time after I rebuilt my jails host, I could not restart a certain number of jails due to an “interface already exists” error. For the life of me I could not make sense of it, The services running in the jails were useful but not required so I put off tinkering with it. I thought that I would magically stumble into the solution in my sleep or something equally silly.
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.
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:
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.
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:
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!
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.
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.
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.
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:
I think coding interviews categorically suck
I recently had a good discussion with another engineering leader about the merits of coding interviews. They have long been a trusted part of the tech company interview process, but I have been mostly hiring without them over the last 5 years. Below I wanted to share some of the thoughts that I sent my colleague:
A lot of engineering management is actually information management
Are you an organized person? Do you understand information flow in your organization? The importance of categorization and taxonomy? You might be a good fit for Engineering Management! Having now spent a number of years in management and leadership positions, I have noticed a number of successful patterns, and unsuccessful patterns. In this post I want to focus on one of the more successful patterns: good information management.
ChatGPT and your intellectual property
There is an excessive number ChatGPT screenshots littering social media right now, and not nearly enough critical thinking about feeding data into this novel new chatbot. An anecdotal survey of my timeline includes people asking ChatGPT to solve math equations, write emails for them, create short story prompts, identify bugs in code, or even generate code for them. Behold, the power of AI!
The problem with ML
The holidays are the time of year when I typically field a lot of questions from relatives about technology or the tech industry, and this year my favorite questions were around AI. (insert your own scary music) Machine-learning (ML) or Artificial Intelligence (AI) are being widely deployed and I have some Problems™ with that. Machine learning is not necessarily a new domain, the practices commonly accepted as “ML” have been used for quite a while to support search and recommendations use-cases. In fact, my day job includes supporting data scientists and those who are actively creating models and deploying them to production. However, many of my relatives outside of the tech industry believe that “AI” is going to replace people, their jobs, and/or run the future. I genuinely hope AI/ML comes nowhere close to this future imagined by members of my family.
Meet Buoyant Data, and let me reduce your data platform costs
One of the many things I learned in 2022 is that I have a particular knack for understanding, analyzing, and optimizing the costs of data platform infrastructure. These skills were born out of both curiosity and necessity in the current economic climate, and have led me to start a small consuhltancy on the side: Buoyant Data. Big data infrastructure can be hugely valuable to lots of businesses, but unfortunately it’s also an area of the cloud bills that is frequently misunderstood, that’s something that I can help with!
The fastest way to make Rust Strings
A friend of mine learning how to code with Python was complaining about the
myth that “there’s a Pythonic way” to do things. The “one true way” concept
wasn’t ever taken seriously in Python, not even by the standard library.
Practically speaking, it’s impossible not to have multiple ways to accomplish
the same outcome in a robust programming language’s standard library. This
flexibility jumped out at me while hacking on some Rust code lately: how many
ways can you turn str
into String?
The Death Ride
Endurance athletes have a misconfiguration in their brain, one that compels them to pursue increasingly foolish goals, for me the Death Ride was as foolish as it was ambitious. The course is 103mi, starting at ~5k feet elevation, with a total of about 14k feet of elevation gain. It is not a race per se, though I’m sure somebody is “first” back to the finish line. What is celebrated are completions. If you can survive all six passes, you’re a winner! The mountains are steep, the road largely exposed, and the heat is oppressive, but hey! Good luck! Have a great ride!
Cycling through calories
I never really paid attention to the calories burned during cycling until recently, and it’s still somewhat shocking when I look at it. With my love of cycling rekindled by AIDS/LifeCycle I have spent a lot more time in the saddle this year. Between short criterium races, my longest at 140mi, or the most elevation with the Death Ride, I have needed to be very mindful of my nutrition before, during, and after these rides. In short, cycling can burn a lot of calories.
Finishing: AIDS/LifeCycle Day Seven
Waking up on the last day of big gay summer camp is always a downer. In the warm and muggy air of Ventura, the love bubble starts to pop and you’re left with one last bike ride before returning to the real world. This year was my second AIDS/LifeCycle, and I was not excited to wake up for day seven. Once the tent and gear were dropped off, my breakfast consumed, there was nothing but a measly 70 miles remaining for ALC 2022.
Helping hands get the job done: AIDS/LifeCycle Day Six
After Red Dress Day it’s easy to think “we’re almost to LA!” This part will be easy!” and then BAM you wake up at 4:15 and realize that there’s almost 90 miles until the next camp. Lompoc to Ventura is one of the most beautiful days along the route, taking us through Goviata pass, Goleta, Santa Barbara, and down the coast line towards Ventura. Beautiful but not easy.