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

Writes at https://amf3.github.io
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
My new sprinkler controller is finally online. It's #esp32 based and ESPHome is doing the heavy lifting. I stuck a DHT22 temp sensor on it because why not. #esphome even has a /metrics endpoint so I can graph relay state and sensor temp via Prometheus.
July 8, 2025 at 10:19 PM
OpenAPI is so easy right? Until it generates Go structs full of pointers. 😞 I wrote up what worked and what didn’t.

“OpenAPI in Practice: Go Server + Python Client from Spec”
amf3.github.io/articles/api...

#OpenAPI #Golang #Python
July 6, 2025 at 6:35 AM
🚢 New post - DIY Docker Volume Drivers: What’s Missing

What’s missing in the plugin ecosystem and how I built a simple Go plugin without root, FUSE, or cloud lock-in.
amf3.github.io/articles/sto...

#Docker #GoLang #DevOps #Homelab
DIY Docker Volume Drivers: What's Missing
How to write a simple volume plugin. No root, no FUSE, just HTTP and Go
amf3.github.io
June 27, 2025 at 7:59 AM
I’m starting to get why Docker plugin development slowed down.
* write the plugin
* create a image containing the plugin
* create a throw away container using the image
* extract the rootfs from the container with “docker export” into a directory named rootfs
* finally run “docker plugin create”
June 24, 2025 at 4:06 PM
I was curious how snappy compared to lz4 and wrote a go program to find out. Snappy seems to be a bit better with both compressed data output and resource usage.

Input is the first 1,000,000 numbers of pi.
June 18, 2025 at 7:40 AM
I was looking at Mulitpass docs and noticed this deprecation banner. While it makes sense to simplify overlapping product features, I'd like to think someone from Canonical read my cloud-init series. 😀
June 17, 2025 at 5:29 AM
This is exciting.

I just noticed an issue in Moby that has a linked prototype for supporting CSI plugins in regular Docker (not swarm). I hope it gets approved.

github.com/moby/moby/is...
June 11, 2025 at 2:28 PM
What if a tar archive could behave like an append-only object store that supports versioning of objects? I demonstrate how it's possible in my latest post.
amf3.github.io/articles/sto...
Using Tar Files as Object Store Storage
Implementing Object Store storage with Log Structured Archives.
amf3.github.io
June 10, 2025 at 7:15 AM