Blog
Writing
Storing credentials in the repo: SOPS + age
Keeping secret values encrypted inside the git repo: setting up SOPS + age, the per-environment recipient model, decrypting at runtime, the team and CI flow, and the things to watch out for.
Free Custom Domain Email with Cloudflare and Gmail
Receiving and sending email from your own domain without running a server or paying anything: Cloudflare Email Routing for inbound, plus a Gmail app password and Send mail as SMTP setup for outbound.
Local Ignore Rules in Git: .git/info/exclude and core.excludesFile
Hiding personal files dropped into the project root without polluting .gitignore or pushing them to the team. .git/info/exclude, core.excludesFile, and the precedence order.
PostgreSQL LIKE Performance: CAST, Concat, and OR Comparison
Comparing 6 different LIKE approaches in a migration from bigint LongColumn to text TextColumn with a 2 million row benchmark: CAST+concat, CAST single, text concat, text single, text OR, and CAST OR.
.NET Memory Management 1: Stack, Heap and Strings
What are stack and heap, where do value types and reference types live in memory, why is string a special type, and how does the GC lifecycle work.
Welcome
Why this site exists, what I track here, and a few thoughts on writing and code in the AI age.