RSSAmplifier

Blog

Stonecharioteer on Tech

Recent content on Stonecharioteer on Tech

tech.stonecharioteer.comRSS feed ↗287 posts

Latest posts

Dottler - Manage .env Files Across Git Worktrees

Manage .env files across Git worktrees with Dottler, a local Rust CLI that imports, stores, and dumps project environment variables without a server.

Checking Mermaid Diagrams in CI

I wrote a small GitHub Action to catch broken Mermaid diagrams in Markdown and standalone diagram files before they land in a repository.

Who Logs You In When You Use Tailscale SSH?

Why Tailscale SSH can log you in when OpenSSH would reject you: tailscaled, ACLs, root privileges, and Unix users.

Love's Labour Lost

On building Merrilin in the blind, choosing a hard problem with no promise of money and no light at the end of the tunnel

Understanding Traceroute

I never understood how traceroute discovers each hop. Turns out it's a clever TTL trick, and about 80 lines of Rust.

I Traced My Traffic Through a Home Tailscale Exit Node

A practical deep dive into Tailscale exit nodes: route changes, traceroute evidence, DERP fallback, trust boundaries, and why this model can be free.

What Was I Reading Last? In Three Not-So-Easy Pieces

Syncing reading progress across devices sounds simple until you try it. Discovery, sync, and conflict resolution — with and without a cloud.

Dogfooding Is Hard

I've been using only Merrilin to read books since we built it, and I need things to improve constantly.

Code blocks in your books, finally

Your programming books deserve better than monospace blobs. Merrilin renders code beautifully in EPUBs and PDFs now.

GoForGo v0.9.0

I've made some updates to https://github.com/stonecharioteer/goforgo

Merrilin - We built an app to read books

We built Merrilin, an AI-powered reading app with spoiler-free book companions, live sync, and beautiful themes.

I use a Macbook now

After using Linux for nearly 20 years, I've gotten an M5 Macbook Pro as my daily driver.

Data Structures & Algorithms - Preparing for Interviews

My process for learning Data Structures and Algorithms, with some segues into data visualization

Using a local DNS namespace for local service discovery

I wanted to stop using IP addresses to access my homelab services, and I spent a Friday evening fixing that.

Distributed Systems Learning Resources

Curated collection of books, papers, and articles for learning distributed systems and performance engineering

Direction

Reflections on my career and where I want to go

KOllector - Publishing KOReader Highlights

How I built an application to merge KOReader highlights across devices and publish them.

gbt: branches touched in the last 24 hours

A tiny Fish function I use at Chatwoot to remind myself which Git branches I touched in the last day.

A Soiree into Symbols in Ruby

A Pythonista opens `irb` and looks at all the symbols in Ruby. Or so the joke begins.

Some Smalltalk about Ruby Loops

Sending a message about why you shouldn't write `for` loops in Ruby.

Ruby Blocks

How to start really getting Ruby, especially blocks.

Returning from Ruby Blocks, Procs and Lambdas

How does `return` work within blocks, procs and lambda?

Ruby

How I started learning Ruby and Ruby on Rails in 2025 and what my experience has been like so far.

OpenWRT

How I spent my week setting up multi-wan failover on OpenWRT on my Beelink EQI12

My Linux Laptop Finally Works: How Claude Helped Me Fix Years of Annoyances

After years of living with Linux laptop quirks - battery surprises, broken suspend, useless gestures, and monitor chaos - I partnered with Claude to actually fix these problems instead of just accepting them as "the Linux experience."

TIL: Watchexec - Modern File Watching for Development Workflows

Today I learned about watchexec, a cross-platform file watcher that replaced entr in my development workflow with better defaults and intuitive usage patterns for Hugo, Rust, and Go projects.

A Less Busy Mind

Using Coding Assistants frees me up to do other things

GoForGo - Learn Go through live examples

Small exercises to get you used to reading and writing Go code; Inspired by Rustlings

Migrating My Old Blog to Hugo with Claude

I finally managed to migrate all the tech content from my older blog(s). My blog went through 2 iterations before this, first using Jekyll and markdown, and then using Sphinx and RestructuredText. Today, I’m back on markdown, using Hugo. Thanks to GenAI, I’ve added admonitions to the PaperMod theme, and I’m able to modify the theme to do whatever I want with Hugo. I don’t…

