Stepan Mazurov

Stepan Mazurov

I am a software engineer that loves solving complicated problems. Once in a while I solve a problem I want to document, so I’ll do that here.

Recent Posts

Speculative Decoding on GLM-5.3-Flash: DFlash vs Native MTP

Serving GLM-5.3-Flash on two GB10 Spark nodes means every speculation choice is a trade between single-stream speed and KV memory. A draft model accelerates decode, but the draft’s KV cache eats pool that the target could use for context. We benchmarked four serving configurations against the same workloads to find out which one to run. The Four Arms GLM-5.3-Flash ships with a native MTP head (NEXTN) bundled in the checkpoint, so serving has two ways to draft: an external drafter, or the model’s own prediction head. Every drafter has a price - DFlash2’s draft weights and draft KV eat pool the target could otherwise use for context, while the native head reuses the target’s own layers, so its draft KV is smaller and there’s no extra model to load. This benchmark measures what a drafter costs in speed and KV, and what it buys in capacity. ...

September 7, 2026 · 6 min · 1267 words · Stepan Mazurov

Making Your Hugo Blog Citable by LLMs

LLMs are already crawling your blog. Cloudflare’s AI bot analytics show GPTBot, OAI-SearchBot, and others making dozens of requests per day to small personal sites. But when these models cite your content, they hallucinate URLs, misattribute claims, and lose context. The problem isn’t access - most blogs just serve content optimized for humans and search engines, not for language models. This post covers the changes I made to this Hugo site (PaperMod theme) to fix that. ...

March 12, 2026 · 7 min · 1408 words · Stepan Mazurov

Fixing the '?' Hostname Problem on OpenWrt Access Points

If you run OpenWrt as a dumb access point, you’ve probably noticed that LuCI’s Network > Wireless > Associated Stations page shows ? for every client hostname. This is because the AP doesn’t run a DHCP server - another device (your router) handles that - so /tmp/dhcp.leases is empty and LuCI has nothing to look up. The hostnames are right there, though. DHCP packets from clients flow through the AP’s bridge, and they contain the hostname in Option 12. We just need to capture them. ...

March 9, 2026 · 7 min · 1298 words · Stepan Mazurov

ESPHome YK-H/531E Climate Component: IR Control for AC Units

Many AC units ship with IR-only remotes and no smart control interface, making home automation integration difficult. This custom ESPHome component, modernized from @iverasp’s original work, implements the YK-H/531E IR protocol so an ESP32 or ESP8266 can control compatible air conditioners over infrared. Features In addition to what was already working I added a few features to my custom YKH531E component it includes the following capabilities: Temperature Range: 16-32°C (60-90°F) Operating Modes: Auto, Cool, Dry, Fan, Heat (heat is untested) Fan Speeds: Low, Medium, High, Auto Swing Control: Vertical swing support (Corrected) Temperature Units: Support for both Celsius and Fahrenheit (Fahrenheit added!) Installation Adding the component to your ESPHome configuration is straightforward: ...

July 11, 2025 · 3 min · 479 words · Stepan Mazurov

Server to Server Authentication with Google Provider in oauth2-proxy

Server-to-server authentication through oauth2-proxy has no obvious solution when using the Google provider. There is no built-in mechanism for API clients to authenticate without a browser-based OAuth2 flow. The workaround: exchange Google Service Account credentials for a JWT token that oauth2-proxy can validate directly. Overview In order to do server to server auth through oauth2-proxy when using Google Provider, you have to do the following: ...