<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Posts on Kina's Blog</title><link>https://blog.kinaz.me/en/blog/post/</link><description>Recent content in Posts on Kina's Blog</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Thu, 22 Oct 2026 02:32:04 +0800</lastBuildDate><atom:link href="https://blog.kinaz.me/en/blog/post/index.xml" rel="self" type="application/rss+xml"/><item><title>Troubleshooting RouterOS DHCPv6 and NetBird's DNS upstream</title><link>https://blog.kinaz.me/en/blog/post/routeros-ipv6-netbird-dns/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://blog.kinaz.me/en/blog/post/routeros-ipv6-netbird-dns/</guid><description>&lt;p&gt;The goal was to give the LAN behind my home server a working IPv6 egress, and to fix &lt;code&gt;curl -6&lt;/code&gt; and public DNS resolution failing on the server itself.&lt;/p&gt;&#10;&lt;p&gt;It turned out to be two consecutive problems:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;RouterOS needed correct DHCPv6 client, Prefix Delegation, LAN RA and IPv6 firewall configuration.&lt;/li&gt;&#10;&lt;li&gt;NetBird had taken over the server&amp;rsquo;s &lt;code&gt;/etc/resolv.conf&lt;/code&gt;, but no upstream resolver was configured in NetBird Management, so public DNS lookups failed.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="routeros-dhcpv6-client"&gt;RouterOS DHCPv6 client&#10;&lt;/h2&gt;&#10;&lt;p&gt;Initially the MikroTik only received an IPv6 delegated prefix:&lt;/p&gt;</description></item><item><title>Notes on building my own agent framework</title><link>https://blog.kinaz.me/en/blog/post/agentkit-notes/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog.kinaz.me/en/blog/post/agentkit-notes/</guid><description>&lt;p&gt;After weeks of tinkering and research, this weekend I finally settled on the agent framework I wanted. It started as a Go-based, purely coding-focused agent loop, and ended up as a Python implementation that borrows from bub, Tape System, Kapybara and jido — my own agent framework stitched out of their ideas. The overall approach borrows from bub too.&lt;/p&gt;&#10;&lt;h2 id="declarative-design"&gt;Declarative design&#10;&lt;/h2&gt;&#10;&lt;p&gt;A lot of it is declarative. Extensibility is arguably the most important property of a framework, and declarative design is what buys it. I took bub&amp;rsquo;s &amp;ldquo;everything is a hook&amp;rdquo; and, per Opus&amp;rsquo;s suggestion, jido&amp;rsquo;s state_key-based fused design to keep plugins from getting too fine-grained. Whether it works as intended is still unverified.&lt;/p&gt;</description></item><item><title>2025 year in review</title><link>https://blog.kinaz.me/en/blog/post/2025-review/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><guid>https://blog.kinaz.me/en/blog/post/2025-review/</guid><description>&lt;p&gt;Time flies — it&amp;rsquo;s the last day of the year again. A lot happened this year, and I&amp;rsquo;ve been recording more of it than before. This long-overdue year-end review barely made it onto the 2025 train.&lt;/p&gt;&#10;&lt;p&gt;The biggest change is identity: six months ago I stopped being a student, and since then I&amp;rsquo;ve been tasting the life of a tech worker, overtime included.&lt;/p&gt;&#10;&lt;h2 id="a-chapter-that-closed"&gt;A chapter that closed&#10;&lt;/h2&gt;&#10;&lt;p&gt;I spent the first half of the year in a long-distance relationship, grabbing every chance to meet. In the second half, for various reasons, we broke up. Maybe it was always going to end this way.&lt;/p&gt;</description></item></channel></rss>