-
Overhauling a Jekyll blog — dark mode, code blocks, and all the small things
This blog has been running on Jekyll since 2015. The content changed, the stack around it changed, but the blog itself? Same minima theme, same default code blocks, same flat archive page. It was time to fix that.
-
qubitcoin — a post-quantum Bitcoin rewrite, and why silent RPC failures matter
There’s a particular class of bug I hate more than crashes: the API that quietly returns nothing when you give it garbage input. No error, no
400, just an empty result that looks exactly like a valid-but-empty result. This surfaced while working onqubitcoin, a post-quantum Bitcoin rewrite I’ve been building — so let me introduce that first, then get to the bug. -
x402 - HTTP payments that actually work
HTTP
402 Payment Required. It’s been sitting in the spec since 1991 — literally the first version of HTTP that had status codes. “Reserved for future use.” For decades, every web developer has scrolled past it and thought “huh, wonder when that’ll be a thing.”Well, it’s a thing now.
x402is an open protocol that revives that dusty status code into actual payment infrastructure. Coinbase’s Developer Platform team built the initial implementation, but this isn’t just a Coinbase product — Cloudflare, Polygon, and Solana are backing it as part of a broader push for “agentic payments.” The idea is that any HTTP endpoint can become a digital vending machine: request a resource, get a price, pay on-chain, receive the goods. No accounts, no API keys, no invoicing.I wired it into one of my projects. The integration is absurdly simple.
-
mcp-http-tools - any HTTP API as an MCP tool, zero code
I run a bunch of services on a single server. Prometheus for metrics, Loki for logs, PM2 for process management. Checking on them usually meant opening terminals and curling endpoints. I wanted Claude to be able to do that for me — but writing a custom MCP server for every API felt like too much work. So I built
mcp-http-tools: a generic MCP server where you define tools in YAML and it proxies requests to any HTTP API. -
macosx-audit - know what's running on your Mac
In the last post I teased this one — so here it is!
macosx-auditis a single-file bash script that audits your Mac’s security posture. No agents, no daemons, no root required for most checks. Just run it and see what’s there. -
bioenv - Touch ID for your environment variables
I haven’t been around here for quite some time. 6 years to be exact! Life got busy, work got busy, everything got busy. But I’m back and I have something cool to share. Let’s get to the point.
-
Mirkotik router backup with SSH and SFTP
Everybody knows how important it is to backup. I use Mikrotik Routers in my home network and have quite complex configuration which I would not want to write again from scratch. Prior to this day I have used scheduled script on Mikrotik to create backups locally, transferring it out of router itself into another location is great way to increase backup durability.
-
Sentry 9 - fix for PagerDuty legacy integration.
Recently I’ve been involved in investigating why
PagerDutyintegration withsentry9.1.1 doesn’t work. Same thing was happening to 9.1.2 version. The problem was not visible in UI but in logs such error message was repeating:19:13:04 [INFO] sentry.plugins.pagerduty: notification-plugin.notify-failed. (plugin=u’pagerduty’ error=u’Error Communicating with PagerDuty (HTTP 400): Event object is invalid’)
No incoming event on PagerDuty side assured me that this problem is real.
-
Migration to Google Cloud Dns from different provider.
Decision to pick DNS provider should be, in my opinion, based on currently used cloud environment. If you use AWS then
Route53, GCP thenCloud Dns, etc. It’s easier to manage it and audit then. Not the case for multicloud usage but most of the companies I worked for were using single cloud.If DNS domain was registered before cloud adoption then your task might be to migrate DNS. Such migration is not uncommon and in this blog post I will write about changing
NSrecords fromgodaddyto googleCloud Dns. -
Mass file renaming containing nonASCII characters to ASCII
Recently I found a problem with playing samba resources with VLC. Polish characters were breaking playback because file could not be found. Strangely enough this happened only for files with lowercase Polish letters like
ąśżźćłóęń.
Removing those letters helped to fix playback on test file but I had more than one file to fix.I tried to find a way to do rename all files quickly and easy and get rid of nonASCII characters and in this post I’m providing easiest, quickest and robust way to this.