<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Nick Liu on Nick Liu - Software Engineer</title>
    <link>/</link>
    <description>Recent content in Nick Liu on Nick Liu - Software Engineer</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>nickboy@users.noreply.github.com (Nick Liu)</managingEditor>
    <webMaster>nickboy@users.noreply.github.com (Nick Liu)</webMaster>
    <copyright>2026 Nick Liu</copyright>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>AWS Billing Unbilled Usage Auditor</title>
      <link>/projects/aws-billing-auditor/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/projects/aws-billing-auditor/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  Designed and built a distributed system that detects unbilled usage across all AWS services — reducing charge discrepancies by &lt;strong&gt;300x&lt;/strong&gt; and eliminating &lt;strong&gt;230 million&lt;/strong&gt; monthly false positives.&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Key Metrics&#xA;    &lt;div id=&#34;key-metrics&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#key-metrics&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;flex flex-row flex-wrap items-center space-x-2&#34;&gt;&#xA;&lt;div class=&#34;flex mt-2&#34;&gt;&#xA;  &lt;span&#xA;    class=&#34;rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal&#34;&gt;&#xA;    &lt;span class=&#34;flex flex-row items-center&#34;&gt;&lt;span&gt;300x Reduction in Discrepancies&lt;/span&gt;&#xA;    &lt;/span&gt;&#xA;  &lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;flex mt-2&#34;&gt;&#xA;  &lt;span&#xA;    class=&#34;rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal&#34;&gt;&#xA;    &lt;span class=&#34;flex flex-row items-center&#34;&gt;&lt;span&gt;$125,000 → $432&lt;/span&gt;&#xA;    &lt;/span&gt;&#xA;  &lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;flex mt-2&#34;&gt;&#xA;  &lt;span&#xA;    class=&#34;rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal&#34;&gt;&#xA;    &lt;span class=&#34;flex flex-row items-center&#34;&gt;&lt;span&gt;230M False Positives Eliminated&lt;/span&gt;&#xA;    &lt;/span&gt;&#xA;  &lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;flex mt-2&#34;&gt;&#xA;  &lt;span&#xA;    class=&#34;rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal&#34;&gt;&#xA;    &lt;span class=&#34;flex flex-row items-center&#34;&gt;&lt;span&gt;~95% Alert Actionability&lt;/span&gt;&#xA;    &lt;/span&gt;&#xA;  &lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Architecture&#xA;    &lt;div id=&#34;architecture&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#architecture&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;pre class=&#34;not-prose mermaid&#34;&gt;&#xA;flowchart LR&#xA;    A[&#34;Usage Records\n(Billions/day)&#34;] --&gt; B[&#34;Smart Sampling\n&amp; Aggregation&#34;]&#xA;    B --&gt; C[&#34;Multi-Signal\nValidation&#34;]&#xA;    C --&gt; D[&#34;Automated\nResolution&#34;]&#xA;    D --&gt; E{Real issue?}&#xA;    E -- Yes --&gt; F[&#34;Alert with\nDiagnosis&#34;]&#xA;    E -- No --&gt; G[&#34;Auto-resolve\n&amp; Log&#34;]&#xA;    style B fill:#6366f1,color:#fff&#xA;    style C fill:#6366f1,color:#fff&#xA;    style D fill:#6366f1,color:#fff&#xA;&lt;/pre&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Technical Deep Dive&#xA;    &lt;div id=&#34;technical-deep-dive&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#technical-deep-dive&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;div&#xA;  class=&#34;tab__container w-full&#34;&#xA;  &#xA;  &gt;&#xA;  &lt;div class=&#34;tab__nav&#34; role=&#34;tablist&#34;&gt;&#xA;    &lt;div class=&#34;flex flex-wrap gap-1&#34;&gt;&lt;button&#xA;          class=&#34;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 tab--active&#34;&#xA;          role=&#34;tab&#34;&#xA;          aria-selected=&#34;true&#34;&#xA;          data-tab-index=&#34;0&#34;&#xA;          data-tab-label=&#34;&#34;&gt;&#xA;          &lt;span class=&#34;flex items-center gap-1&#34;&gt;&#xA;            &#xA;            &#xA;          &lt;/span&gt;&#xA;        &lt;/button&gt;&lt;button&#xA;          class=&#34;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &#34;&#xA;          role=&#34;tab&#34;&#xA;          aria-selected=&#34;false&#34;&#xA;          data-tab-index=&#34;1&#34;&#xA;          data-tab-label=&#34;&#34;&gt;&#xA;          &lt;span class=&#34;flex items-center gap-1&#34;&gt;&#xA;            &#xA;            &#xA;          &lt;/span&gt;&#xA;        &lt;/button&gt;&lt;button&#xA;          class=&#34;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &#34;&#xA;          role=&#34;tab&#34;&#xA;          aria-selected=&#34;false&#34;&#xA;          data-tab-index=&#34;2&#34;&#xA;          data-tab-label=&#34;&#34;&gt;&#xA;          &lt;span class=&#34;flex items-center gap-1&#34;&gt;&#xA;            &#xA;            &#xA;          &lt;/span&gt;&#xA;        &lt;/button&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;tab__content mt-4&#34;&gt;&lt;div class=&#34;tab__panel tab--active&#34; data-tab-index=&#34;0&#34;&gt;&#xA;        &lt;h3 class=&#34;relative group&#34;&gt;Aggregation over Brute-Force&#xA;    &lt;div id=&#34;aggregation-over-brute-force&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#aggregation-over-brute-force&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Instead of checking every individual usage record (which generated 230M false positives), the system aggregates at the &lt;strong&gt;service-account-period&lt;/strong&gt; level.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Twitter Fleet-Scale Kernel Automation</title>
      <link>/projects/twitter-fleet-automation/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/projects/twitter-fleet-automation/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  Built the automation and validation tooling to manage kernel updates across &lt;strong&gt;5,000+ production servers&lt;/strong&gt; at Twitter — with zero-downtime progressive rollouts and automated canary validation.&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Key Metrics&#xA;    &lt;div id=&#34;key-metrics&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#key-metrics&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;flex flex-row flex-wrap items-center space-x-2&#34;&gt;&#xA;&lt;div class=&#34;flex mt-2&#34;&gt;&#xA;  &lt;span&#xA;    class=&#34;rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal&#34;&gt;&#xA;    &lt;span class=&#34;flex flex-row items-center&#34;&gt;&lt;span&gt;5,000+ Production Hosts&lt;/span&gt;&#xA;    &lt;/span&gt;&#xA;  &lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;flex mt-2&#34;&gt;&#xA;  &lt;span&#xA;    class=&#34;rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal&#34;&gt;&#xA;    &lt;span class=&#34;flex flex-row items-center&#34;&gt;&lt;span&gt;Weeks → Days Rollout Time&lt;/span&gt;&#xA;    &lt;/span&gt;&#xA;  &lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;flex mt-2&#34;&gt;&#xA;  &lt;span&#xA;    class=&#34;rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal&#34;&gt;&#xA;    &lt;span class=&#34;flex flex-row items-center&#34;&gt;&lt;span&gt;140+ Tickets in One On-Call Week&lt;/span&gt;&#xA;    &lt;/span&gt;&#xA;  &lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;flex mt-2&#34;&gt;&#xA;  &lt;span&#xA;    class=&#34;rounded-full bg-primary-500 dark:bg-primary-400 text-neutral-50 dark:text-neutral-800 px-1.5 py-[1px] text-xs font-normal&#34;&gt;&#xA;    &lt;span class=&#34;flex flex-row items-center&#34;&gt;&lt;span&gt;Zero-Downtime Updates&lt;/span&gt;&#xA;    &lt;/span&gt;&#xA;  &lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Architecture&#xA;    &lt;div id=&#34;architecture&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#architecture&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;pre class=&#34;not-prose mermaid&#34;&gt;&#xA;flowchart LR&#xA;    A[&#34;New Kernel\nVersion&#34;] --&gt; B[&#34;Canary\nValidation&#34;]&#xA;    B --&gt; C[&#34;Wave 1\n1% Fleet&#34;]&#xA;    C --&gt; D[&#34;Wave 2\n5% Fleet&#34;]&#xA;    D --&gt; E[&#34;Wave 3\n25% Fleet&#34;]&#xA;    E --&gt; F[&#34;Full Fleet\nRollout&#34;]&#xA;    C -- anomaly --&gt; G[&#34;Pause &amp;\nAuto-Alert&#34;]&#xA;    D -- anomaly --&gt; G&#xA;    E -- anomaly --&gt; G&#xA;    style B fill:#6366f1,color:#fff&#xA;    style C fill:#6366f1,color:#fff&#xA;    style D fill:#6366f1,color:#fff&#xA;    style E fill:#6366f1,color:#fff&#xA;    style F fill:#6366f1,color:#fff&#xA;&lt;/pre&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Technical Deep Dive&#xA;    &lt;div id=&#34;technical-deep-dive&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#technical-deep-dive&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;div&#xA;  class=&#34;tab__container w-full&#34;&#xA;  &#xA;  &gt;&#xA;  &lt;div class=&#34;tab__nav&#34; role=&#34;tablist&#34;&gt;&#xA;    &lt;div class=&#34;flex flex-wrap gap-1&#34;&gt;&lt;button&#xA;          class=&#34;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 tab--active&#34;&#xA;          role=&#34;tab&#34;&#xA;          aria-selected=&#34;true&#34;&#xA;          data-tab-index=&#34;0&#34;&#xA;          data-tab-label=&#34;&#34;&gt;&#xA;          &lt;span class=&#34;flex items-center gap-1&#34;&gt;&#xA;            &#xA;            &#xA;          &lt;/span&gt;&#xA;        &lt;/button&gt;&lt;button&#xA;          class=&#34;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &#34;&#xA;          role=&#34;tab&#34;&#xA;          aria-selected=&#34;false&#34;&#xA;          data-tab-index=&#34;1&#34;&#xA;          data-tab-label=&#34;&#34;&gt;&#xA;          &lt;span class=&#34;flex items-center gap-1&#34;&gt;&#xA;            &#xA;            &#xA;          &lt;/span&gt;&#xA;        &lt;/button&gt;&lt;button&#xA;          class=&#34;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &#34;&#xA;          role=&#34;tab&#34;&#xA;          aria-selected=&#34;false&#34;&#xA;          data-tab-index=&#34;2&#34;&#xA;          data-tab-label=&#34;&#34;&gt;&#xA;          &lt;span class=&#34;flex items-center gap-1&#34;&gt;&#xA;            &#xA;            &#xA;          &lt;/span&gt;&#xA;        &lt;/button&gt;&lt;button&#xA;          class=&#34;tab__button px-3 py-2 text-sm font-semibold border-b-2 border-transparent rounded-t-md hover:bg-neutral-200 dark:hover:bg-neutral-700 &#34;&#xA;          role=&#34;tab&#34;&#xA;          aria-selected=&#34;false&#34;&#xA;          data-tab-index=&#34;3&#34;&#xA;          data-tab-label=&#34;&#34;&gt;&#xA;          &lt;span class=&#34;flex items-center gap-1&#34;&gt;&#xA;            &#xA;            &#xA;          &lt;/span&gt;&#xA;        &lt;/button&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;tab__content mt-4&#34;&gt;&lt;div class=&#34;tab__panel tab--active&#34; data-tab-index=&#34;0&#34;&gt;&#xA;        &#xA;&lt;h3 class=&#34;relative group&#34;&gt;Validate Before You Roll&#xA;    &lt;div id=&#34;validate-before-you-roll&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#validate-before-you-roll&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;A &lt;strong&gt;Python library&lt;/strong&gt; that validates kernel safety before fleet-wide rollout:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Building a Knowledge Base That AI Can Actually Use</title>
      <link>/posts/obsidian-claude-code-knowledge-base/</link>
      <pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/obsidian-claude-code-knowledge-base/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  Obsidian + Claude Code is everywhere right now. But pointing an AI at a folder of markdown files and hoping for the best doesn&amp;rsquo;t work. What matters is how you structure the knowledge base. Get that right, and Claude becomes genuinely useful. Get it wrong, and you get confident garbage.&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;There&amp;rsquo;s been a wave of posts about this combo lately: &lt;a href=&#34;https://x.com/jameesy/status/2026628809424781787&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;James Bedford&amp;rsquo;s full walkthrough&lt;/a&gt;, &lt;a href=&#34;https://x.com/gregisenberg/status/2026036464287412412&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Greg Isenberg&amp;rsquo;s &amp;ldquo;personal OS&amp;rdquo; approach&lt;/a&gt;, &lt;a href=&#34;https://x.com/kepano/status/2008578873903206895&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;kepano (Obsidian&amp;rsquo;s CEO) sharing Claude Skills&lt;/a&gt;. They&amp;rsquo;re all worth reading.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>What I Learned from How Claude Code&#39;s Creator Uses Claude Code</title>
      <link>/posts/boris-claude-code-tips/</link>
      <pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/boris-claude-code-tips/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  Boris Cherny created Claude Code. When he shared how he actually uses it day-to-day, the setup was surprisingly simple. I went through every tip, tried most of them, and have opinions about all of them.&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;The original thread is on &lt;a href=&#34;https://x.com/bcherny/status/2007179832300581177&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Boris&amp;rsquo;s X account&lt;/a&gt;. A good companion site is &lt;a href=&#34;https://howborisusesclaudecode.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;howborisusesclaudecode.com&lt;/a&gt; which compiles everything in one place.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Case Study: Building AWS Billing&#39;s Unbilled Usage Auditor</title>
      <link>/posts/case-study-aws-billing-auditor/</link>
      <pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/case-study-aws-billing-auditor/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  I spent five years on the AWS Billing team. The hardest problem I tackled was detecting when customers used AWS services but weren&amp;rsquo;t charged correctly. This post walks through how I designed a system that reduced charge discrepancies by &lt;strong&gt;300x&lt;/strong&gt; and eliminated &lt;strong&gt;230 million&lt;/strong&gt; monthly false positives.&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;The Problem&#xA;    &lt;div id=&#34;the-problem&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#the-problem&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;AWS billing is trickier than it looks. When a customer launches an EC2 instance, writes to S3, or queries DynamoDB, each action generates a usage record. These records flow through a pipeline that calculates charges based on the customer&amp;rsquo;s pricing plan, region, and service tier.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Case Study: Fleet-Scale Kernel Automation at Twitter</title>
      <link>/posts/case-study-twitter-fleet-automation/</link>
      <pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/case-study-twitter-fleet-automation/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  At Twitter, I was responsible for kernel updates across &lt;strong&gt;5,000+ production servers&lt;/strong&gt;. Updating a kernel is risky on one machine. Doing it across a fleet, without downtime, without data loss, and without breaking the services that millions of people depend on, is a different problem entirely.&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;The Problem&#xA;    &lt;div id=&#34;the-problem&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#the-problem&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Twitter&amp;rsquo;s production infrastructure ran on thousands of bare-metal servers across multiple data centers. Each server ran a Linux kernel that needed regular updates for security patches, performance improvements, and hardware compatibility.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Catppuccin Mocha: Why I Theme Everything the Same Color</title>
      <link>/posts/catppuccin-mocha-theming/</link>
      <pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/catppuccin-mocha-theming/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  &lt;p&gt;Your development environment should feel like &lt;strong&gt;one cohesive tool&lt;/strong&gt;, not a collection of unrelated windows with clashing colors. I theme everything with the same palette — &lt;span class=&#34;flex cursor-pointer&#34;&gt;&#xA;&lt;span&#xA;class=&#34;rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400&#34;&gt;&#xA;Catppuccin Mocha&#xA;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Finding the Bottom of a Valley Blindfolded: Understanding Gradient Descent</title>
      <link>/posts/ml-gradient-descent/</link>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/ml-gradient-descent/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  Imagine you&amp;rsquo;re &lt;strong&gt;blindfolded on a mountain&lt;/strong&gt; and you need to find the lowest valley. You can&amp;rsquo;t see anything, but you &lt;em&gt;can&lt;/em&gt; feel the ground under your feet. What would you do? You&amp;rsquo;d feel which direction slopes downward, take a small step that way, and repeat. Congratulations — you just invented &lt;strong&gt;gradient descent&lt;/strong&gt;, the algorithm behind nearly every modern AI system.&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Why Should You Care?&#xA;    &lt;div id=&#34;why-should-you-care&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#why-should-you-care&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Optimization is everywhere. When your GPS finds the fastest route, when Netflix recommends a movie, when your phone recognizes your face — behind all of these is an algorithm trying to find the &lt;strong&gt;best possible answer&lt;/strong&gt; from a sea of possibilities. Gradient descent is &lt;em&gt;the&lt;/em&gt; workhorse algorithm that makes this happen.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>How Machines Ask Smart Questions: Entropy &amp; Information Gain</title>
      <link>/posts/ml-entropy-and-information-gain/</link>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/ml-entropy-and-information-gain/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  Imagine you&amp;rsquo;re playing &lt;strong&gt;20 Questions&lt;/strong&gt;. You&amp;rsquo;re trying to guess what animal your friend is thinking of. Would you start with &amp;ldquo;Is it a golden retriever?&amp;rdquo; or &amp;ldquo;Does it live in water?&amp;rdquo; The second question is obviously smarter — it eliminates roughly half the possibilities in one shot. Decision trees in machine learning work exactly the same way, and they use &lt;strong&gt;entropy&lt;/strong&gt; and &lt;strong&gt;information gain&lt;/strong&gt; to figure out what the smartest question is.&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;What&amp;rsquo;s the Big Idea?&#xA;    &lt;div id=&#34;whats-the-big-idea&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#whats-the-big-idea&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;When a machine learning algorithm builds a &lt;span class=&#34;flex cursor-pointer&#34;&gt;&#xA;  &lt;span&#xA;    class=&#34;rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400&#34;&gt;&#xA;    Decision Tree&#xA;  &lt;/span&gt;&#xA;&lt;/span&gt;&#xA;&#xA;, it needs to decide which question to ask first. Should it split the data by color? By size? By temperature? The answer comes from a beautifully simple concept: &lt;strong&gt;ask the question that reduces uncertainty the most&lt;/strong&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>How Neural Networks Learn from Mistakes: Backpropagation Explained</title>
      <link>/posts/ml-backpropagation/</link>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/ml-backpropagation/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  When a factory produces a defective product, how do you trace the problem back through the assembly line to find which worker made the mistake? Neural networks face the exact same challenge. They have layers of &amp;ldquo;workers&amp;rdquo; (neurons), and when the final output is wrong, they need to figure out &lt;strong&gt;who&amp;rsquo;s responsible&lt;/strong&gt; — and by how much. The algorithm that solves this is called &lt;strong&gt;backpropagation&lt;/strong&gt;, and it&amp;rsquo;s the reason deep learning works at all.&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Neural Networks Are Everywhere&#xA;    &lt;div id=&#34;neural-networks-are-everywhere&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#neural-networks-are-everywhere&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Before we dive into how neural networks &lt;em&gt;learn&lt;/em&gt;, let&amp;rsquo;s appreciate what they do. The phone in your pocket uses neural networks for face recognition, voice transcription, photo enhancement, and text prediction. Self-driving cars, medical image analysis, language translation — all neural networks.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>My Terminal Setup in 2026: Ghostty, tmux, and Neovim</title>
      <link>/posts/my-terminal-setup-2026/</link>
      <pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/my-terminal-setup-2026/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  After years of refining my terminal workflow, I&amp;rsquo;ve landed on a stack I genuinely enjoy using every day: &lt;strong&gt;Ghostty&lt;/strong&gt; as the terminal emulator, &lt;strong&gt;tmux&lt;/strong&gt; with &lt;strong&gt;sesh&lt;/strong&gt; for session management, and &lt;strong&gt;Neovim&lt;/strong&gt; with &lt;strong&gt;LazyVim&lt;/strong&gt; for editing.&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Everything runs on macOS (Apple Silicon) with a consistent &lt;span class=&#34;flex cursor-pointer&#34;&gt;&#xA;  &lt;span&#xA;    class=&#34;rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400&#34;&gt;&#xA;    Catppuccin Mocha&#xA;  &lt;/span&gt;&#xA;&lt;/span&gt;&#xA;&#xA; theme across all tools.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Modern CLI Tools That Replaced My Unix Classics</title>
      <link>/posts/modern-cli-tools-replacing-unix-classics/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/modern-cli-tools-replacing-unix-classics/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  &lt;p&gt;I&amp;rsquo;ve been gradually replacing classic Unix tools with modern alternatives, mostly written in &lt;span class=&#34;flex cursor-pointer&#34;&gt;&#xA;&lt;span&#xA;class=&#34;rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400&#34;&gt;&#xA;Rust&#xA;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;. After a year of daily use, these aren&amp;rsquo;t experiments anymore — they&amp;rsquo;re muscle memory.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Managing Dotfiles Like a Pro with Yadm</title>
      <link>/posts/managing-dotfiles-with-yadm/</link>
      <pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate>
      <author>nickboy@users.noreply.github.com (Nick Liu)</author>
      <guid>/posts/managing-dotfiles-with-yadm/</guid>
      <description>&lt;div class=&#34;lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl&#34;&gt;&#xA;  Every developer eventually reaches the point where their configs become too valuable to lose. Here&amp;rsquo;s how I use &lt;strong&gt;yadm&lt;/strong&gt; to manage my macOS dotfiles with automated testing, daily maintenance, and a pre-commit workflow that keeps everything in check.&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;For me, the turning point was spending a weekend setting up a new MacBook and realizing I couldn&amp;rsquo;t reproduce my environment reliably. That&amp;rsquo;s when I started managing my dotfiles properly.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
