<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Ilya Rusalowski Hub</title><link>https://rivik.dev/posts/</link><description>Recent content in Posts on Ilya Rusalowski Hub</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 06 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://rivik.dev/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>validgo-gen: OpenAPI → Go Validation Done Right</title><link>https://rivik.dev/validgo-gen-openapi-go-validation-done-right/</link><pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate><guid>https://rivik.dev/validgo-gen-openapi-go-validation-done-right/</guid><description>My colleague Yury built validgo-gen — an OpenAPI 3.0 → Go generator that finally distinguishes missing fields from explicit nulls from zero values. Two-layer validation, chi integration, idiomatic output.</description></item><item><title>ykvault: Stop Storing API Tokens as Plaintext</title><link>https://rivik.dev/ykvault-stop-storing-api-tokens-as-plaintext/</link><pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate><guid>https://rivik.dev/ykvault-stop-storing-api-tokens-as-plaintext/</guid><description>Are you still keeping API tokens in ~/.secrets? Any app you install can read them. ykvault encrypts every secret with a YubiKey challenge-response key — each get/set requires a physical touch, and the encrypted files are useless without your key.</description></item><item><title>I was afraid of agents yolo-mode for half a year</title><link>https://rivik.dev/i-was-afraid-of-agents-yolo-mode-for-half-a-year/</link><pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate><guid>https://rivik.dev/i-was-afraid-of-agents-yolo-mode-for-half-a-year/</guid><description>Why I built agent-landlock — a small Go wrapper that uses Linux Landlock LSM to give coding agents YOLO mode without letting them escape the project directory.</description></item><item><title>Hardware-backed SSH keys end to end: YubiKey, PIV, software alternatives, and where SSH CAs fit in</title><link>https://rivik.dev/hardware-backed-ssh-keys-end-to-end-yubikey-piv-software-alternatives-and-where-ssh-cas-fit-in/</link><pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate><guid>https://rivik.dev/hardware-backed-ssh-keys-end-to-end-yubikey-piv-software-alternatives-and-where-ssh-cas-fit-in/</guid><description>A working guide to using a YubiKey for SSH on a real Linux fleet — the four knobs (resident, touch, PIN, agent), a four-mode policy for root and Ansible, software-only alternatives, and where SSH CAs fit in.</description></item><item><title>SSH Tunnel Magic: Your SSH Already Is Tailscale</title><link>https://rivik.dev/ssh-tunnel-magic-your-ssh-already-is-tailscale/</link><pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate><guid>https://rivik.dev/ssh-tunnel-magic-your-ssh-already-is-tailscale/</guid><description>SSH punching for everyone who only knows &lt;code&gt;ssh user@host&lt;/code&gt; — how -D replaces a corporate VPN, -R replaces a mesh VPN for NAT&amp;rsquo;d boxes, and -L forwards Unix sockets. 3 flags, 3 bonuses, 1 man page.</description></item><item><title>180 Breaches a Second: How Software Broke Its Promise, and the Radical Fix Hiding in Plain Sight</title><link>https://rivik.dev/180-breaches-a-second/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><guid>https://rivik.dev/180-breaches-a-second/</guid><description>180 accounts are breached every second — and most of it comes down to reused passwords and missing MFA. A look at the software quality collapse behind the headlines, and why the fix is the same infrastructure-level move HTTPS once made: passkeys, on-device DLP, and capability-scoped AI agents.</description></item><item><title>When TLS 1.3 Silently Dies Inside Your Android Proxy</title><link>https://rivik.dev/when-tls-1.3-silently-dies-inside-your-android-proxy/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><guid>https://rivik.dev/when-tls-1.3-silently-dies-inside-your-android-proxy/</guid><description>A post-mortem of intermittent HTTPS failures across a mobile proxy fleet: TLS 1.3 handshakes silently dying on memory-starved Android devices — large multi-packet handshake messages, inflated by post-quantum key shares, stressing proxy buffers under memory pressure.</description></item><item><title>Systemd Unreclaimable Kernel Memory Leak</title><link>https://rivik.dev/systemd-unreclaimable-kernel-memory-leak/</link><pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate><guid>https://rivik.dev/systemd-unreclaimable-kernel-memory-leak/</guid><description>How a frequently-restarting systemd unit with Type=exec leaked unreclaimable kernel slab memory (~60 MB/day) on Ubuntu hosts via a cgroup memory-accounting bug — and why only a full host reboot could free it.</description></item><item><title>Another Ubuntu Bug With a Stopgap Fix: apt-get update Hangs for Hours</title><link>https://rivik.dev/another-ubuntu-bug-with-a-stopgap-fix-apt-get-update-hangs-for-hours/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate><guid>https://rivik.dev/another-ubuntu-bug-with-a-stopgap-fix-apt-get-update-hangs-for-hours/</guid><description>apt-get update randomly hangs for hours on Ubuntu 24.04 LTS — known since 22.04, still not fixed. Worst part: it silently blocks unattended-upgrades, so your servers stop receiving security updates. The &amp;lsquo;fix&amp;rsquo; is a cron job that kills stuck apt processes.</description></item><item><title>10G at Home: $15 M.2 Expander Turns an Old HP Mini Into a 10GbE Test Rig</title><link>https://rivik.dev/10g-at-home-15-m.2-expander-turns-an-old-hp-mini-into-a-10gbe-test-rig/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>https://rivik.dev/10g-at-home-15-m.2-expander-turns-an-old-hp-mini-into-a-10gbe-test-rig/</guid><description>My ISP started upselling 10gbit XGS-PON — but how to test it without buying a 10G-capable machine? A $15 noname M.2 → PCIe expander + AQC107 NIC on an old HP G2 mini did the job. Plus the pcie_aspm=off gotcha.</description></item></channel></rss>