Adam Faris
banner
af9.us
Adam Faris
@af9.us
Storage Curious | No Cloud, No Problem | Data Infra Fan

Writes at https://amf3.github.io
New post: Why a Two-Node Docker Swarm w/ ZFS Snapshots Is Enough

This isn't about defending Swarm, it's about designing systems with clear failure modes and using storage that doesn't pretend to scale magically #homelab

This makes 12 posts in 12 months. 2025 goal met
amf3.github.io/articles/arc...
Decoupling Compute and Storage
Why a Two-Node Docker Swarm with ZFS Snapshots Is Enough
amf3.github.io
December 19, 2025 at 7:17 AM
Neat, a SSO (single sign-on) middleware that supports OpenID on the frontend and simple HTTP auth with backend apps. This might be what I need for self-hosted services at home. 😀

www.authelia.com
Authelia
Authelia is an open-source authentication and authorization server and portal fulfilling the identity and access management (IAM) role of information security in providing multi-factor authentication ...
www.authelia.com
December 7, 2025 at 7:27 PM
This is fun and shows which topics I discussed throughout the year.

My most-used words in 2025 were:

1. "docker" (12×)
2. "plugin" (11×)
3. "cloudinit" (11×)
4. "router" (8×)
5. "qemu" (8×)

See which words you used the most here: anisota.net/harvest
Anisota's Annual Bluesky Harvest 2025
A recap of your year on Bluesky. Discover patterns, connections, and insights from your journey in the ATmosphere.
anisota.net
December 2, 2025 at 11:58 PM
Will I ever settle on a storage format when writing this app? So far its been SQLite -> Parquet -> NDJSON. I find the JSON part boring. No compression and is it any better than CSV when not using nested fields?

Now I'm tempted to try Protobuf to get the compression that I likely don't need.
December 2, 2025 at 1:08 AM
I use git submodules to pin the Papermod theme version used by my blog.

Tonight I realized I can pin the Hugo web framework by using go modules. The pinned Hugo version is ran with "go tool Hugo".

One of those things that became obvious to me once it was obvious. Now for some CI pipeline updates 😐
November 30, 2025 at 5:43 AM
Nice summary of past AWS re:Invent videos on how S3 works behind the scenes. bigdata.2minutestreaming.com/p/how-aws-s3...
how AWS S3 serves 1 petabyte per second on top of slow HDDs
Learn how Amazon built the backbone of the modern web that scales to 1 PB/s and 150M QPS on commodity hard drives
bigdata.2minutestreaming.com
November 25, 2025 at 6:03 PM
Do you ever have those moments of running across a fun article, only to realize it was posted on hacker news two months ago? Me, this morning. 🤦‍♂️

bogdanthegeek.github.io/blog/project...
Hosting a WebSite on a Disposable Vape
Someone's trash is another person's web server.
bogdanthegeek.github.io
November 19, 2025 at 6:29 PM
I tasted the forbidden fruit. Running my home router inside a VM. It's delicious.

#Mikrotik CHR, #QEMU, PCI passthrough, qcow2 snapshots, full reproducibility.
Easy rollback. Manage networks like software projects.

Here's how I built it: amf3.github.io/articles/vir...
Uh-oh. Is the router down?
Easy roll back by managing home networks like a software project
amf3.github.io
November 19, 2025 at 8:39 AM
Is it really only two people who are behind distributing PCI tuples which identify PCI devices on #Linux? Values are distributed in the pci.ids file, used by the kernel and apps like lspci.

pci-ids.ucw.cz

How does one even land that kind of gig? Yet another moment where my brain says 🤯.
The PCI ID Repository
pci-ids.ucw.cz
November 12, 2025 at 6:53 AM
TIL Go quietly fixed sharing behavior with for loop variables being used by goroutines. Previous to Go 1.22 each goroutine reused the same loop variable. Now each iteration gets its own copy.

No more i=5 five times. 🤭 This explains why one might find i := i in older code, a work around. #golang
November 4, 2025 at 3:09 AM
In the spirit of writing more, here's a post on how
I build Go CLIs with urfave/cli, how it keeps help and actions
coupled with options, and why I'll use it with future projects.

amf3.github.io/articles/cod...