The Qtile Window Manager: A Python-Powered Tiling Experience

My journey from XFCE to Qtile, a tiling window manager written entirely in Python, including setup, configuration strategies, and real-world config examples.

Read the RFCs that Built the Internet

I built an interactive tutorial platform for learning internet fundamentals through RFCs, built with AI. Features popup glossary, diagrams, and Python code examples.

Failing in Public

June 17, 2025 I was 17 when I failed school for the very first time. I was in the 11th grade and if I’d continued at that school, I’d have failed in 12th, which is a whole lot worse, apparently. I was studying at the Oxford Senior Secondary School (CBSE), and I’d done poorly on all my subjects that year. Primarily, Biotechnology, which was promised to be the “great big…

Py-x-Protobuf - Or How I Learned to Stop Worrying and Love Protocol Buffers

Why Protocol Buffers are superior to JSON for microservice communication. Much faster serialization/deserialization with practical Python examples.

🧡 Favourites

These are a list of my favourites in tech, whether they’re podcasts, blogs, youtube videos, or books. Books Designing Data Intensive Applications - Martin Kleppmann Youtube Playlist of Lectures Database Internals - Alex Petrov (Also watch his talk - Link ) The Rust Programming Language - Carol Nichols and Steve Klabnik Learn Python the Hard Way - Zed A. Shaw (This book taught me how to code…

Python Reverse a List

Comparing three methods to reverse lists in Python: slice notation, reversed(), and .reverse(). Includes performance benchmarks and readability considerations.

🖥️ My Gear

I get asked what devices I use (since I have a LOT of them). I wanted to document these at one place so that I answer this question a little deliberately. TLDR Devices Apple MacBook Pro (M5) laptop ASUS ROG Flow X13 (2022) laptop 2x Lenovo ThinkPad T14 Gen 2 Intel i5 laptops Beelink EQR5 Mini PC Beelink EQI12 Mini PC Apple iPad (A16) tablet White MoErgo Glove80 keyboard Logitech MX Ergo trackball…

New Beginnings

Restructuring my website into subdomains with separate themes. Moving to Hugo and PaperMod theme for better content creation workflow.

Leaving ChainSafe Systems

I've left my role as Lead Software Developer at ChainSafe Systems in January 2025.

Screen Lock for Cinnamon Desktop using Zenity and Terminal Commands

A simple solution using Zenity to create a confirmation dialog for screen locking in Cinnamon Desktop on Fedora 39.

Crews Not Teams

Building effective teams by leveraging individual strengths instead of competing. Inspired by tactical video games where each member has specialized skills.

A System for Getting Better at LeetCode

Building sustainable habits for coding interview preparation. Focus on systems over outcomes, consistent practice, and measuring the right metrics for long-term improvement.

So Far So Rust

My journey learning Rust over 145 days as my primary programming language, including gotchas, resources, and why I chose Rust over Golang.

Retrying HTTP Requests with Rust

How to implement retry logic for HTTP requests in Rust using reqwest and the again crate. Handling network failures, rate limiting, and JSON parsing errors with exponential backoff.

The Two of Three Rule

A career framework based on statistical quality control: Pay, People, Work - you can only have two good things at any job. Understanding when to join, stay, or leave a company.

A Primer on Control Charts

An introduction to statistical quality control using control charts and Shewhart charts. Understanding process variation, control limits, and statistical manufacturing principles.

Learning Rust

My journey learning Rust after 3 years of attempts, finally succeeding after 40 days and building a webservice at Merkle Science.

Explicit is Better than Implicit: Rust for Pythonistas

A comprehensive introduction to Rust for Python developers, covering why Rust matters, memory management, ownership, borrowing, and practical code examples.

Using Custom Delimiters in Jinja Templates

How to use custom variable markers in Jinja templates to avoid conflicts with Apache Airflow or other template engines. Alternative approaches for nested templating scenarios.

TIL: Creating Fixed Length Iterables in Python

TIL how to create fixed-length iterables in Python using collections.deque with maxlen parameter. Perfect for creating circular buffers and bounded collections.

Documentation Without Assumption

Why good documentation means caring about your audience and stating the obvious. How assumption-free writing prevents confusion and creates better developer experiences.