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

Writes at https://amf3.github.io
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
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
Alright, speeds are improving. Results are with a Celeron (G3930 from spare parts) running a #mikrotik VM under #qemu. A dual port PCI card is passed through to Qemu for the NIC. It's still not full download speeds (expecting 750Mbps) but shows that my little Hex-S router is CPU bound.
August 7, 2025 at 8:24 AM
I don't think I can call this a win after implementing queueing to decrease latency. While latency was improved, bandwidth took a major hit. :( I'll update this thread if I discover anything useful.
August 4, 2025 at 8:03 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
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
I'm very excited to see my custom Docker volume plugin working.

Okay I think you know where this is heading. That's right another HOWTO blog post !!! It may take several days to a week to publish. I've got a lot of notes to pull together.
June 25, 2025 at 3:35 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
Nice. This is with the same input file, compression for zstd is similar to gzip but a fifth of the time. Good to know. 😀
June 18, 2025 at 9:49 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
Why yes, I do use Jenkins to water my blueberry plants. Don't you? 😀

I'm replacing a Particle Photon with a ESP32 and esphome.io. A few blocks of YAML results in a web server that toggles sprinkler relays on or off.

I never thought I would buy into the phrase 'YAML programer' but now I do. 🤯
May 28, 2025 at 5:27 AM
Success!! I ended up removing the 0 ohm resistor on the left and jumpering it with a header pin. One drive down, one to go.
May 16, 2025 at 1:26 AM
I've been practicing my soldering skills today. This is a q-tip for scale. I'm still suspicious of the left part but it will remind me to not mix power cables from different modular PSUs. 12v & 5v got applied to the 5v & 3v lines on a 10 TB SATA drive.
May 15, 2025 at 11:47 PM
This is a neat trick. Cloudflare, OpenDNS & Google DNS offer a TXT record that returns your public IP.
theboreddev.com/how-to-obtai...
February 4, 2025 at 1:10 AM
Aww cloud-init you little rascal you. It keeps creating the LVM volume on the swap partition instead of where it belongs. 🙁
January 16, 2025 at 6:42 AM