#golang #cli
Go CLIs: Creating Subcommands and Flags
Using urfave/cli to create polished CLI applications
amf3.github.io
October 6, 2025 at 3:14 AM
Speaking of GC, there's a thread on r/golang that discusses the new experimental Green Tea GC in Go 1.25. Testing shows its not better but it's not worse.

www.dolthub.com/blog/2025-09...
September 29, 2025 at 7:49 PM
What happens when @birdsoftheworld.bsky.social combines machine learning with a phone? You get a bird ID app that uses bird calls to ID birds.

Think Pokémon Go but with real animals.
merlin.allaboutbirds.org
Merlin Bird ID - Home
Identify Bird Songs and Calls Sound ID listens to the birds around you and shows real-time suggestions for who’s singing. Compare your recording to the songs and calls in Merlin to confirm what you...
merlin.allaboutbirds.org
September 24, 2025 at 11:21 PM
With a QEMU article stalled at 80% complete and a tiny utility project waiting to be published to github, I should probably pay attention to this advice.
September 11, 2025 at 6:46 PM
Interesting. QEMU 10.1 supports WASM and can run inside a browser. 🤔

wiki.qemu.org/ChangeLog/10.1
ChangeLog/10.1 - QEMU
wiki.qemu.org
September 11, 2025 at 1:47 PM
I’m feeling out of the loop.

I started with MD5 checksums to find duplicate files in local storage. Then I read modern CPUs have instruction sets for SHA256. Oh but there's also xxhash which is even faster at checksums.😕

#golang output shows md5 is 3x slower than sha256 and 5x slower than xxhash
September 5, 2025 at 7:01 PM
I like this #golang comparison of different SQLite drivers. They include test environment specifics, which allows me to replicate the findings.
github.com/cvilsmeier/g...

Without specifics I wonder if the results are valid. Something to keep in mind for the next Product A is better than B post.
GitHub - cvilsmeier/go-sqlite-bench: Benchmarks for Golang SQLite Drivers
Benchmarks for Golang SQLite Drivers. Contribute to cvilsmeier/go-sqlite-bench development by creating an account on GitHub.
github.com
August 29, 2025 at 3:49 PM
I like this post explaining how file systems can be implemented with a key value store.
blog.vmsplice.net/2024/01/key-...
Key-Value Stores: The Foundation of File Systems and Databases
File systems and relational databases are like cousins. They share more than is apparent at first glance. It's not immediately obvious t...
blog.vmsplice.net
August 6, 2025 at 3:26 PM
I’ve been quiet lately while looking into a bufferbloat issue with my home internet. Bufferbloat is latency caused when a router buffers too many packets and can impact games and video calls.
August 2, 2025 at 4:29 AM
Something on my TODO list is writing up how to automate Jenkins deployments. It’s essentially a two step deployment.

1) The “configuration as code” plugin installs plugins and manages users.
2) The “Pipelines as code” plugin manages projects.

Okay, okay, I’ll move it to the next sprint.
July 25, 2025 at 5:17 AM
I just launched Tarchive, a simple, tar-based HTTP object store.

Think of it as a personal object store that uses append-only .tar archives called “pails.” It’s fast, inspectable, and scriptable. Great for devs, homelabbers, and archivists.

GitHub: github.com/amf3/tarchive

#Go #OpenAPI #homelab
July 16, 2025 at 6:38 AM
Hey look at that. I complain about something and it gets fixed. 😀

The latest release of oapi-codegen announced a new feature for dealing with optional pointers. #OpenAPI #golang

github.com/oapi-codegen...
July 15, 2025 at 7:18 PM
Docker Offload is an interesting pivot. My guess is they are using predefined contexts in Docker desktop to redirect to their cloud services. This seems like something which could be done locally. Now to find that Nvidia GTX1060 I have in my spare parts bin for running OpenLLaMA. 🙂
July 14, 2025 at 3:25 PM
Generics in Go finally clicked. 🎉

Examples felt abstract. Until generics saved me from writing a bunch of boilerplate in my unit tests.
Read about it here: amf3.github.io/articles/cod...

#golang #generics #testing
Go Generics: A Real World Use Case
Using Generics for Testing Pointers In Structs
amf3.github.io
July 12, 2025 at 6:54 AM