<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ruiyang — Maker's Log</title>
    <link>https://ruiyang.co/blog</link>
    <atom:link href="https://ruiyang.co/feed.xml" rel="self" type="application/rss+xml" />
    <description>Essays, build logs and field notes on shipping small software, on-device AI, smart contracts, calibration, and the craft of owning a product.</description>
    <language>en</language>
    <item>
      <title>Fractional Kelly, or sizing a bet you might be wrong about</title>
      <link>https://ruiyang.co/blog#/sizing-a-bet-you-might-be-wrong-about</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/sizing-a-bet-you-might-be-wrong-about</guid>
      <category>essay</category>
      <pubDate>Sun, 14 Jun 2026 12:00:00 +0000</pubDate>
      <description>Knowing your edge is half the job. The other half — how much to actually bet on it — is where most people, and most agents, blow up.</description>
    </item>
    <item>
      <title>A note on FSRS-6 and the death of SM-2</title>
      <link>https://ruiyang.co/blog#/fsrs-6-and-the-death-of-sm-2</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/fsrs-6-and-the-death-of-sm-2</guid>
      <category>build log</category>
      <pubDate>Sat, 13 Jun 2026 12:00:00 +0000</pubDate>
      <description>Memdora's scheduler runs on FSRS-6, not the SM-2 algorithm every flashcard app inherited from the 1980s. Here's why I switched and what it changed.</description>
    </item>
    <item>
      <title>Confidence is a number you can be wrong about</title>
      <link>https://ruiyang.co/blog#/confidence-is-a-number-you-can-be-wrong-about</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/confidence-is-a-number-you-can-be-wrong-about</guid>
      <category>essay</category>
      <pubDate>Fri, 12 Jun 2026 12:00:00 +0000</pubDate>
      <description>Years of actuarial and CFA exams ruined me, productively, for how most software talks about how sure it is.</description>
    </item>
    <item>
      <title>A bug in the frontend costs an App Store review. A bug in SQL costs nothing.</title>
      <link>https://ruiyang.co/blog#/a-bug-in-sql-costs-nothing</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/a-bug-in-sql-costs-nothing</guid>
      <category>essay</category>
      <pubDate>Thu, 11 Jun 2026 12:00:00 +0000</pubDate>
      <description>Memdora ships on web and iOS. That one fact decided my whole architecture: business logic does not live in the client.</description>
    </item>
    <item>
      <title>The LLM can write. It can't count.</title>
      <link>https://ruiyang.co/blog#/the-llm-can-write-not-count</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/the-llm-can-write-not-count</guid>
      <category>build log</category>
      <pubDate>Mon, 08 Jun 2026 12:00:00 +0000</pubDate>
      <description>For the T3 ADK Dev Challenge I built a multi-agent system whose one hard rule was: the language model never invents a number.</description>
    </item>
    <item>
      <title>The port that wouldn't die</title>
      <link>https://ruiyang.co/blog#/the-port-that-wouldnt-die</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/the-port-that-wouldnt-die</guid>
      <category>code</category>
      <pubDate>Fri, 05 Jun 2026 12:00:00 +0000</pubDate>
      <description>Some bugs you fix in a line. This one took a day, an Objective-C swizzle, and a lecture to myself about whose code actually runs.</description>
    </item>
    <item>
      <title>The share extension that refused to stay closed</title>
      <link>https://ruiyang.co/blog#/ios-share-extension-silent-save</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/ios-share-extension-silent-save</guid>
      <category>build log</category>
      <pubDate>Mon, 25 May 2026 12:00:00 +0000</pubDate>
      <description>Memdora lets you share a sentence from any app and save it as a card. The obvious way to build that was also the wrong way.</description>
    </item>
    <item>
      <title>Dumb tasks deserve dumb models</title>
      <link>https://ruiyang.co/blog#/dumb-tasks-deserve-dumb-models</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/dumb-tasks-deserve-dumb-models</guid>
      <category>build log</category>
      <pubDate>Sat, 16 May 2026 12:00:00 +0000</pubDate>
      <description>Memdora enriches each card with a model call. For months I reached for the smartest model available. That was the bug.</description>
    </item>
    <item>
      <title>Why I rewrote Memdora's memory layer three times</title>
      <link>https://ruiyang.co/blog#/memdora-memory-layer</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/memdora-memory-layer</guid>
      <category>build log</category>
      <pubDate>Wed, 15 Apr 2026 12:00:00 +0000</pubDate>
      <description>First version stored notes as plain text and searched them with embeddings. It worked. It didn't scale. The second got clever. The third is almost dumb — and correct.</description>
    </item>
    <item>
      <title>Engineering is the cheap part. Owning is the hard part.</title>
      <link>https://ruiyang.co/blog#/owning-is-the-hard-part</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/owning-is-the-hard-part</guid>
      <category>essay</category>
      <pubDate>Sun, 15 Mar 2026 12:00:00 +0000</pubDate>
      <description>Code is a commodity now. The scarce thing is someone who'll write the spec, name the product, and decide what to cut.</description>
    </item>
    <item>
      <title>A Go service pattern I keep coming back to</title>
      <link>https://ruiyang.co/blog#/go-service-pattern</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/go-service-pattern</guid>
      <category>code</category>
      <pubDate>Sun, 15 Feb 2026 12:00:00 +0000</pubDate>
      <description>Every Go service I've shipped in the last three years follows the same shape — and I don't think it's just inertia.</description>
    </item>
    <item>
      <title>On-device LLMs are good enough for personal software</title>
      <link>https://ruiyang.co/blog#/on-device-llms</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/on-device-llms</guid>
      <category>field notes</category>
      <pubDate>Thu, 15 Jan 2026 12:00:00 +0000</pubDate>
      <description>A 1.5B-parameter model running on an M2 is now indistinguishable, for the tasks I care about, from a 70B cloud model two years ago.</description>
    </item>
    <item>
      <title>Notes on Chainlink price feeds in thin markets</title>
      <link>https://ruiyang.co/blog#/chainlink-thin-markets</link>
      <guid isPermaLink="false">https://ruiyang.co/blog#/chainlink-thin-markets</guid>
      <category>DeFi</category>
      <pubDate>Mon, 15 Dec 2025 12:00:00 +0000</pubDate>
      <description>Chainlink's median-of-medians works beautifully in liquid markets and fails strangely in shallow ones. Here's what I learned shipping Alloyx.</description>
    </item>
  </channel>
</rss>
