<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>~iany/ Ai Generated</title><link>https://blog.iany.me/tags/ai-generated/</link><description>Recent content in Ai Generated «~iany/»</description><language>en-US</language><managingEditor>me@iany.me (Ian Yang)</managingEditor><webMaster>me@iany.me (Ian Yang)</webMaster><copyright>CC-BY-SA 4.0</copyright><lastBuildDate>Mon, 30 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.iany.me/tags/ai-generated/index.xml" rel="self" type="application/rss+xml"/><item><title>What I Touched This Week 2026-03-30</title><link>https://blog.iany.me/journal/2026/03/what-i-touched-this-week-2026-03-30/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2026/03/what-i-touched-this-week-2026-03-30/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="convincing-vs-persuading-in-technical-work"&gt;Convincing vs Persuading in Technical Work&lt;/h2&gt;
&lt;p&gt;This week sharpened a useful distinction: being correct is only the starting point, while moving a system or a team requires persuasion tuned to real context. That frame maps directly to architecture work, migration plans, and cross-team decisions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.alaindichiappari.dev/p/convincing-is-not-persuading"&gt;Convincing Is Not Persuading&lt;/a&gt; highlights that proof and benchmarks convince, but adoption depends on trust, timing, and incentives.&lt;/li&gt;
&lt;li&gt;The practical takeaway is to pair correctness with audience-aware framing: what this change protects, what risk it removes, and what people can safely do next.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="scale-first-ai-thinking-and-mental-models"&gt;Scale-First AI Thinking and Mental Models&lt;/h2&gt;
&lt;p&gt;The Readwise set this week converged on a coherent AI posture: favor general methods that scale with compute, then use explicit mental models to reason about systems and constraints.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cs.utexas.edu/~eunsol/courses/data/bitter_lesson.pdf"&gt;The Bitter Lesson&lt;/a&gt; reinforces a long-run strategy: approaches that scale with computation and learning tend to dominate handcrafted knowledge-heavy systems.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://muratbuffalo.blogspot.com/2026/03/tla-mental-models.html"&gt;TLA+ Mental Models&lt;/a&gt; contributed a systems lens (state, logs, replication) that is useful for evaluating reliability claims, not just feature velocity.&lt;/li&gt;
&lt;li&gt;This combination was a good backbone for AI reflection this week: keep abstractions general, but reason rigorously about behavior under change.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="boring-tech-better-practices-and-tooling-leverage"&gt;Boring Tech, Better Practices, and Tooling Leverage&lt;/h2&gt;
&lt;p&gt;A recurring theme across highlights and bookmarks was pragmatic leverage: pick stable tools, then innovate in process, automation, and integration points.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://buttondown.com/hillelwayne/archive/choose-boring-technology-and-innovative-practices/"&gt;Choose Boring Technology and Innovative Practices&lt;/a&gt; captures the principle well: conservatism in stack choice enables boldness in operational practice.&lt;/li&gt;
&lt;li&gt;Recent bookmarks aligned with this approach, including &lt;a href="https://github.com/doitian/RustTraining"&gt;RustTraining&lt;/a&gt;, &lt;a href="https://github.com/saber-notes/saber"&gt;Saber&lt;/a&gt;, and monitor-switch automation via &lt;a href="https://github.com/doitian/dotfiles-public/blob/master/src/monctl.js"&gt;monctl.js&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Weekly hygiene (bookmark triage, highlights cleanup, sync routines) made this strategy actionable rather than theoretical.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Alain&amp;#43;Di&amp;#43;Chiappari&amp;#43;-&amp;#43;Convincing&amp;#43;Is&amp;#43;Not&amp;#43;Persuading&amp;#43;%28Highlights%29"&gt;Alain Di Chiappari - Convincing Is Not Persuading (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Rich&amp;#43;Sutton&amp;#43;-&amp;#43;The&amp;#43;Bitter&amp;#43;Lesson&amp;#43;%28Highlights%29"&gt;Rich Sutton - The Bitter Lesson (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Computer&amp;#43;Things&amp;#43;-&amp;#43;Choose&amp;#43;Boring&amp;#43;Technology&amp;#43;and&amp;#43;Innovative&amp;#43;Practices&amp;#43;%28Highlights%29"&gt;Computer Things - Choose Boring Technology and Innovative Practices (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Murat&amp;#43;Demirbas&amp;#43;-&amp;#43;TLA%2B&amp;#43;Mental&amp;#43;Models&amp;#43;%28Highlights%29"&gt;Murat Demirbas - TLA+ Mental Models (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2026-03-21</title><link>https://blog.iany.me/journal/2026/03/what-i-touched-this-week-2026-03-21/</link><pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2026/03/what-i-touched-this-week-2026-03-21/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="software-maintenance-and-the-specification-problem"&gt;Software Maintenance and the Specification Problem&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://nearzero.software/p/warranty-void-if-regenerated"&gt;Scott Werner&amp;rsquo;s &amp;ldquo;Warranty Void if Regenerated&amp;rdquo;&lt;/a&gt; explores why software needs continuous tending, not just initial development. The core insight: specifications describe static relationships, but real-world inputs are alive—feeds from other systems that are constantly being updated, recalibrated, and regenerated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The maintenance paradox&lt;/strong&gt;: Paying for maintenance means admitting vulnerability, while paying for repair means responding to an emergency. Humans find emergencies more motivating than vulnerabilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain knowledge is irreplaceable&lt;/strong&gt;: People who understood the domain and could diagnose specification problems were the most valuable. This knowledge is often embodied, contextual, and inarticulable—like knowing the clay underneath a greenhouse or how prevailing winds affect crop rows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Software Choreographer concept&lt;/strong&gt;: A role that maps your entire tool ecosystem, specifies interfaces between them, and builds a conformance layer so that when any tool regenerates, interfaces are verified before the new version goes live. Like shipping containers: the container was cheap; organizing the logistics was where all the value was.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Physical controls matter&lt;/strong&gt;: Always offer a physical control—a button, switch, or lever. Something the client can touch. This builds trust and allows graceful degradation when systems fail.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ai-agents-and-the-harness"&gt;AI Agents and the Harness&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://stratechery.com/2026/agents-over-bubbles/"&gt;Ben Thompson&amp;rsquo;s &amp;ldquo;Agents Over Bubbles&amp;rdquo;&lt;/a&gt; argues that the critical component of making agentic workloads work is the &amp;ldquo;harness&amp;rdquo;—the software that actually controls the model, not the model itself.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Abstraction layer&lt;/strong&gt;: Claude Code and OpenAI&amp;rsquo;s Codex abstract the user away from the model. You give instructions to an agent, which directs the model; the agent can also use deterministic tools to verify results.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Models lack goals&lt;/strong&gt;: Large language models are intelligent, but they do not have goals or values or drive. The harness provides the structure and verification.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The opportunity&lt;/strong&gt;: How many apps or services haven&amp;rsquo;t been built, not because one person can&amp;rsquo;t imagine them, but because they haven&amp;rsquo;t had the resources, team, or coordination capabilities to ship them? Agents could change this dynamic.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="simplifying-life-through-lifestyle-design"&gt;Simplifying Life Through Lifestyle Design&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://tim.blog/2026/03/11/how-to-simplify-your-life-2-transcript/"&gt;Tim Ferriss Show episode on simplifying life&lt;/a&gt; brought together insights from Maria Popova, Morgan Housel, Cal Newport, Craig Mod, and Debbie Millman on what it means to simplify.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Read history, not forecasts&lt;/strong&gt;: A good heuristic for your relationship with information is to read more history and fewer forecasts. As Kelly Hayes says, &amp;ldquo;When you haven&amp;rsquo;t engaged with history, everything feels unprecedented.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifestyle design over triage&lt;/strong&gt;: Cal Newport argues that triage rules don&amp;rsquo;t work—too many things satisfy &amp;ldquo;good enough&amp;rdquo; criteria. Instead, think about lifestyle design: know what conditions of your day-to-day existence are best for you, and design a lifestyle that matches that.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Courage over confidence&lt;/strong&gt;: Debbie Millman distinguishes courage from confidence. Courage means taking risks and steps toward what you want despite how you feel. Confidence comes through repeated success. You don&amp;rsquo;t wait for confidence to arrive; you act from courage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Freedom over control&lt;/strong&gt;: What Millman wanted wasn&amp;rsquo;t more control, but more freedom. That freedom has allowed her to build a very different kind of life.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplicity as coherence&lt;/strong&gt;: Simplicity isn&amp;rsquo;t only about minimalism. It&amp;rsquo;s also about coherence—things fitting together in a way that makes sense.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nearzero.software/p/warranty-void-if-regenerated"&gt;Warranty Void if Regenerated&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stratechery.com/2026/agents-over-bubbles/"&gt;Agents Over Bubbles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tim.blog/2026/03/11/how-to-simplify-your-life-2-transcript/"&gt;How to Simplify Your Life in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://collabfund.com/blog/engaging-with-history/"&gt;Engaging With History&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.creativeboom.com/inspiration/debbie-millman/"&gt;Debbie Millman on Courage Over Confidence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Scott&amp;#43;Werner&amp;#43;-&amp;#43;Warranty&amp;#43;Void&amp;#43;if&amp;#43;Regenerated&amp;#43;%28Highlights%29"&gt;Scott Werner - Warranty Void if Regenerated (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Ben&amp;#43;Thompson&amp;#43;-&amp;#43;Agents&amp;#43;Over&amp;#43;Bubbles&amp;#43;%28Highlights%29"&gt;Ben Thompson - Agents Over Bubbles (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Tim&amp;#43;Ferriss&amp;#43;-&amp;#43;The&amp;#43;Tim&amp;#43;Ferriss&amp;#43;Show&amp;#43;857&amp;#43;How&amp;#43;to&amp;#43;Simplify&amp;#43;Your&amp;#43;Life&amp;#43;in&amp;#43;2026&amp;#43;%28Highlights%29"&gt;Tim Ferriss - The Tim Ferriss Show 857 How to Simplify Your Life in 2026 (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Podcasts/The&amp;#43;Tim&amp;#43;Ferriss&amp;#43;Show&amp;#43;-&amp;#43;857&amp;#43;How&amp;#43;to&amp;#43;Simplify&amp;#43;Your&amp;#43;Life&amp;#43;in&amp;#43;2026&amp;#43;%E2%80%94&amp;#43;New&amp;#43;Tips&amp;#43;From&amp;#43;Maria&amp;#43;Popova%2C&amp;#43;Morgan&amp;#43;Housel%2C&amp;#43;Cal&amp;#43;Newport%2C&amp;#43;Craig&amp;#43;Mod%2C&amp;#43;and&amp;#43;Debbie&amp;#43;Millman&amp;#43;%28Highlights%29"&gt;The Tim Ferriss Show - 857 How to Simplify Your Life in 2026 — New Tips From Maria Popova, Morgan Housel, Cal Newport, Craig Mod, and Debbie Millman (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Morgan&amp;#43;Housel&amp;#43;-&amp;#43;Engaging&amp;#43;With&amp;#43;History&amp;#43;%28Highlights%29"&gt;Morgan Housel - Engaging With History (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Katy&amp;#43;Cowan&amp;#43;-&amp;#43;Debbie&amp;#43;Millman&amp;#43;on&amp;#43;the&amp;#43;Power&amp;#43;of&amp;#43;Courage&amp;#43;Over&amp;#43;Confidence%2C&amp;#43;Embracing&amp;#43;Criticism&amp;#43;and&amp;#43;Overcoming&amp;#43;Fear&amp;#43;%28Highlights%29"&gt;Katy Cowan - Debbie Millman on the Power of Courage Over Confidence, Embracing Criticism and Overcoming Fear (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2026-02-07</title><link>https://blog.iany.me/journal/2026/02/what-i-touched-this-week-2026-02-07/</link><pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2026/02/what-i-touched-this-week-2026-02-07/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="haskell-typeclassopedia-io-and-documentation"&gt;Haskell: Typeclassopedia, IO, and Documentation&lt;/h2&gt;
&lt;p&gt;This week was heavily Haskell-focused. I worked through the &lt;a href="https://wiki.haskell.org/Typeclassopedia"&gt;Typeclassopedia&lt;/a&gt;, &lt;a href="https://learnyouahaskell.github.io/input-and-output.html"&gt;Learn You a Haskell Chapter 9 (Input and Output)&lt;/a&gt;, and &lt;a href="https://book.realworldhaskell.org/read/io.html"&gt;Real World Haskell Chapter 7 (IO)&lt;/a&gt;, plus the &lt;a href="https://haskell-haddock.readthedocs.io/latest/markup.html"&gt;Haddock markup guide&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Monad vs Applicative&lt;/strong&gt;: The structure of an Applicative computation is fixed; a Monad’s structure can depend on intermediate results. That’s why &lt;code&gt;(&amp;gt;&amp;gt;=)&lt;/code&gt; (bind) is strictly more powerful than &lt;code&gt;(&amp;lt;*&amp;gt;)&lt;/code&gt;. Prefer Applicative when you don’t need that—it can allow parallelization where monadic code cannot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reader, Writer, State&lt;/strong&gt;: The &lt;code&gt;(-&amp;gt;) e&lt;/code&gt; reader monad gives a read-only environment; &lt;code&gt;Writer&lt;/code&gt; accumulates a monoidal log; &lt;code&gt;State s a&lt;/code&gt; is &lt;code&gt;s -&amp;gt; (a,s)&lt;/code&gt; for stateful computations. All live in &lt;code&gt;Control.Monad&lt;/code&gt; and the mtl library.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IO in practice&lt;/strong&gt;: &lt;code&gt;getContents&lt;/code&gt; does lazy I/O; &lt;code&gt;interact&lt;/code&gt; captures the pattern of “read, transform, output.” Use &lt;code&gt;withFile&lt;/code&gt; for handle-based file I/O. Prefer &lt;code&gt;Maybe&lt;/code&gt;/&lt;code&gt;Either&lt;/code&gt; in pure code and reserve exceptions for the IO part; catch with &lt;code&gt;System.IO.Error.catch&lt;/code&gt; and predicates like &lt;code&gt;isDoesNotExistError&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Haddock&lt;/strong&gt;: Use &lt;code&gt;-- |&lt;/code&gt; before or &lt;code&gt;-- ^&lt;/code&gt; after declarations; document arguments inline. Headings with &lt;code&gt;-- *&lt;/code&gt;, &lt;code&gt;-- **&lt;/code&gt;; link identifiers with single quotes/backticks and modules with double quotes; code blocks with &lt;code&gt;@...@&lt;/code&gt; or bird tracks &lt;code&gt;&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="use-bun-for-shell-scripts"&gt;Use Bun for Shell Scripts&lt;/h2&gt;
&lt;p&gt;I published a post on &lt;a href="https://blog.iany.me/2026/02/use-bun-for-shell-scripts/"&gt;using Bun for cross-platform shell scripts&lt;/a&gt; on Windows. Bun avoids shebang and WSL/Git-bash setup while giving a single runtime for ad-hoc commands and full scripts.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Single binary&lt;/strong&gt;: &lt;code&gt;bun build ./script.ts --compile --outfile script&lt;/code&gt; produces a native executable, so no shebang or interpreter is needed on Windows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bun Shell&lt;/strong&gt;: &lt;code&gt;Bun.$&lt;/code&gt; builds shell commands from template literals (similar to zx). On Windows, Bun ships with MSYS for a consistent bash environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extras&lt;/strong&gt;: &lt;code&gt;Bun.secrets&lt;/code&gt; for the OS keystore, built-in globs, YAML, ANSI. Fast startup (~5ms vs Node’s ~25ms for simple scripts) helps for small, frequent scripts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.iany.me/2026/02/use-bun-for-shell-scripts/"&gt;♯ Use Bun for Shell Scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/d/Development&amp;#43;Environment/JavaScript&amp;#43;Shell&amp;#43;Scripting"&gt;JavaScript Shell Scripting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-i-estimate-work"&gt;How I Estimate Work&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.seangoedecke.com/how-i-estimate-work/"&gt;Sean Goedecke’s post&lt;/a&gt; reframes estimation as a political and constraint-satisfaction problem rather than a pure “how long will this take?” question.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Context first&lt;/strong&gt;: Gather political context before looking at code—pressure on the project, what kind of estimate the chain wants, whether this is a casual ask or a must-have.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inversion&lt;/strong&gt;: The job isn’t “break down work to get a duration.” It’s “find the set of software approaches that fit the timeline they already have in mind.”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If you don’t estimate&lt;/strong&gt;: Someone less technical will estimate for you. Engaging with the process lets you steer which approaches are in scope.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Readwise&amp;#43;Syncs/Readwise&amp;#43;Sync&amp;#43;2026-02-07"&gt;Readwise Sync 2026-02-07&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Brent&amp;#43;Yorgey&amp;#43;-&amp;#43;Typeclassopedia&amp;#43;%28Highlights%29"&gt;Brent Yorgey - Typeclassopedia (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Miran&amp;#43;Lipova%C4%8Da&amp;#43;-&amp;#43;Learn&amp;#43;You&amp;#43;a&amp;#43;Haskell&amp;#43;for&amp;#43;Great&amp;#43;Good&amp;#43;Chapter&amp;#43;9.&amp;#43;Input&amp;#43;and&amp;#43;Output&amp;#43;%28Highlights%29"&gt;Miran Lipovača - Learn You a Haskell for Great Good Chapter 9. Input and Output (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Bryan&amp;#43;O%27Sullivan&amp;#43;et&amp;#43;al.&amp;#43;-&amp;#43;Real&amp;#43;World&amp;#43;Haskell&amp;#43;Chapter&amp;#43;7.&amp;#43;IO&amp;#43;%28Highlights%29"&gt;Bryan O&amp;rsquo;Sullivan et al. - Real World Haskell Chapter 7. IO (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Haddock&amp;#43;Authors&amp;#43;-&amp;#43;Documentation&amp;#43;and&amp;#43;Markup&amp;#43;%28Highlights%29"&gt;Haddock Authors - Documentation and Markup (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Sean&amp;#43;Goedecke&amp;#43;-&amp;#43;How&amp;#43;I&amp;#43;estimate&amp;#43;work&amp;#43;%28Highlights%29"&gt;Sean Goedecke - How I estimate work (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/d/Development&amp;#43;Environment/JavaScript&amp;#43;Shell&amp;#43;Scripting"&gt;JavaScript Shell Scripting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2026-02-01</title><link>https://blog.iany.me/journal/2026/02/what-i-touched-this-week-2026-02-01/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2026/02/what-i-touched-this-week-2026-02-01/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="haskell-type-classes-functors-applicatives-and-monoids"&gt;Haskell Type Classes: Functors, Applicatives, and Monoids&lt;/h2&gt;
&lt;p&gt;This week I dove deep into Haskell&amp;rsquo;s type class hierarchy, working through Learn You a Haskell and the CIS 194 course materials. The key insight is understanding how these abstractions compose to enable powerful, generic programming.- &lt;strong&gt;Functors&lt;/strong&gt; are types that can be mapped over. The &lt;code&gt;fmap&lt;/code&gt; function can be viewed as &amp;ldquo;lifting&amp;rdquo; a function: &lt;code&gt;fmap :: (a -&amp;gt; b) -&amp;gt; (f a -&amp;gt; f b)&lt;/code&gt; transforms an ordinary function into one that works inside a functor context&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;functor laws&lt;/strong&gt; ensure predictable behavior: &lt;code&gt;fmap id = id&lt;/code&gt; (identity preservation) and &lt;code&gt;fmap (f . g) = fmap f . fmap g&lt;/code&gt; (composition preservation)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Applicatives&lt;/strong&gt; extend functors by allowing wrapped functions to be applied to wrapped values using &lt;code&gt;&amp;lt;*&amp;gt;&lt;/code&gt;. Lists as applicatives represent non-deterministic computations where &lt;code&gt;[(+3),(*2)] &amp;lt;*&amp;gt; [1,2]&lt;/code&gt; produces all combinations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ZipList&lt;/strong&gt; provides an alternative applicative instance for lists using pairwise application instead of all combinations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monoids&lt;/strong&gt; provide an identity element (&lt;code&gt;mempty&lt;/code&gt;) and an associative binary operation (&lt;code&gt;mappend&lt;/code&gt;). The &lt;code&gt;foldMap&lt;/code&gt; function reveals why monoids matter: the identity handles empty structures and the associative operation combines values reliably&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;foldl'&lt;/code&gt; from &lt;code&gt;Data.List&lt;/code&gt; instead of &lt;code&gt;foldl&lt;/code&gt; to avoid building huge thunks; &lt;code&gt;foldr&lt;/code&gt; is better when the folding function can short-circuit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learnyouahaskell.github.io/functors-applicative-functors-and-monoids.html"&gt;Learn You a Haskell: Functors, Applicative Functors and Monoids&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.seas.upenn.edu/~cis1940/spring13/lectures/04-higher-order.html"&gt;CIS 194: Higher-order programming and type inference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.haskell.org/Foldr_Foldl_Foldl%27"&gt;Haskell Wiki: Foldr Foldl Foldl&amp;rsquo;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="using-tmux-for-powershell-in-windows-terminal"&gt;Using tmux for PowerShell in Windows Terminal&lt;/h2&gt;
&lt;p&gt;I published a blog post on getting tmux session persistence in Windows Terminal while keeping PowerShell as the default shell. The solution runs tmux through WSL but configures it to spawn &lt;code&gt;pwsh.exe&lt;/code&gt; for new panes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create thin wrapper scripts (&lt;code&gt;tmux.ps1&lt;/code&gt;, &lt;code&gt;tmux.cmd&lt;/code&gt;) so &lt;code&gt;tmux&lt;/code&gt; from Windows means &lt;code&gt;wsl tmux&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;A helper script &lt;code&gt;tmux-pwsh.ps1&lt;/code&gt; creates or attaches to named sessions with &lt;code&gt;pwsh.exe -nologo&lt;/code&gt; as the default command&lt;/li&gt;
&lt;li&gt;The key trick: send &lt;code&gt;set-option default-command&lt;/code&gt; via &lt;code&gt;tmux -C attach&lt;/code&gt; because running &lt;code&gt;wsl tmux set-option&lt;/code&gt; immediately after session creation has a race condition where the session isn&amp;rsquo;t ready&lt;/li&gt;
&lt;li&gt;After setup, splitting panes and creating windows in that session will all start PowerShell in the Windows environment&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="elite-performance-through-preparation"&gt;Elite Performance Through Preparation&lt;/h2&gt;
&lt;p&gt;An insightful &lt;a href="https://x.com/DrDeepMD/status/2015810417839227390/"&gt;thread by Sandeep Palakodeti&lt;/a&gt; on what separates elite performers from amateurs. The core message: greatness is not about taking risks but eliminating variance through preparation.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When experts operate at their limit, they&amp;rsquo;re not &amp;ldquo;trying hard&amp;rdquo;—they&amp;rsquo;re executing scripts that have been debugged for decades through deliberate, high-fidelity repetition&lt;/li&gt;
&lt;li&gt;Fear is the biological response to the unknown; when you&amp;rsquo;ve accounted for every variable, fear is replaced by focus&lt;/li&gt;
&lt;li&gt;Elite performers aim &lt;em&gt;below&lt;/em&gt; the edge of their ability because that&amp;rsquo;s where consistency lives&lt;/li&gt;
&lt;li&gt;Every question gets answered upstream, every branch point gets a playbook—by the time the moment arrives, they&amp;rsquo;re executing state changes, not solving problems&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Don&amp;rsquo;t worship the risk. Worship the work that made the risk irrelevant.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/p/Programming/Haskell&amp;#43;Applicative"&gt;Haskell Applicative&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/p/Programming/Haskell&amp;#43;Pattern&amp;#43;Matching"&gt;Haskell Pattern Matching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/p/Programming/Haskell&amp;#43;High-Order&amp;#43;Function&amp;#43;Composition"&gt;Haskell High-Order Function Composition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Miran&amp;#43;Lipova%C4%8Da&amp;#43;-&amp;#43;Learn&amp;#43;You&amp;#43;a&amp;#43;Haskell&amp;#43;for&amp;#43;Great&amp;#43;Good&amp;#43;Chapter&amp;#43;11.&amp;#43;Functors%2C&amp;#43;Applicative&amp;#43;Functors&amp;#43;and&amp;#43;Monoids&amp;#43;%28Highlights%29"&gt;Miran Lipovača - Learn You a Haskell for Great Good Chapter 11. Functors, Applicative Functors and Monoids (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Miran&amp;#43;Lipova%C4%8Da&amp;#43;-&amp;#43;Learn&amp;#43;You&amp;#43;a&amp;#43;Haskell&amp;#43;for&amp;#43;Great&amp;#43;Good&amp;#43;Chapter&amp;#43;6.&amp;#43;Higher&amp;#43;Order&amp;#43;Functions&amp;#43;%28Highlights%29"&gt;Miran Lipovača - Learn You a Haskell for Great Good Chapter 6. Higher Order Functions (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Haskell&amp;#43;Authors&amp;#43;-&amp;#43;Foldl&amp;#43;%28Highlights%29"&gt;Haskell Authors - Foldl (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Tweets/Sandeep&amp;#43;Palakodeti&amp;#43;-&amp;#43;The&amp;#43;Tippy&amp;#43;Top&amp;#43;%28Highlights%29"&gt;Sandeep Palakodeti - The Tippy Top (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.iany.me/2026/01/use-tmux-for-powershell-in-windows-terminal/"&gt;♯ Use tmux for PowerShell in Windows Terminal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2026-01-24</title><link>https://blog.iany.me/journal/2026/01/what-i-touched-this-week-2026-01-24/</link><pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2026/01/what-i-touched-this-week-2026-01-24/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="erlang-state-machine-patterns-in-rust"&gt;Erlang State Machine Patterns in Rust&lt;/h2&gt;
&lt;p&gt;This week I created a presentation exploring how to implement Erlang OTP&amp;rsquo;s &lt;code&gt;gen_statem&lt;/code&gt; patterns in Rust using Tokio. The core insight is that Erlang&amp;rsquo;s behavior pattern separates the &lt;strong&gt;engine&lt;/strong&gt; (state machine framework) from the &lt;strong&gt;callback&lt;/strong&gt; (state-specific logic), following the strategy pattern.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The fundamental state transition follows: &lt;code&gt;State(S) × Event(E) → Actions(A), State(S')&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Erlang&amp;rsquo;s &amp;ldquo;everything is an event&amp;rdquo; philosophy means state entry, timeouts, and internal messages are all unified as events&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;enter event&lt;/strong&gt; triggers when entering a new state, useful for running initialization logic without duplicating code across multiple transition paths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Postpone action&lt;/strong&gt; defers events to a later state when we can&amp;rsquo;t process them yet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timeout actions&lt;/strong&gt; come in three flavors: event timeout (cleared on any event), state timeout (cleared on state change), and named timeout (manual clearing)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inserted events&lt;/strong&gt; enable preprocessing and state machine composition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href="https://github.com/doitian/from-statem-to-tokio"&gt;code examples&lt;/a&gt; progressively build from basic process simulation to full-featured state machines with all these capabilities.&lt;/p&gt;
&lt;h2 id="bft-consensus-protocol-comparisons"&gt;BFT Consensus Protocol Comparisons&lt;/h2&gt;
&lt;p&gt;I studied the differences between PBFT, Tendermint, HotStuff, and HotStuff-2. These are all &lt;strong&gt;safety-preferring&lt;/strong&gt; protocols where locked parties guard the safety of a &lt;em&gt;potential&lt;/em&gt; commit. The key questions each protocol answers are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What does the leader learn about system status at the start of a view?&lt;/li&gt;
&lt;li&gt;How does the leader convince other parties about system status to get votes?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Among 2t+1 locks in a status response, up to t can be malicious, up to t can be honest but not locked on the committed value, but at least one honest party must be locked on the committed value. This honest party won&amp;rsquo;t vote for conflicting proposals, thus guarding commit safety.&lt;/p&gt;
&lt;p&gt;HotStuff introduces an additional phase: &amp;ldquo;if some party locks, then ≥2t+1 parties know about this lock and hold a &lt;em&gt;key&lt;/em&gt; corresponding to it.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://decentralizedthoughts.github.io/2023-04-01-hotstuff-2/"&gt;What is the difference between PBFT, Tendermint, HotStuff, and HotStuff-2&lt;/a&gt; by Kartik Nayak and Dahlia Malkhi&lt;/li&gt;
&lt;li&gt;&lt;a href="https://decentralizedthoughts.github.io/2022-09-10-provable-broadcast/"&gt;Provable Broadcast&lt;/a&gt; by Ittai Abraham and Alexander Spiegelman&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ckb-virtual-transactions"&gt;CKB Virtual Transactions&lt;/h2&gt;
&lt;p&gt;I explored a design for implementing partial transactions in CKB through &amp;ldquo;Virtual Tx.&amp;rdquo; The approach mocks system calls so scripts access the virtual tx instead of the real current transaction.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Override syscalls in ckb-c-stdlib or ckb-std to redirect to virtual tx data&lt;/li&gt;
&lt;li&gt;Anyone can be economically incentivized to match partial txs since fees can be provided&lt;/li&gt;
&lt;li&gt;Use a special first input as the indicator that the tx is a vtx&lt;/li&gt;
&lt;li&gt;The first input&amp;rsquo;s type script witness specifies how each vtx maps to tx components (inputs, outputs, etc.)&lt;/li&gt;
&lt;li&gt;Inputs/outputs are handled exclusively, with mechanisms to tackle cell/header deps duplication&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/p/Programming/Gen&amp;#43;Statem&amp;#43;to&amp;#43;Tokio&amp;#43;-&amp;#43;Slides"&gt;Gen Statem to Tokio - Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/p/Programming/Gen&amp;#43;Statem&amp;#43;to&amp;#43;Tokio&amp;#43;Learn&amp;#43;State&amp;#43;Machine&amp;#43;Pattern&amp;#43;from&amp;#43;Erlang"&gt;Gen Statem to Tokio Learn State Machine Pattern from Erlang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/p/Programming/Erlang&amp;#43;gen_statem"&gt;Erlang gen_statem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Kartik&amp;#43;Nayak&amp;#43;et&amp;#43;al.&amp;#43;-&amp;#43;What&amp;#43;is&amp;#43;the&amp;#43;difference&amp;#43;between&amp;#43;PBFT%2C&amp;#43;Tendermint%2C&amp;#43;HotStuff%2C&amp;#43;and&amp;#43;HotStuff-2&amp;#43;%28Highlights%29"&gt;Kartik Nayak et al. - What is the difference between PBFT, Tendermint, HotStuff, and HotStuff-2 (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Ittai&amp;#43;Abraham&amp;#43;et&amp;#43;al.&amp;#43;-&amp;#43;Provable&amp;#43;Broadcast&amp;#43;%28Highlights%29"&gt;Ittai Abraham et al. - Provable Broadcast (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/c/CKB/CKB&amp;#43;Virtual&amp;#43;Tx"&gt;CKB Virtual Tx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2026-01-17</title><link>https://blog.iany.me/journal/2026/01/what-i-touched-this-week-2026-01-17/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2026/01/what-i-touched-this-week-2026-01-17/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="temporal-patterns-and-bitemporality"&gt;Temporal Patterns and Bitemporality&lt;/h2&gt;
&lt;p&gt;This week I explored the concept of bitemporality and temporal patterns in data modeling. The key insight is that we need to track two dimensions of time: &lt;strong&gt;actual time&lt;/strong&gt; (when something happened) and &lt;strong&gt;record time&lt;/strong&gt; (when we learned about it). This becomes crucial when we need to answer questions like &amp;ldquo;what did we think the state was two months ago?&amp;rdquo; or &amp;ldquo;what did we know six months ago about something that happened earlier?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tigerbeetle.com/blog/2026-01-14-bitemporality/"&gt;One for the Treble, Two for the Time&lt;/a&gt; by Lewis Daly&lt;/li&gt;
&lt;li&gt;&lt;a href="https://martinfowler.com/eaaDev/timeNarrative.html"&gt;Temporal Patterns&lt;/a&gt; by Martin Fowler&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="go-performance-optimization-techniques"&gt;Go Performance Optimization Techniques&lt;/h2&gt;
&lt;p&gt;I learned several advanced Go performance optimization techniques from VictoriaMetrics, a high-performance time-series database. The key strategies include using &lt;code&gt;sync.Pool&lt;/code&gt; for object reuse to reduce GC pressure, implementing channel-based object pools for more controlled resource management, and using sharding to reduce lock contention by splitting large data structures into independent shards.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;sync.Pool&lt;/code&gt; for object reuse to minimize garbage collection overhead&lt;/li&gt;
&lt;li&gt;Channel-based object pools provide more control than &lt;code&gt;sync.Pool&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Sharding large data structures reduces lock contention&lt;/li&gt;
&lt;li&gt;Localized worker pools with independent channels improve multi-core scalability&lt;/li&gt;
&lt;li&gt;Buffered channels can serve as semaphores for rate limiting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source: &lt;a href="https://mp.weixin.qq.com/s/1svEokrz5C0FwBEA88YGqw"&gt;从入门到极致：VictoriaMetrics 教你写出最高效的 Go 代码&lt;/a&gt; by Tony Bai&lt;/p&gt;
&lt;h2 id="jdk-selection-guidelines"&gt;JDK Selection Guidelines&lt;/h2&gt;
&lt;p&gt;I reviewed best practices for choosing a Java Development Kit (JDK) version and distribution. The primary recommendation is to use &lt;strong&gt;Adoptium Eclipse Temurin 21&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="https://whichjdk.com/"&gt;Which Version of JDK Should I Use&lt;/a&gt; by Jochen Christ&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Lewis&amp;#43;Daly&amp;#43;-&amp;#43;One&amp;#43;for&amp;#43;the&amp;#43;Treble%2C&amp;#43;Two&amp;#43;for&amp;#43;the&amp;#43;Time&amp;#43;%28Highlights%29"&gt;Lewis Daly - One for the Treble, Two for the Time (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Martin&amp;#43;Fowler&amp;#43;-&amp;#43;Temporal&amp;#43;Patterns&amp;#43;%28Highlights%29"&gt;Martin Fowler - Temporal Patterns (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Tony&amp;#43;Bai&amp;#43;-&amp;#43;%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E6%9E%81%E8%87%B4%EF%BC%9AVictoriaMetrics&amp;#43;%E6%95%99%E4%BD%A0%E5%86%99%E5%87%BA%E6%9C%80%E9%AB%98%E6%95%88%E7%9A%84&amp;#43;Go&amp;#43;%E4%BB%A3%E7%A0%81&amp;#43;%28Highlights%29"&gt;Tony Bai - 从入门到极致：VictoriaMetrics 教你写出最高效的 Go 代码 (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Jochen&amp;#43;Christ&amp;#43;-&amp;#43;Which&amp;#43;Version&amp;#43;of&amp;#43;JDK&amp;#43;Should&amp;#43;I&amp;#43;Use&amp;#43;%28Highlights%29"&gt;Jochen Christ - Which Version of JDK Should I Use (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2026-01-10</title><link>https://blog.iany.me/journal/2026/01/what-i-touched-this-week-2026-01-10/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2026/01/what-i-touched-this-week-2026-01-10/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="learning-c23-going-behind-the-curtain-of-modern-systems"&gt;Learning C23: Going Behind the Curtain of Modern Systems&lt;/h2&gt;
&lt;p&gt;This week I dove deep into &lt;a href="https://www.amazon.com/Why-Learn-Behind-Curtain-Systems-ebook/dp/B0FVKPKX6Y"&gt;Paul J. Lucas&amp;rsquo;s book on learning C23&lt;/a&gt;, which provides a comprehensive tour of the latest C standard and why understanding systems programming at this level matters. With 133 highlights, this was clearly a major focus of my learning.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modern C Features&lt;/strong&gt;: C23 introduces many modern conveniences like &lt;code&gt;bool&lt;/code&gt;, &lt;code&gt;nullptr&lt;/code&gt;, &lt;code&gt;constexpr&lt;/code&gt;, &lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;typeof&lt;/code&gt;, and compound literals. The language is evolving while maintaining its core philosophy of being &amp;ldquo;close to the machine.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;East const Convention&lt;/strong&gt;: A stylistic choice where &lt;code&gt;const&lt;/code&gt; is placed to the right (east) of the type, making pointer declarations more readable when reading from right to left. This consistency helps with complex pointer declarations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type System Enhancements&lt;/strong&gt;: New types like &lt;code&gt;_BitInt&lt;/code&gt; for bit-precise integers, decimal floating types (&lt;code&gt;_Decimal32&lt;/code&gt;, &lt;code&gt;_Decimal64&lt;/code&gt;, &lt;code&gt;_Decimal128&lt;/code&gt;), and complex number support show C&amp;rsquo;s continued evolution for specialized use cases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Practical Systems Understanding&lt;/strong&gt;: The book emphasizes that C was designed to work directly with machine details—understanding memory layout, alignment, and how data structures map to hardware is still valuable even when working in higher-level languages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This connects to my broader interest in understanding how modern systems work under the hood, especially as I work with distributed systems and blockchain technology where performance and correctness matter deeply.&lt;/p&gt;
&lt;h2 id="time-management-and-reflective-living"&gt;Time Management and Reflective Living&lt;/h2&gt;
&lt;p&gt;Arnold Bennett&amp;rsquo;s classic &lt;a href="https://www.gutenberg.org/files/2274/2274-h/2274-h.htm"&gt;How to Live on 24 Hours a Day&lt;/a&gt; offers timeless wisdom about making the most of our daily time budget. The key insight is that we already have all the time there is—the challenge is how we use it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Inner Day&lt;/strong&gt;: Bennett suggests dedicating 7.5 hours per week (about 90 minutes per evening) to cultivating your mind. This &amp;ldquo;inner day&amp;rdquo; should begin at 6 p.m. and end at 10 a.m., separate from your workday.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Reflective Mood&lt;/strong&gt;: What&amp;rsquo;s most lacking in modern life is the reflective mood—taking time to examine conduct against principles, to think deeply rather than just consume information. The solitude of the evening commute is perfect for this.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Slow, Deep Reading&lt;/strong&gt;: When reading for cultivation, give at least 45 minutes to careful, fatiguing reflection on what you&amp;rsquo;re reading. Your pace will be slow, but that&amp;rsquo;s the point—the good stuff rises up to meet you in the extra time you give it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Topic Reading with Limits&lt;/strong&gt;: Choose a limited period, subject, or single author. Define the direction and scope of your efforts rather than reading aimlessly. Forget the goal; think only of the surrounding country, and you&amp;rsquo;ll find yourself in a lovely town on a hill.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This resonates with my experience that slowing down often yields better results than rushing, whether in reading, coding, or thinking through problems.&lt;/p&gt;
&lt;h2 id="formal-methods-exploring-quint-and-tla"&gt;Formal Methods: Exploring Quint and TLA+&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been exploring formal specification languages, particularly &lt;a href="https://quint-lang.org/docs/language-basics"&gt;Quint&lt;/a&gt;, which provides a more accessible syntax for writing formal specifications compared to TLA+. This connects to my interest in distributed systems and ensuring correctness.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quint&amp;rsquo;s Design Philosophy&lt;/strong&gt;: Quint restricts the prime operator (&lt;code&gt;'&lt;/code&gt;) to assignments in the format &lt;code&gt;&amp;lt;var&amp;gt;' = &amp;lt;expr&amp;gt;&lt;/code&gt;, preventing hard-to-grasp expressions while maintaining the power of temporal logic. The tooling reports errors if you misuse &lt;code&gt;'&lt;/code&gt; or forget to update variables in some branches.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;State Machine Modeling&lt;/strong&gt;: Actions named &lt;code&gt;init&lt;/code&gt; and &lt;code&gt;step&lt;/code&gt; define the state machine—&lt;code&gt;init&lt;/code&gt; defines initial states, &lt;code&gt;step&lt;/code&gt; defines transitions. This makes the model structure clear and checkable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pure Functions and Actions&lt;/strong&gt;: Definitions prefixed with &lt;code&gt;pure&lt;/code&gt; are functional—same input always produces same output. Actions use the prime operator to modify state. This separation helps reason about what changes state and what doesn&amp;rsquo;t.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Non-determinism&lt;/strong&gt;: Quint supports non-deterministic definitions using &lt;code&gt;any&lt;/code&gt; and &lt;code&gt;oneOf&lt;/code&gt;, which can only be used inside actions before assignments. This is crucial for modeling systems with multiple possible behaviors.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The connection to &lt;a href="https://learntla.com/"&gt;TLA+&lt;/a&gt; is clear—both are tools for specifying and verifying system behavior, but Quint&amp;rsquo;s more familiar syntax might lower the barrier to entry for formal methods. This is particularly relevant as I work on systems where correctness is critical.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Books/Paul&amp;#43;J.&amp;#43;Lucas&amp;#43;-&amp;#43;Why&amp;#43;Learn&amp;#43;C&amp;#43;Go&amp;#43;Behind&amp;#43;the&amp;#43;Curtain&amp;#43;of&amp;#43;Modern&amp;#43;Systems&amp;#43;With&amp;#43;C23&amp;#43;%28Highlights%29"&gt;Paul J. Lucas - Why Learn C Go Behind the Curtain of Modern Systems With C23 (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Books/Arnold&amp;#43;Bennett&amp;#43;-&amp;#43;How&amp;#43;to&amp;#43;Live&amp;#43;on&amp;#43;24&amp;#43;Hours&amp;#43;a&amp;#43;Day&amp;#43;%28Highlights%29"&gt;Arnold Bennett - How to Live on 24 Hours a Day (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Quint&amp;#43;Authors&amp;#43;-&amp;#43;Language&amp;#43;Basics&amp;#43;%28Highlights%29"&gt;Quint Authors - Language Basics (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Quint&amp;#43;Authors&amp;#43;-&amp;#43;Lesson&amp;#43;0&amp;#43;-&amp;#43;Hello%2C&amp;#43;world&amp;#43;%28Highlights%29"&gt;Quint Authors - Lesson 0 - Hello, world (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/f/Formal&amp;#43;Method/Quint"&gt;Quint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/para/lets/f/Formal&amp;#43;Method/TLA%2B"&gt;TLA+&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2026-01-03</title><link>https://blog.iany.me/journal/2026/01/what-i-touched-this-week-2026-01-03/</link><pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2026/01/what-i-touched-this-week-2026-01-03/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="training-the-idea-muscle-quantity-over-quality"&gt;Training the Idea Muscle: Quantity Over Quality&lt;/h2&gt;
&lt;p&gt;This week I came across a fascinating article about &lt;a href="https://sfalexandria.com/posts/rileys-ideas/"&gt;training the idea muscle&lt;/a&gt; that perfectly captures a principle I&amp;rsquo;ve been trying to internalize: if you reject your own ideas, the part of the brain that generates them will simply stop producing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Never Reject During Generation&lt;/strong&gt;: The key insight is to generate ideas continuously without filtering them in the moment. You sort them out later. This is similar to the &lt;a href="https://kb.iany.me/para/lets/c/Creativity/Creativity&amp;#43;Faucet"&gt;Creativity Faucet&lt;/a&gt; concept—you need to let the bad ideas flow out first before the good ones emerge.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Do It While Learning&lt;/strong&gt;: &amp;ldquo;I don&amp;rsquo;t think I&amp;rsquo;ve ever done anything I&amp;rsquo;m not good enough to do because I get good at the thing while doing it.&amp;rdquo; This reframes the common fear of not being ready—you become ready by starting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fun as the Filter&lt;/strong&gt;: Only work on things you think are fun. This is the real filter, not whether you&amp;rsquo;re &amp;ldquo;good enough&amp;rdquo; or whether the idea is &amp;ldquo;good enough&amp;rdquo; initially.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ideas Require Action&lt;/strong&gt;: Ideas are everywhere, but most people don&amp;rsquo;t act on them. The muscle being trained isn&amp;rsquo;t just idea generation—it&amp;rsquo;s the habit of execution.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This connects beautifully with &lt;a href="https://www.goodreads.com/book/show/59991434-the-motern-method"&gt;The Motern Method&lt;/a&gt;, a book about an artist who released 23,000+ songs by embracing quantity and rejecting perfectionism.&lt;/p&gt;
&lt;h2 id="slowing-down-to-go-deeper"&gt;Slowing Down to Go Deeper&lt;/h2&gt;
&lt;p&gt;David Cain&amp;rsquo;s article on &lt;a href="https://www.raptitude.com/2025/12/maybe-the-default-settings-are-too-high/"&gt;default settings being too high&lt;/a&gt; offers a counterintuitive productivity insight: slowing down often yields better results than rushing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reading Aloud&lt;/strong&gt;: Limiting yourself to mouth-speed rather than eye-speed prevents rushing through text, missing important details, and losing interest. If you&amp;rsquo;re enjoying something, why would you want to be done with it sooner?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Vacuum Analogy&lt;/strong&gt;: Passing a vacuum too quickly over carpet means you miss half the dirt. Slow down, and you can hear how much more grit gets picked up. The same applies to reading and eating—the good stuff (meaning in text, pleasure in food) rises up to meet you in the extra time you give it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quality Over Speed&lt;/strong&gt;: This challenges the default assumption that faster is better. Sometimes our cultural &amp;ldquo;default settings&amp;rdquo; for speed are calibrated too high for actual comprehension and enjoyment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This resonates with my experience using AI tools—the temptation is to go faster, but often the value comes from slowing down and engaging more deeply with the material.&lt;/p&gt;
&lt;h2 id="learning-tacit-knowledge-copying-better"&gt;Learning Tacit Knowledge: Copying Better&lt;/h2&gt;
&lt;p&gt;Cedric Chin&amp;rsquo;s piece on &lt;a href="https://commoncog.com/blog/how-to-learn-tacit-knowledge/"&gt;acquiring tacit knowledge from experts&lt;/a&gt; provides a practical framework for learning skills that can&amp;rsquo;t be easily articulated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Four Key Elements&lt;/strong&gt;: When observing experts, focus on their &lt;strong&gt;cues&lt;/strong&gt; (what they notice first), &lt;strong&gt;expectancies&lt;/strong&gt; (what they expect to happen next), &lt;strong&gt;goals&lt;/strong&gt; (their priorities), and &lt;strong&gt;actions&lt;/strong&gt; (courses of action that immediately come to mind).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prototypes vs. Options&lt;/strong&gt;: Experts rarely compare multiple options—they pick the first available option that fits their criteria because they&amp;rsquo;ve built up mental prototypes. If you find yourself doing option comparison in a situation where a colleague doesn&amp;rsquo;t, that&amp;rsquo;s a signal they have a prototype you lack.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Narrative Construction&lt;/strong&gt;: Experts construct narratives or simulations to explain what they&amp;rsquo;re seeing, matching patterns against different prototypes. This is fundamentally different from following explicit rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This framework is particularly relevant for software engineering, where so much expertise is tacit—knowing when to refactor, which abstractions to choose, how to structure systems. These aren&amp;rsquo;t things you can learn from documentation alone.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Aadil&amp;#43;Pickle&amp;#43;-&amp;#43;Training&amp;#43;the&amp;#43;Idea&amp;#43;Muscle&amp;#43;%28Highlights%29"&gt;Aadil Pickle - Training the Idea Muscle (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/David&amp;#43;Cain&amp;#43;-&amp;#43;Maybe&amp;#43;the&amp;#43;Default&amp;#43;Settings&amp;#43;Are&amp;#43;Too&amp;#43;High&amp;#43;%28Highlights%29"&gt;David Cain - Maybe the Default Settings Are Too High (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Cedric&amp;#43;Chin&amp;#43;-&amp;#43;Copying&amp;#43;Better&amp;#43;How&amp;#43;to&amp;#43;Acquire&amp;#43;the&amp;#43;Tacit&amp;#43;Knowledge&amp;#43;of&amp;#43;Experts&amp;#43;%28Highlights%29"&gt;Cedric Chin - Copying Better How to Acquire the Tacit Knowledge of Experts (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Sean&amp;#43;Goedecke&amp;#43;-&amp;#43;Software&amp;#43;Engineers&amp;#43;Should&amp;#43;Be&amp;#43;a&amp;#43;Little&amp;#43;Bit&amp;#43;Cynical&amp;#43;%28Highlights%29"&gt;Sean Goedecke - Software Engineers Should Be a Little Bit Cynical (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2025-12-27</title><link>https://blog.iany.me/journal/2025/12/what-i-touched-this-week-2025-12-27/</link><pubDate>Sat, 27 Dec 2025 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2025/12/what-i-touched-this-week-2025-12-27/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="state-machines-for-simplifying-complex-logic"&gt;State Machines for Simplifying Complex Logic&lt;/h2&gt;
&lt;p&gt;This week I dove into using state machines as a tool for managing complex application logic. Dave Thomas&amp;rsquo;s approach in his book &amp;ldquo;Simplicity&amp;rdquo; resonated with me: state machines aren&amp;rsquo;t as complicated as people make them out to be, and they&amp;rsquo;re a great way of turning deeply nested code into nice linear chunks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data Over Code&lt;/strong&gt;: The core insight is that data is easier to work with than code—it&amp;rsquo;s easier to reason about, manipulate, and change. You don&amp;rsquo;t need complex libraries or long-winded pattern-based approaches when you need a state machine; all you need is a lookup table.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;State Transition Formula&lt;/strong&gt;: The fundamental model is &lt;code&gt;State(S) x Event(E) -&amp;gt; Actions(A), State(S')&lt;/code&gt;. This simple formula captures the essence of event-driven behavior in a declarative way.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event Generation&lt;/strong&gt;: Actions can return either new state values or generate new events. If an event is returned, the code immediately performs another transition—this allows for elegant chaining of state changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;State Enter Calls&lt;/strong&gt;: Erlang&amp;rsquo;s &lt;code&gt;gen_statem&lt;/code&gt; has a powerful feature where the state callback is automatically called with special arguments whenever the state changes, making it easy to perform entry actions without cluttering transition logic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Postponing Events&lt;/strong&gt;: A clever pattern is the ability to postpone events—if an event arrives but shouldn&amp;rsquo;t be handled in the current state, you can defer it until a state change occurs when the event queue restarts from the oldest postponed event.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://articles.pragdave.me/p/simplify-logic-with-state-machines"&gt;Simplify Logic With State Machines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.erlang.org/doc/system/statem"&gt;gen_statem Behaviour&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tokio-and-async-rust-patterns"&gt;Tokio and Async Rust Patterns&lt;/h2&gt;
&lt;p&gt;Continuing my study of async Rust, I worked through the Tokio tutorials and explored patterns for shared state and concurrent data structures.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mutex Selection&lt;/strong&gt;: As a rule of thumb, using a synchronous mutex from within asynchronous code is fine as long as contention remains low and the lock is not held across calls to &lt;code&gt;.await&lt;/code&gt;. The Tokio mutex&amp;rsquo;s primary feature is that it can be held across an &lt;code&gt;.await&lt;/code&gt; without issues, but if contention becomes a problem, the best fix is rarely to switch to the Tokio mutex.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent Hash Maps&lt;/strong&gt;: For high-contention scenarios, there are several excellent crate options: &lt;a href="https://docs.rs/dashmap"&gt;dashmap&lt;/a&gt; provides a sharded hash map implementation, while &lt;a href="https://docs.rs/leapfrog"&gt;leapfrog&lt;/a&gt; uses leapfrog probing, and &lt;a href="https://docs.rs/flurry"&gt;flurry&lt;/a&gt; is a port of Java&amp;rsquo;s &lt;code&gt;ConcurrentHashMap&lt;/code&gt;. I also discovered &lt;a href="https://docs.rs/papaya"&gt;papaya&lt;/a&gt;, which is optimized for read-heavy workloads.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Async Trait Variants&lt;/strong&gt;: The &lt;a href="https://docs.rs/trait-variant"&gt;trait_variant&lt;/a&gt; and &lt;a href="https://docs.rs/dynosaur"&gt;dynosaur&lt;/a&gt; crates help with async trait patterns—useful for creating both sync and async versions of traits without code duplication.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testing with tokio-test&lt;/strong&gt;: The &lt;a href="https://docs.rs/tokio-test/latest/tokio_test/io/struct.Builder.html"&gt;tokio_test::io::Builder&lt;/a&gt; provides mock I/O for testing async code, making it easier to write deterministic tests for network protocols.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://tokio.rs/tokio/tutorial/shared-state"&gt;Tokio Tutorial - Shared State&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="clean-code-maintenance-as-the-core-of-software"&gt;Clean Code: Maintenance as the Core of Software&lt;/h2&gt;
&lt;p&gt;I revisited Robert C. Martin&amp;rsquo;s &amp;ldquo;Clean Code&amp;rdquo; this week, and the framing around maintenance struck me differently in the AI era.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;80% is Maintenance&lt;/strong&gt;: In software, 80% or more of what we do is &amp;ldquo;maintenance&amp;rdquo;—the act of repair. Rather than the Western focus on producing good software, we should think more like home repairmen or auto mechanics: proactive maintenance rather than waiting for bugs to surface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A Million Selfless Acts&lt;/strong&gt;: Quality is the result of a million selfless acts of care—not just of any great method that descends from the heavens. These acts are simple but not simplistic, forming the fabric of greatness in any human endeavor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reading vs Writing Ratio&lt;/strong&gt;: The ratio of time spent reading vs. writing code is well over 10:1. We are constantly reading old code as part of the effort to write new code, so making code easy to read actually makes it easier to write.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LeBlanc&amp;rsquo;s Law&lt;/strong&gt;: &amp;ldquo;Later equals never.&amp;rdquo; We&amp;rsquo;ve all felt the relief of seeing our messy program work and deciding that a working mess is better than nothing, promising to clean it up later. This resonates especially with vibe-coded AI-generated solutions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Boy Scout Rule&lt;/strong&gt;: Leave the campground cleaner than you found it. Small continuous improvements compound over time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clean Code Characteristics&lt;/strong&gt;: Clean code reads like well-written prose, never obscures the designer&amp;rsquo;s intent, and is full of crisp abstractions and straightforward lines of control. It should make you smile the way a well-crafted music box or well-designed car would.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: Clean Code by Robert C. Martin&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Dave&amp;#43;Thomas&amp;#43;-&amp;#43;Simplify&amp;#43;Logic&amp;#43;With&amp;#43;State&amp;#43;Machines&amp;#43;%28Highlights%29"&gt;Dave Thomas - Simplify Logic With State Machines (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Erlang&amp;#43;Authors&amp;#43;-&amp;#43;gen_statem&amp;#43;Behaviour&amp;#43;%28Highlights%29"&gt;Erlang Authors - gen_statem Behaviour (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Books/Dave&amp;#43;Thomas&amp;#43;-&amp;#43;Simplicity&amp;#43;Sustainable%2C&amp;#43;Humane%2C&amp;#43;and&amp;#43;Effective&amp;#43;Software&amp;#43;Development&amp;#43;%28Highlights%29"&gt;Dave Thomas - Simplicity Sustainable, Humane, and Effective Software Development (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Tokio&amp;#43;Authors&amp;#43;-&amp;#43;Shared&amp;#43;state&amp;#43;%28Highlights%29"&gt;Tokio Authors - Shared state (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Books/Robert&amp;#43;C.&amp;#43;Martin&amp;#43;-&amp;#43;Clean&amp;#43;Code&amp;#43;%28Highlights%29"&gt;Robert C. Martin - Clean Code (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2025-12-20</title><link>https://blog.iany.me/journal/2025/12/what-i-touched-this-week-2025-12-20/</link><pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2025/12/what-i-touched-this-week-2025-12-20/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="the-ladder-of-abstraction-in-system-design"&gt;The Ladder of Abstraction in System Design&lt;/h2&gt;
&lt;p&gt;Bret Victor&amp;rsquo;s &amp;ldquo;The Ladder of Abstraction&amp;rdquo; explores how to design interactive systems by moving between levels of abstraction. The core insight is that the most powerful way to gain insight into a system is by stepping up and down the ladder—abstracting over variables to see high-level patterns, then stepping down to concrete representations to understand the details.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Abstracting Over Time&lt;/strong&gt;: Instead of watching a system evolve in real-time (which is limiting, like a film editor who can&amp;rsquo;t pause or rewind), we can abstract over time by turning time into a parameter. This creates a trajectory—a function that returns a point for any given time, showing the system&amp;rsquo;s behavior across all time values.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stepping Up and Down&lt;/strong&gt;: We step up to an abstraction by devising a representation that depicts the system across all values of a parameter. We step down by interactively selecting one particular value, allowing us to explore regions of interest quickly. This corresponds to partial application in functional programming.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual vs. Symbolic Abstractions&lt;/strong&gt;: The human brain excels at pattern matching with visual patterns but struggles with logical inferences. Visual abstractions leverage our natural strengths, making it easier to see high-level patterns and tune out low-level clutter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metrics and Patterns&lt;/strong&gt;: By choosing metrics—numbers that summarize system behavior in interesting ways—we can step up another level of abstraction. For example, plotting time to completion versus turning rate reveals patterns that aren&amp;rsquo;t visible in individual trajectories.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Starting Simple&lt;/strong&gt;: Beginning with the simplest possible algorithm and thoroughly exploring it helps us understand why and how it&amp;rsquo;s terrible, providing the foundation for better solutions. The tools we build for simple cases continue to serve us throughout the design process.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://worrydream.com/LadderOfAbstraction/"&gt;The Ladder of Abstraction&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="ai-investment-bubble-and-infrastructure-economics"&gt;AI Investment Bubble and Infrastructure Economics&lt;/h2&gt;
&lt;p&gt;Howard Marks examines whether AI is experiencing a financial bubble, distinguishing between technological hype and actual market bubbles. His analysis reveals the complex economics of AI infrastructure investment and the risks of debt-financed expansion.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bubbles vs. Technological Progress&lt;/strong&gt;: Market bubbles aren&amp;rsquo;t caused directly by technological developments but by excessive optimism applied to those developments. However, Marks notes that &amp;ldquo;inflection bubbles&amp;rdquo; based on revolutionary developments can accelerate technological progress while still destroying wealth—they&amp;rsquo;re both collective delusions and expressions of collective vision.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Compression Effect&lt;/strong&gt;: If people remained patient and value-insistent, novel technologies would take decades to build out. The hysteria of bubbles compresses this process into a short period, with some money going to life-changing investments in winners but a lot being incinerated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Circular Capital Flows&lt;/strong&gt;: OpenAI receives billions from tech companies but also sends billions back to pay for computing power. Nvidia&amp;rsquo;s $100 billion investment in OpenAI flows back as the startup buys or leases Nvidia&amp;rsquo;s chips, creating circular capital flows that raise questions about actual value creation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debt-Financed Expansion&lt;/strong&gt;: Major tech companies (Oracle, Meta, Alphabet) have issued 30-year bonds to finance AI investments. With close to half a trillion in expected spending next year but only $350bn collectively in the bank, heavy debt usage creates risks of overcapacity and depressed returns.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Scale of Trillions&lt;/strong&gt;: A trillion dollars is a dollar a second for 31,700 years—a scale that&amp;rsquo;s difficult to comprehend but represents the magnitude of AI infrastructure investment being discussed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://readwise-assets.s3.amazonaws.com/media/wisereads/articles/is-it-a-bubble/1056.pdf"&gt;Is It A Bubble&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="becoming-ai-native-in-daily-workflows"&gt;Becoming AI-Native in Daily Workflows&lt;/h2&gt;
&lt;p&gt;Jeff Su&amp;rsquo;s video provides practical strategies for integrating AI into daily work, moving beyond simple prompting to building sustainable AI-native workflows that anchor conversations, leverage swipe files, and strategically allocate tasks between AI and manual work.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Anchoring Important Conversations&lt;/strong&gt;: If an AI conversation takes more than 10 minutes or produces something you&amp;rsquo;ll reference again, anchor it to your workspace immediately. This creates a searchable archive of valuable AI interactions and outputs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI Swipe Files&lt;/strong&gt;: Create a dedicated folder for good examples—business proposals, code patterns, writing samples—that AI can reference. Instead of starting from scratch, you open your swipe folder to find examples that guide AI toward the quality and style you want. This acts as a curated reference library for AI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Task Breakdown and Allocation&lt;/strong&gt;: Before writing anything, break work into steps and microtasks. Then decide whether each microtask should be done manually or with AI, and specify the exact tool best suited for that task. For projects taking more than an hour, spend 5-10 minutes mapping steps and tagging which are AI or manual.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Battle-Tested Prompts&lt;/strong&gt;: You don&amp;rsquo;t need a thousand random prompts—you need 10-15 battle-tested ones that you can use every day. Focus on quality and refinement rather than quantity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;: &lt;a href="https://www.youtube.com/watch?v=E7YiKBeOneo"&gt;Give Me 9 Minutes, I&amp;rsquo;ll Make You AI-Native&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Bret&amp;#43;Victor&amp;#43;-&amp;#43;The&amp;#43;Ladder&amp;#43;of&amp;#43;Abstraction&amp;#43;%28Highlights%29"&gt;Bret Victor - The Ladder of Abstraction (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Howard&amp;#43;Marks&amp;#43;-&amp;#43;Is&amp;#43;It&amp;#43;A&amp;#43;Bubble&amp;#43;%28Highlights%29"&gt;Howard Marks - Is It A Bubble (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Jeff&amp;#43;Su&amp;#43;-&amp;#43;Give&amp;#43;Me&amp;#43;9&amp;#43;Minutes%2C&amp;#43;I%27ll&amp;#43;Make&amp;#43;You&amp;#43;AI-Native&amp;#43;%28Highlights%29"&gt;Jeff Su - Give Me 9 Minutes, I&amp;rsquo;ll Make You AI-Native (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2025-12-13</title><link>https://blog.iany.me/journal/2025/12/what-i-touched-this-week-2025-12-13/</link><pubDate>Sat, 13 Dec 2025 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2025/12/what-i-touched-this-week-2025-12-13/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="social-architecture-and-open-source-community-building"&gt;Social Architecture and Open Source Community Building&lt;/h2&gt;
&lt;p&gt;This week I dove deep into Pieter Hintjens&amp;rsquo; &amp;ldquo;Social Architecture,&amp;rdquo; a comprehensive guide to building sustainable open source communities. The book provides a framework for understanding how successful communities function, with direct relevance to my work on CKB Fiber and other open source projects.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The C4 Process&lt;/strong&gt;: An evolution of the GitHub Fork + Pull Model that emphasizes problem-first thinking. All patches must start by identifying a clear problem before proposing solutions. This creates a culture where contributors focus on real needs rather than speculative features.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimistic Merging&lt;/strong&gt;: Maintainers should merge patches rapidly, even if imperfect. This creates opportunities for mentoring—when a patch needs work, other contributors naturally step in to help, building relationships and improving code quality through collaboration rather than gatekeeping.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Free Entry and Non-Tribalism&lt;/strong&gt;: Successful communities welcome competition and experimentation. If starting a competing project gets a negative emotional response, the group is too tribal. Healthy communities applaud new competitors as spaces for learning and innovation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The 20 Principles&lt;/strong&gt;: From strong mission and transparency to minimalism and sense of humor, Hintjens identifies key characteristics of thriving communities. Particularly resonant: &amp;ldquo;Perfection precludes participation&amp;rdquo;—releasing buggy, half-finished work provokes contributions more effectively than polished releases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Economic Incentives&lt;/strong&gt;: We&amp;rsquo;re economic animals, and architecture must provide economic incentive to invest. Whether it&amp;rsquo;s reputation, money, or skill development, contributors need clear value propositions. Think of architecture as a marketplace, not just an engineering design.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://hintjens.wdfiles.com/local--files/books/social-architecture.pdf"&gt;Social Architecture&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="ai-assisted-development-and-learning"&gt;AI-Assisted Development and Learning&lt;/h2&gt;
&lt;p&gt;Multiple articles this week explored how to effectively use AI as a development and learning partner, moving beyond simple code generation to more sophisticated workflows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Learning with AI&lt;/strong&gt;: Scott Young emphasizes using AI for book recommendations and practice problem generation rather than summaries. AI tutoring works better than teaching because specific questions constrain answers more effectively. For repetitive learning tasks, building applications can be more consistent than repeated prompting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Design Challenges&lt;/strong&gt;: Armin Ronacher highlights that differences between models are significant enough that you&amp;rsquo;ll likely need custom abstractions. Key insights include using static system prompts with dynamic messages for caching, and hiding execution failures from context by running potentially failing tasks in subagents until they succeed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CLAUDE.md Best Practices&lt;/strong&gt;: Kyle Mistele recommends keeping &lt;code&gt;CLAUDE.md&lt;/code&gt; under 300 lines (ideally under 60), with task-specific instructions in separate markdown files. Most importantly: &amp;ldquo;Never send an LLM to do a linter&amp;rsquo;s job&amp;rdquo;—use deterministic tools whenever possible since LLMs are expensive and slow compared to traditional tooling.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, Ed sent me an email to introduce his app, &lt;a href="https://grasp.study/"&gt;Grasp&lt;/a&gt;, which I found impressively aligned with these best practices and strategies from the past two weeks&amp;rsquo; articles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.scotthyoung.com/blog/2025/12/02/5-strategies-to-learn-better-with-ai-and-traps-to-avoid/"&gt;5 Strategies to Learn Better With AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lucumr.pocoo.org/2025/11/21/agents-are-hard/"&gt;Agent Design Is Still Hard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md"&gt;Writing a good CLAUDE.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="git-workflow-improvements"&gt;Git Workflow Improvements&lt;/h2&gt;
&lt;p&gt;I published a blog post about backing up ignored files using Git remote branches, solving a problem I&amp;rsquo;ve had for years. The solution uses Git&amp;rsquo;s low-level plumbing commands to store ignored files (like local configs, IDE settings, or personal scripts) in a separate remote branch without affecting the main branch or working directory.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Problem&lt;/strong&gt;: Files that need backup but shouldn&amp;rsquo;t be in main branch history—local development settings, IDE configurations, personal notes, or workflow-specific scripts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Solution&lt;/strong&gt;: A &lt;code&gt;git-store-file&lt;/code&gt; script that uses a temporary Git index to commit ignored files to a remote branch (default: &lt;code&gt;origin/_store&lt;/code&gt;). This keeps everything in one repository while maintaining clear separation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Technical Approach&lt;/strong&gt;: Uses &lt;code&gt;GIT_INDEX_FILE&lt;/code&gt; for isolated index manipulation, &lt;code&gt;git read-tree&lt;/code&gt; to load branch state, &lt;code&gt;git add -f&lt;/code&gt; for ignored files, and &lt;code&gt;git commit-tree&lt;/code&gt; for direct commit creation—all without touching the working directory.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://blog.iany.me/2025/12/backup-ignored-files-with-git-remote-branch/"&gt;♯ Backup Ignored Files with Git Remote Branch&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Pieter&amp;#43;Hintjens&amp;#43;-&amp;#43;Social&amp;#43;Architecture&amp;#43;%28Highlights%29"&gt;Pieter Hintjens - Social Architecture (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Scott&amp;#43;Young&amp;#43;-&amp;#43;5&amp;#43;Strategies&amp;#43;to&amp;#43;Learn&amp;#43;Better&amp;#43;With&amp;#43;AI&amp;#43;%28Highlights%29"&gt;Scott Young - 5 Strategies to Learn Better With AI (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Armin&amp;#43;Ronacher&amp;#43;-&amp;#43;Agent&amp;#43;Design&amp;#43;Is&amp;#43;Still&amp;#43;Hard&amp;#43;%28Highlights%29"&gt;Armin Ronacher - Agent Design Is Still Hard (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Kyle&amp;#43;Mistele&amp;#43;-&amp;#43;Writing&amp;#43;a&amp;#43;good&amp;#43;CLAUDE.md&amp;#43;%28Highlights%29"&gt;Kyle Mistele - Writing a good CLAUDE.md (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2025-12-06</title><link>https://blog.iany.me/journal/2025/12/what-i-touched-this-week-2025-12-06/</link><pubDate>Sat, 06 Dec 2025 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2025/12/what-i-touched-this-week-2025-12-06/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="fuzzing-strategies-from-tigerbeetle"&gt;Fuzzing Strategies from TigerBeetle&lt;/h2&gt;
&lt;p&gt;This week I dove deep into TigerBeetle&amp;rsquo;s fuzzing philosophy through several articles by Aleksey Kladov. The collection reveals a systematic approach to building testable systems from the ground up.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Design for Fuzzability First&lt;/strong&gt;: You don&amp;rsquo;t build a system and then add a fuzzer—the process is almost reversed. Start by sketching minimal interfaces that yield themselves to efficient fuzzing. Minimize the interface by eliminating accidental dependencies and leaving only essential ones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data-Oriented Design&lt;/strong&gt;: Apply data-oriented design principles—think in terms of input data, output data, and the fundamental data transformation the system implements. This makes the code more easily fuzzable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Four Fuzzer Strategy&lt;/strong&gt;: Use multiple fuzzing approaches: (1) positive space fuzzing with ideal lab environments to verify correctness, (2) negative space fuzzing calling all public methods in random order to break things, (3) boundary testing for valid vs. almost-valid-but-invalid codes, and (4) whole subsystem fuzzing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Randomness in Tests&lt;/strong&gt;: Don&amp;rsquo;t always use hard-coded seeds. Zig&amp;rsquo;s approach is best—provide &lt;code&gt;std.testing.random_seed&lt;/code&gt; that&amp;rsquo;s different per run but generated outside the test process. Run tests twice: once with a hard-coded seed for regression testing, and once with a truly random seed for coverage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tigerbeetle.com/blog/2025-11-28-tale-of-four-fuzzers/"&gt;A Tale of Four Fuzzers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://matklad.github.io/2021/11/07/generate-all-the-things.html"&gt;Generate All the Things&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tigerbeetle.com/blog/2025-04-23-swarm-testing-data-structures/"&gt;Swarm Testing Data Structures&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="lightning-network-mobile-nodes-and-self-custody"&gt;Lightning Network Mobile Nodes and Self-Custody&lt;/h2&gt;
&lt;p&gt;Stephen DeLorme&amp;rsquo;s article on Lightning self-custody and mobile nodes provided valuable insights into the future of Bitcoin payments, with direct relevance to my work on CKB Fiber.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mobile Receiving Nodes&lt;/strong&gt;: For receiving-only nodes, you don&amp;rsquo;t need routing, meaning you don&amp;rsquo;t need all that database storage. This was pioneered by projects like Breez, Phoenix, Mutiny wallet, Blixt, and newer versions of Zeus.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline Payments Problem&lt;/strong&gt;: Even the sharpest performing mobile lightning wallets suffer from a lack of offline payments, which has severely tarnished the perception of Lightning. BIP-353 user names distributed via DNS and recent LDK PRs for async payments are addressing this.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Capital Efficiency&lt;/strong&gt;: Splicing is a powerful tool for easing capital constraints for LSPs. The &lt;code&gt;option_zero_reserve&lt;/code&gt; allows channel partners to choose not to use a channel reserve balance—great for UX, though it requires solving minimal capacity restrictions (relevant for CKB Fiber).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graduated Wallet Model&lt;/strong&gt;: A wallet that begins with a custodial service or trust-minimized technology, then graduates to a Lightning channel when the balance grows to a certain threshold. This helps LSPs avoid opening &amp;ldquo;non-productive&amp;rdquo; channels to users just experimenting with the app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dust Limit Considerations&lt;/strong&gt;: Amounts below the dust limit (like a 21 sat Nostr zap) wouldn&amp;rsquo;t be claimable on-chain anyway, suggesting alternative approaches for micro-transactions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://www.voltage.cloud/blog/lightning-self-custody-works"&gt;Lightning Self-Custody Works: Why Mobile Nodes Are the Future of Bitcoin&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="think-first-ai-second"&gt;Think First, AI Second&lt;/h2&gt;
&lt;p&gt;Ines Lee&amp;rsquo;s article on using AI as a thinking partner rather than a solution generator resonated deeply with my own experience using AI tools.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Active vs. Passive AI Use&lt;/strong&gt;: Active AI use means building understanding while collaborating with the model. Frame the problem yourself, make an initial pass, then use AI to challenge assumptions, uncover blind spots, and sharpen arguments. Studies show this approach maintains cognitive engagement even while using AI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI as Coach, Not Cheerleader&lt;/strong&gt;: Shift AI from talking to you about your work (where it&amp;rsquo;s sycophantic) to talking to other editors about your work (where it&amp;rsquo;s professionally candid). You&amp;rsquo;re no longer the audience, so it drops the protective politeness.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Combat Illusion of Understanding&lt;/strong&gt;: AI explains things in ways that are easy to follow, making us susceptible to the &amp;ldquo;illusion of understanding.&amp;rdquo; We overestimate what we&amp;rsquo;ve learned. Real comprehension emerges when forced to articulate thinking, because explaining reveals gaps we didn&amp;rsquo;t know existed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Practical Prompts&lt;/strong&gt;: Use prompts like &amp;ldquo;Ask exactly 5 high-leverage questions before proposing solutions,&amp;rdquo; &amp;ldquo;Act as an editor recommending whether to publish this piece,&amp;rdquo; &amp;ldquo;Analyze my reasoning and create an architecture of my thinking,&amp;rdquo; &amp;ldquo;Switch to devil&amp;rsquo;s advocate mode and dismantle my thesis,&amp;rdquo; and &amp;ldquo;Ask me to explain this as if teaching it to someone else.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://every.to/emails/think-first-ai-second"&gt;Think First, AI Second&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Aleksey&amp;#43;Kladov&amp;#43;-&amp;#43;A&amp;#43;Tale&amp;#43;of&amp;#43;Four&amp;#43;Fuzzers&amp;#43;%28Highlights%29"&gt;Aleksey Kladov - A Tale of Four Fuzzers (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Aleksey&amp;#43;Kladov&amp;#43;-&amp;#43;Generate&amp;#43;All&amp;#43;the&amp;#43;Things&amp;#43;%28Highlights%29"&gt;Aleksey Kladov - Generate All the Things (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Aleksey&amp;#43;Kladov&amp;#43;-&amp;#43;Swarm&amp;#43;Testing&amp;#43;Data&amp;#43;Structures&amp;#43;%28Highlights%29"&gt;Aleksey Kladov - Swarm Testing Data Structures (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Stephen&amp;#43;DeLorme&amp;#43;-&amp;#43;Lightning&amp;#43;Self-Custody&amp;#43;Works&amp;#43;Why&amp;#43;Mobile&amp;#43;Nodes&amp;#43;Are&amp;#43;the&amp;#43;Future&amp;#43;of&amp;#43;Bitcoin&amp;#43;%28Highlights%29"&gt;Stephen DeLorme - Lightning Self-Custody Works Why Mobile Nodes Are the Future of Bitcoin (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Ines&amp;#43;Lee&amp;#43;-&amp;#43;Think&amp;#43;First%2C&amp;#43;AI&amp;#43;Second&amp;#43;%28Highlights%29"&gt;Ines Lee - Think First, AI Second (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item><item><title>What I Touched This Week 2025-11-29</title><link>https://blog.iany.me/journal/2025/11/what-i-touched-this-week-2025-11-29/</link><pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/journal/2025/11/what-i-touched-this-week-2025-11-29/</guid><description>&lt;details open disabled class="kg-card kg-callout kg-callout-attention" data-callout-type="attention"&gt;
&lt;summary class="kg-callout-title" tabindex="-1"&gt;
&lt;i aria-hidden="true" class="kg-callout-type fas fa-exclamation-triangle"&gt;&lt;/i&gt;
This journal is generated by AI
&lt;/summary&gt;
&lt;/details&gt;
&lt;h2 id="software-design-insights-from-tigerbeetle"&gt;Software Design Insights from TigerBeetle&lt;/h2&gt;
&lt;p&gt;This week I went deep into several articles from Alexey Kladov (matklad) and TigerBeetle&amp;rsquo;s engineering blog. The collection offers practical wisdom on building robust systems.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Code Review Workflow&lt;/strong&gt;: Instead of reviewing diffs in a web UI, pull the branch locally, soft-reset to the base, then navigate through the diff using magit. Use the git staging area to mark files you&amp;rsquo;ve reviewed—treating the review process like authoring the code yourself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clockless Time Tracking&lt;/strong&gt;: Rather than injecting a &lt;code&gt;Clock&lt;/code&gt; dependency, push time into the system at fixed cadence via a &lt;code&gt;tick&lt;/code&gt; method. For single-instant needs, use Call Site Dependency Injection by passing &lt;code&gt;now: Instant&lt;/code&gt; directly to methods.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write Last, Read First&lt;/strong&gt;: When dealing with systems of record (source of truth) and systems of reference (derived data), write to the system of reference first, then write to the system of record last. Read in reverse order. This maintains application-level consistency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function Shape Matters&lt;/strong&gt;: Functions should have an &amp;ldquo;inverted hourglass&amp;rdquo; shape—large implementations relative to their interfaces. Hourglass-shaped functions (small body, large interface) are a code smell. The 100-column limit exists so you can fit two files side-by-side on modern displays. Functions should fit on a screen (~60-70 lines).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tigerbeetle.com/blog/2025-08-04-code-review-can-be-better"&gt;Code Review Can Be Better&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tigerbeetle.com/blog/2025-10-21-clockless-time"&gt;Clockless Time&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tigerbeetle.com/blog/2025-11-06-the-write-last-read-first-rule"&gt;Write Last, Read First&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://matklad.github.io/2025/11/28/size-matters.html"&gt;Size Matters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="self-consistency-over-self-discipline"&gt;Self-Consistency Over Self-Discipline&lt;/h2&gt;
&lt;p&gt;An essay on achieving a good life without rigid self-discipline (&amp;ldquo;谈谈不自律的良好生活&amp;rdquo;) resonated with me this week. The author argues for balance over brute-force willpower.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Balanced Love&lt;/strong&gt;: Drawing from Fromm&amp;rsquo;s &lt;em&gt;The Art of Loving&lt;/em&gt;, healthy self-regard requires combining unconditional and conditional love. Pure unconditional love becomes indulgence; pure conditional love becomes self-attack.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Understanding Over Judgment&lt;/strong&gt;: When you break a diet for your favorite ice cream, the productive response isn&amp;rsquo;t self-criticism—it&amp;rsquo;s understanding &lt;em&gt;why&lt;/em&gt; you acted that way. Change requires awareness, care, creativity, and patience rather than pure constraint.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Goals as Direction&lt;/strong&gt;: Goals shouldn&amp;rsquo;t be used to judge or lock down your future. A proper goal is merely a direction—like pointing at a distant peak and saying &amp;ldquo;I want to go there.&amp;rdquo; This supports &lt;a href="https://www.youtube.com/watch?v=aAk9zvROJFk"&gt;Don&amp;rsquo;t Set a Goal For 2026 Until You Watch This&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Life&amp;rsquo;s Balance&lt;/strong&gt;: Abstract learning (philosophy) without grounding becomes detached from life&amp;rsquo;s simple pleasures. All socializing without solitude leaves no room for reflection and creativity. Life needs all five flavors, both meat and vegetables.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://sspai.com/post/103819"&gt;谈谈不自律的良好生活&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="effective-reading-strategies"&gt;Effective Reading Strategies&lt;/h2&gt;
&lt;p&gt;A practical guide on retaining what you read offered some actionable techniques worth implementing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Preview First&lt;/strong&gt;: Spend 5-10 minutes per chapter skimming the table of contents, headings, introduction, and summary before diving into details. This builds a mental scaffold.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Question-Driven Reading&lt;/strong&gt;: Before reading a section, convert the heading into a question (e.g., &amp;ldquo;What is X?&amp;rdquo;) and read to find the answer. This active approach improves engagement and retention.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concise Personal Notes&lt;/strong&gt;: Rather than transcribing passages verbatim, write brief paraphrases or bullet points in your own words. The act of reformulation strengthens memory.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://readwise-assets.s3.amazonaws.com/media/wisereads/articles/how-to-remember-everything-you/1031.pdf"&gt;How to Remember Everything You Read&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="obsidian-links"&gt;Obsidian Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Alexey&amp;#43;Kladov&amp;#43;-&amp;#43;Code&amp;#43;Review&amp;#43;Can&amp;#43;Be&amp;#43;Better&amp;#43;%28Highlights%29"&gt;Alexey Kladov - Code Review Can Be Better (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Alexey&amp;#43;Kladov&amp;#43;-&amp;#43;Tracking&amp;#43;Time&amp;#43;Without&amp;#43;Clock&amp;#43;%28Highlights%29"&gt;Alexey Kladov - Tracking Time Without Clock (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Dominik&amp;#43;Tornow&amp;#43;-&amp;#43;The&amp;#43;Write&amp;#43;Last%2C&amp;#43;Read&amp;#43;First&amp;#43;Rule&amp;#43;%28Highlights%29"&gt;Dominik Tornow - The Write Last, Read First Rule (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Alex&amp;#43;Kladov&amp;#43;-&amp;#43;Size&amp;#43;Matters&amp;#43;%28Highlights%29"&gt;Alex Kladov - Size Matters (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Sylvan&amp;#43;Wang&amp;#43;-&amp;#43;%E8%B0%88%E8%B0%88%E4%B8%8D%E8%87%AA%E5%BE%8B%E7%9A%84%E8%89%AF%E5%A5%BD%E7%94%9F%E6%B4%BB&amp;#43;%28Highlights%29"&gt;Sylvan Wang - 谈谈不自律的良好生活 (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kb.iany.me/robot/Readwise&amp;#43;Library/Articles/Polymath&amp;#43;Investor&amp;#43;-&amp;#43;How&amp;#43;to&amp;#43;Remember&amp;#43;Everything&amp;#43;You&amp;#43;Read&amp;#43;%28Highlights%29"&gt;Polymath Investor - How to Remember Everything You Read (Highlights)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category domain="https://blog.iany.me/journal/">Journals</category><category domain="https://blog.iany.me/series/what-i-touched/">What I Touched</category><category domain="https://blog.iany.me/tags/ai-generated/">Ai Generated</category></item></channel></rss>