<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>TMFNK: The Mind for Navigating Knowledge</title><link>https://www.tmfnk.com/</link><description>Latest content from TMFNK</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 23 Jul 2026 14:04:19 +0000</lastBuildDate><atom:link href="https://www.tmfnk.com/feed.xml" rel="self" type="application/rss+xml"/><item><title>Who's Afraid of Chinese AI Models? Ben Thompson Maps the Commodity Math</title><link>https://www.tmfnk.com/read/articles/whos-afraid-of-chinese-models-stratechery/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/whos-afraid-of-chinese-models-stratechery/</guid><description>Ben Thompson on why Chinese open-weight models like Kimi K3 are not an economic threat. The commodity markets, the distillation paradox, and the cybersecurity irony that makes US policy self-defeating.</description><content:encoded><![CDATA[
<p>Ben Thompson&rsquo;s <a href="https://stratechery.com/2026/whos-afraid-of-chinese-models/" target="_blank" rel="noopener">Who&rsquo;s Afraid of Chinese Models?</a> is a response to the panic that followed the release of Kimi K3 and Qwen3.8 Max; two Chinese open-weight models approaching frontier capability. Thompson argues the economic panic is overblown, the distillation panic is a policy failure, and the cybersecurity angle is genuinely frightening. Here is my read on his argument.</p>
<ol>
<li>
<p>Open-weight models are free to download but not free to serve. Thompson draws a clean line between R&amp;D (fixed cost) and COGS (variable cost). Kimi K3 costs $3/M input tokens and $15/M output tokens. Cheaper than Sol ($5/$30), but not free. The mistake people make is conflating &ldquo;open weights&rdquo; with &ldquo;zero marginal cost&rdquo;, because software&rsquo;s old promise does not apply when every inference burns compute.</p>
</li>
<li>
<p>Intelligence is becoming a commodity, and commodity markets have brutal math. If intelligence is fungible (the right answer from Kimi is the same as the right answer from Sol), then the market-clearing price settles at the marginal cost of the highest-cost supplier who still has to sell. The provider with the best cost structure captures all the profit; the marginal one goes bankrupt. Thompson walks through a textbook commodity example with three suppliers at $10, $15, and $20 per unit. This is his strongest analytical move: it reframes the whole panic around cost structure rather than capability.</p>
</li>
<li>
<p>The price umbrella protects frontier labs for now. Anthropic and OpenAI are supply-constrained by compute, so they charge far more than they would if they could serve everyone. Thompson argues that once the compute shortage eases, the frontier labs can drop prices and still thrive. But inference demand (especially from agents) will grow far faster than training costs. I buy the argument but note the timeline uncertainty: if Chinese models close the gap before the compute constraint lifts, the price umbrella collapses earlier.</p>
</li>
<li>
<p>The distillation paradox is the article&rsquo;s most interesting idea. Chinese labs distill frontier models by querying their APIs. This is a practice the frontier labs want to block. But Thompson asks: why is distillation bad? Frontier labs themselves scraped the open internet to build their models. Distillation is just the same process applied recursively. His proposed solution: the US should legalize distillation and ban terms of service that forbid it, instead of trying to enforce the unenforceable.</p>
</li>
<li>
<p>The cybersecurity irony is genuinely alarming. Hugging Face was breached by an autonomous AI agent. Their security team could not use US frontier models to investigate because Trump administration restrictions blocked them. So they turned to GLM 5.2 (an open model from China&rsquo;s Z.ai lab), to analyze the attack. Thompson&rsquo;s conclusion: &ldquo;the best alternative is using models from a country which has been trying to weaken our cyber defenses for years. This is insane!&rdquo; He is right. The administration&rsquo;s panicked response to Fable has left US defenders dependent on China for their own security.</p>
</li>
<li>
<p>China&rsquo;s strategy is to commoditize its complements. Xi Jinping gave a speech explicitly tying openness to AI moving into the physical world. He said the world China dominates through robotics and manufacturing. Thompson frames this as classic complements theory: make the AI layer cheap and abundant so China&rsquo;s manufacturing and robotics advantages become more valuable. It is the same playbook China ran with solar panels and batteries, and it worked both times.</p>
</li>
<li>
<p>The US open-weight ecosystem is structurally disadvantaged. Dean Meyer and Konstantine Buhler (quoted in the article) explain that US open-weight model makers must follow frontier labs&rsquo; terms of service, so they end up distilling the distillation; running Chinese models to bootstrap their own. The gap compounds. Western open model makers are not on a level playing field with Chinese labs, and the situation worsens with every frontier release.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Thompson defuses the capability panic convincingly. Chinese models are not an economic threat to the frontier labs because commodity market math favors the lowest-cost producer, and the frontier labs have structural cost advantages. But the distillation paradox and the cybersecurity irony are genuine policy failures. The US is losing the open-ecosystem game to China not because of capability but because of self-imposed restrictions. This is fixable with a law that legalizes distillation and reopens model access to defenders.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/situational-awareness-leopold-aschenbrenner/" >Situational Awareness: Leopold Aschenbrenner&rsquo;s Map of the Decade Ahead</a></strong> Aschenbrenner makes the opposite case; that the US-China AI race is existential and China is a genuine national security threat. Reading them together is the most productive tension on the site.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/the-rise-of-computer-use-and-agentic-coworkers/" >The Rise of Computer Use and Agentic Coworkers</a></strong> Covers the same inference explosion Thompson predicts will make volume up for lower prices; the agent paradigm that transforms the economics.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/dwarkesh-podcast-leopold-aschenbrenner-2027-agi/" >Leopold Aschenbrenner: 2027 AGI, the China/US Super-Intelligence Race</a></strong> The podcast version of the Situational Awareness thesis, where Aschenbrenner lays out the security case Thompson is pushing back against.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/mad-podcast-dylan-patel-nvidia/" >Dylan Patel on NVIDIA&rsquo;s New Moat &amp; Why China is &lsquo;Semiconductor Pilled&rsquo;</a></strong> Deep dive on the compute supply constraints that underpin Thompson&rsquo;s entire price-umbrella argument.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/2025-nvidia-gtc-keynote-pregame/" >NVIDIA GTC Washington, D.C. Keynote Pregame</a></strong> The token-factory framing Thompson builds on; Jensen Huang&rsquo;s argument that tokens are the new commodity, from the keynote that started the frame.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/ai-superpowers/" >AI Superpowers: China, Silicon Valley, and the New World Order</a></strong> The foundational book on China&rsquo;s AI strategy, now several years old but still the best reference for understanding Xi&rsquo;s commoditize-complements playbook.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Web Swing Through Midtown NYC</title><link>https://www.tmfnk.com/enjoy/games/web-swing-midtown-nyc/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/enjoy/games/web-swing-midtown-nyc/</guid><description>A browser game that captures the one good thing about Spider-Man movies, the swinging, in a voxel Manhattan you can cross in under a minute.</description><content:encoded><![CDATA[

<h2>🎮 Web Swing Through Midtown NYC
    </h2><p>Browser. <a href="https://swingnyc.com" target="_blank" rel="noopener">Play it here</a>.</p>
<p>I found this through a short clip of someone swinging past a voxel Empire State Building and thought, that is the whole Spider-Man movie in one loop.</p>
<ol>
<li>
<p>Hold left mouse and you shoot a web. Drag back and you swing — pendulum physics, no rubber-banding, no invisible walls. The release timing is everything. Let go at the bottom of the arc and you barely move. Release at the top and you launch across three blocks.</p>
</li>
<li>
<p>Hold space on the ground and release — you rocket straight up. Pair that with a web swing at the peak and you clear half of Midtown in one arc. Street-level stroll becomes rooftop-to-rooftop race.</p>
</li>
<li>
<p>The voxel Manhattan gets the scale right. Buildings are chunky blocks, the streets run straight grids, and the landmarks (Empire State, Chrysler) are distinct from the rest. It&rsquo;s not photorealistic. It&rsquo;s readable. You always know where you are, which matters when you&rsquo;re 40 stories up and looking for a ledge.</p>
</li>
<li>
<p>The honest caveat: there&rsquo;s no objective. No enemies, no timer, no collectibles. You swing, you land, you swing again. For me that&rsquo;s the point, 90 seconds of pure traversal with no interruption. For anyone who needs a goal, this will feel empty.</p>
</li>
</ol>
<p><strong>Play it if:</strong> you want to feel the Spider-Man 2 (2004) web-swinging in your browser with zero friction. <strong>Skip it if:</strong> you need progression, a score, or anything else to do besides swing.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/mooncraft/" >Mooncraft: A Lunar Trucking Sim Built in Plain JavaScript</a></strong> Another browser game that nails a single physics loop and trusts you to enjoy it.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/starfling/" >Starfling: Tap, Release, Sling Between Stars</a></strong> Same core mechanic (hold, release, fly) but in space instead of Midtown.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/tinywind/" >TinyWind: Pixel Pirate Sailing in Your Browser</a></strong> Motion-through-physics browser game with a similar &ldquo;one button to move through a beautiful space&rdquo; feeling.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Unlimited-OCR: Parse 100-Page PDFs as One Continuous Document</title><link>https://www.tmfnk.com/use/tools/unlimited-ocr/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/unlimited-ocr/</guid><description>Baidu's 3B OCR model uses R-SWA to read dozens of pages as a single sequence, keeping VRAM flat no matter how thick the document.</description><content:encoded><![CDATA[

<h2>Unlimited-OCR
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A 3B-parameter OCR model that parses multi-page documents as one continuous whole</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Linux, macOS, Windows (NVIDIA GPU required)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, open source (MIT)</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://github.com/baidu/Unlimited-OCR" target="_blank" rel="noopener">github.com/baidu/Unlimited-OCR</a></td>
      </tr>
  </tbody>
</table>
<p>Traditional OCR has a blind spot: it chops documents page by page. Tables that span two pages get sliced in half. Reading order breaks between pages. Headers and footers leak into the content stream. You&rsquo;ve either manually stitched pages back together or paid for OCR SaaS that handles it server-side.</p>
<p>Unlimited-OCR solves this at the model level. It uses a mechanism called R-SWA (Recurrent Sliding Window Attention) to parse dozens of pages as a single sequence, with a constant KV cache during decoding; no matter how thick the document, VRAM usage stays flat.</p>
<ol>
<li>
<p>R-SWA is the key insight. Standard attention scales quadratically with sequence length, which is why every other OCR tool caps you at a page or two. R-SWA slides a fixed-size attention window across the document while maintaining a recurrent state, so a 100-page PDF costs the same VRAM as a 2-page one. The KV cache remains constant during autoregressive decoding.</p>
</li>
<li>
<p>The model is 3B parameters and runs on a single consumer GPU. You don&rsquo;t need an A100 cluster. I ran it on a 24GB RTX 4090 and parsed a 47-page academic paper in one shot. It preserved tables, footnotes, multi-column layout, all in correct reading order. The output was a single clean markdown block instead of 47 separate chunks to reassemble.</p>
</li>
<li>
<p>It handles everything traditional OCR chokes on. Page-spanning tables, mixed columns, footnotes that reference content on different pages, documents where the reading order jumps across page boundaries. Because the model sees the whole document context, it understands that a table row that starts on page 3 and finishes on page 4 belongs together.</p>
</li>
<li>
<p>The honest caveat: you need an NVIDIA GPU with at least 8GB VRAM, and the first inference is slow because the model weights (roughly 6GB) need to load. Inference speed is about 1-2 seconds per page on a 4090. It also currently supports document OCR only; it&rsquo;s not a general scene-text reader.</p>
</li>
</ol>
<p><strong>Worth your time if:</strong> you regularly OCR multi-page PDFs (papers, contracts, scans) and are tired of manually stitching page outputs or paying per-page SaaS fees.</p>
<h2>Install &amp; first run
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install torch torchvision transformers Pillow pymupdf einops</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Run inference on a single image:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">transformers</span> <span class="kn">import</span> <span class="n">AutoModel</span><span class="p">,</span> <span class="n">AutoTokenizer</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">model</span> <span class="o">=</span> <span class="n">AutoModel</span><span class="o">.</span><span class="n">from_pretrained</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;baidu/Unlimited-OCR&#39;</span><span class="p">,</span> <span class="n">trust_remote_code</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">torch_dtype</span><span class="o">=</span><span class="n">torch</span><span class="o">.</span><span class="n">bfloat16</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span><span class="o">.</span><span class="n">eval</span><span class="p">()</span><span class="o">.</span><span class="n">cuda</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">tokenizer</span> <span class="o">=</span> <span class="n">AutoTokenizer</span><span class="o">.</span><span class="n">from_pretrained</span><span class="p">(</span><span class="s1">&#39;baidu/Unlimited-OCR&#39;</span><span class="p">,</span> <span class="n">trust_remote_code</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">model</span><span class="o">.</span><span class="n">infer</span><span class="p">(</span><span class="n">tokenizer</span><span class="p">,</span> <span class="n">prompt</span><span class="o">=</span><span class="s1">&#39;&lt;image&gt;document parsing.&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">image_file</span><span class="o">=</span><span class="s1">&#39;your_image.jpg&#39;</span><span class="p">,</span> <span class="n">output_path</span><span class="o">=</span><span class="s1">&#39;./output&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="n">base_size</span><span class="o">=</span><span class="mi">1024</span><span class="p">,</span> <span class="n">image_size</span><span class="o">=</span><span class="mi">640</span><span class="p">,</span> <span class="n">crop_mode</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>For PDFs, convert pages to images with PyMuPDF and use <code>infer_multi</code>:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">fitz</span>
</span></span><span class="line"><span class="cl"><span class="n">doc</span> <span class="o">=</span> <span class="n">fitz</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s1">&#39;your_doc.pdf&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">page</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">doc</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">page</span><span class="o">.</span><span class="n">get_pixmap</span><span class="p">(</span><span class="n">matrix</span><span class="o">=</span><span class="n">fitz</span><span class="o">.</span><span class="n">Matrix</span><span class="p">(</span><span class="mi">300</span><span class="o">/</span><span class="mi">72</span><span class="p">,</span> <span class="mi">300</span><span class="o">/</span><span class="mi">72</span><span class="p">))</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;page_</span><span class="si">{</span><span class="n">i</span><span class="si">:</span><span class="s1">04d</span><span class="si">}</span><span class="s1">.png&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">model</span><span class="o">.</span><span class="n">infer_multi</span><span class="p">(</span><span class="n">tokenizer</span><span class="p">,</span> <span class="n">prompt</span><span class="o">=</span><span class="s1">&#39;&lt;image&gt;Multi page parsing.&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                  <span class="n">image_files</span><span class="o">=</span><span class="p">[</span><span class="sa">f</span><span class="s1">&#39;page_</span><span class="si">{</span><span class="n">i</span><span class="si">:</span><span class="s1">04d</span><span class="si">}</span><span class="s1">.png&#39;</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">doc</span><span class="p">))],</span>
</span></span><span class="line"><span class="cl">                  <span class="n">output_path</span><span class="o">=</span><span class="s1">&#39;./output&#39;</span><span class="p">,</span> <span class="n">image_size</span><span class="o">=</span><span class="mi">1024</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="mi">32768</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>The model also supports vLLM and SGLang for production deployments. See the GitHub README for server setup, Docker images, and batch inference scripts.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/docling/" >Document OCR &amp; Parsing: Docling, dots.ocr, and Alternatives</a></strong> The previous generation of open-source OCR tools; Docling is useful for single-page work but none stitch multi-page documents the way Unlimited-OCR does.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/liteparse/" >LiteParse: Fast Local PDF Parsing with OCR and Bounding Boxes</a></strong> Another local PDF parser with OCR, useful when you need bounding box coordinates alongside extracted text.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/scribeocr-free-web-app-for-ocr/" >ScribeOCR: Best Free Web App for OCR, Text Recognition &amp; Document Digitization</a></strong> A free web OCR option that requires no local GPU; simpler setup, but no multi-page context.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Uncovered: Judge a Book by Its First Page, Not Its Cover</title><link>https://www.tmfnk.com/use/tools/uncovered-ink/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/uncovered-ink/</guid><description>A free web tool that shows you book openings with the cover, title, and author hidden. Read blind, decide by taste, then reveal.</description><content:encoded><![CDATA[

<h2>🛠️ Uncovered
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A web tool that shows you book openings with the cover, title, and author hidden, so you judge the writing alone</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web (any browser, including mobile)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, no account needed</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://uncovered.ink/" target="_blank" rel="noopener">uncovered.ink</a></td>
      </tr>
  </tbody>
</table>
<p>I have bought too many books because the cover was good, the blurb was tight, and the first chapter turned out to be a slog. Uncovered solves exactly this problem by removing everything except the writing.</p>
<p>You open the site, and you get the first page of a real book. No cover, no title, no author name. Just text. If it grabs you, you read on. If it does not, you swipe to the next. Only after you decide do you reveal what the book was.</p>
<ol>
<li>
<p><strong>Reading blind changes the calculation.</strong> Without a cover signaling genre or a blurb selling the premise, you react to the prose itself. I found myself engaged by openings I would have scrolled past on a bookstore table, and bored by openings from authors I normally like. The blind format exposes how much of book buying is habit, not taste.</p>
</li>
<li>
<p><strong>Over 1,500 openings across every genre.</strong> Literary fiction, thrillers, romance, fantasy, sci-fi. The selection is curated for strong writing, not popularity. Nothing is paid or sponsored. No publisher can buy a placement. That constraint is what keeps the feed honest.</p>
</li>
<li>
<p><strong>The reveal is the payoff.</strong> After you read and decide, you tap to uncover the book. Seeing the cover and title after the fact, when you already know whether the writing works for you, reframes how you look at jacket design. Some of my favorite discoveries were books with covers I would have walked past.</p>
</li>
<li>
<p><strong>No account to start, email to save.</strong> The site works instantly. Start reading in one click. If you want to keep your shelf of saved books across sessions, you optionally add your email. That is it. One email a week with new openings matched to what you saved.</p>
</li>
<li>
<p><strong>Links to bookshops, not just warehouses.</strong> Every reveal links to Bookshop.org, which supports independent bookstores, or your local library. The site was built by Nathaniel Peters as an honest alternative to algorithm-driven discovery, and the ethos carries through to where it sends you to buy.</p>
</li>
</ol>
<h2>What to know
    </h2><p>Uncovered is not a recommendation engine. There are no ratings, no reviews, no social feed. It is just openings and your reaction. That simplicity is the point. For the authors who prefer not to have excerpts shown, the site removes them within 24 hours on request.</p>
<h2>Worth your time if
    </h2><p>You are tired of buying books that look great and read flat, or you want to discover writers you would never find through bestseller lists.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/books/how-to-read-a-book-by-mortimer-j-adler-and-charles-van-doren/" >How to Read a Book</a></strong> The classic framework for active reading, from inspectional to syntopical. Uncovered gives you a reason to practice it.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/readkinetic-speed-reader/" >ReadKinetic</a></strong> A free local-first speed reader for the books you discover and buy.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/where-to-find-free-books-online/" >Best Free Books Online</a></strong> Where to track down the books Uncovered points you toward, from Project Gutenberg to Archive.org.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>TV Explorer: 10,000 Live TV Channels from Around the World</title><link>https://www.tmfnk.com/use/tools/tv-explorer/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/tv-explorer/</guid><description>A free, browser-based live TV player with 10,000+ channels from dozens of countries. No signup, no apps, no tracking.</description><content:encoded><![CDATA[

<h2>🛠️ TV Explorer
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A browser-based live TV player with 10,000+ free channels from around the world</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web (any browser)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://tvexplorer.live/" target="_blank" rel="noopener">tvexplorer.live</a></td>
      </tr>
  </tbody>
</table>
<p>I found this while looking for something specific, then spent an hour just clicking through foreign TV channels instead of doing what I originally sat down to do. It does that.</p>
<p>TV Explorer is a single-page web app that pulls from the <a href="https://github.com/iptv-org/iptv" target="_blank" rel="noopener">iptv-org/iptv</a> open-source database, giving you a searchable grid of 10,000+ live channels sorted by country, language, and category. No account, no app install, no ads.</p>
<ol>
<li>
<p><strong>The channel selection is absurd.</strong> 10,000+ channels from dozens of countries across news, sports, movies, music, kids, documentaries, and more. I watched a Bulgarian news broadcast, then a Korean music show, then some kind of German shopping channel where a man was enthusiastically selling kitchen knives. It is a genuinely weird and wonderful way to spend 20 minutes.</p>
</li>
<li>
<p><strong>No signup or tracking.</strong> Open the site, pick a channel, it plays. That is the whole flow. No email, no cookie banner, no &ldquo;create a free account to continue watching.&rdquo; The site is built on the <a href="https://watsonengine.io" target="_blank" rel="noopener">Watson Engine</a> by David Bethune, and the privacy posture is refreshing. It does not collect, store, or share anything about you or what you watch.</p>
</li>
<li>
<p><strong>The filters actually work well.</strong> Three dropdowns (Category, Country, Language), combine together cleanly. Want Thai-language sports channels? French news? Indonesian music TV? Each filter narrows instantly with no page reload. There is also a live search field that filters by channel name as you type.</p>
</li>
<li>
<p><strong>Status lights save time.</strong> Each channel has a gray/green/red indicator: gray means untuned, green means it played successfully, red means it failed. Not all channels are 24/7, so a red light does not necessarily mean the channel is gone forever. But the green ones reliably work, which is the main thing you need to know.</p>
</li>
<li>
<p><strong>Multiview mode is fun.</strong> Click the TV icon on any channel row to add it to a multiview layout. Three or more channels show a large featured player plus a strip of smaller thumbnails. It is genuinely useful for monitoring multiple news feeds or just feeling like you are in a spy movie.</p>
</li>
</ol>
<h2>What to know
    </h2><p>The channels are free-to-air streams made publicly available by broadcasters. Some are geographically restricted. A US news channel might not play from Europe, and vice versa. This is not the site&rsquo;s doing; it is the broadcaster&rsquo;s region locking. If a channel does not load, that is usually why.</p>
<p>The database comes from a community-maintained GitHub project, so channel availability changes over time. Green channels today might go dark next month. That is the nature of free IPTV.</p>
<h2>Worth your time if
    </h2><p>You want to browse international TV without signing up for anything, or you need a quick way to monitor live news from multiple countries at once.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/channel-surfer/" >Channel Surfer</a></strong> A different take on channel flipping; wraps YouTube into a retro cable TV guide.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/max-video-downloader/" >MAX Video Downloader</a></strong> For when you want to record live streams rather than just watch them.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/weatherstar-4000/" >WeatherStar 4000+</a></strong> Another browser-based TV experience, this one recreating the 90s Weather Channel.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>The Price of Happiness: Money's Exponential Math That Most People Get Wrong</title><link>https://www.tmfnk.com/read/articles/price-of-happiness-money-log-income/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/price-of-happiness-money-log-income/</guid><description>Killingsworth's research shows happiness rises linearly with log(income); meaning a 10% raise matters the same at every level, but giving to the poor is exponentially more impactful.</description><content:encoded><![CDATA[
<p>Matthew Killingsworth published a paper titled <em>The Price of Happiness</em> that resolves a persistent confusion in the money-and-happiness literature. The short version: money and happiness follow logarithmic math, and most people (including researchers), draw the wrong conclusions from it. The full paper is at <a href="https://happiness-science.org/price-of-happiness/" target="_blank" rel="noopener">happiness-science.org/price-of-happiness</a>.</p>
<ol>
<li>
<p>Happiness and the logarithm of income are correlated at r = 0.98–0.99 from $10,000/year to $500,000/year and beyond. This covers experienced happiness (real-time mood sampled via phone notifications) and life satisfaction. It is the most systematic relationship I&rsquo;ve seen in any social science dataset. There&rsquo;s virtually no variance left to explain at the group level after log(income).</p>
</li>
<li>
<p>This means the marginal value of a dollar declines exponentially. An extra $10,000 matters far more to someone earning $25,000 than someone earning $200,000. Plot happiness against raw dollars and you get the familiar concave curve that looks like it plateaus. But a logarithmic relationship never plateaus. If you plot happiness against log(income), it just keeps climbing at a decelerating rate.</p>
</li>
<li>
<p>The counterintuitive flip: proportional differences matter equally at every level. A 10% raise is associated with the same happiness difference whether you earn $30,000 or $300,000. This follows directly from log math, because log(1.1 × X) = log(1.1) + log(X). The constant term doesn&rsquo;t depend on X.</p>
</li>
<li>
<p>Real-world incomes vary exponentially, not linearly. The difference between the 10th and 20th percentile earner is a few thousand dollars. The difference between the 80th and 90th percentile is tens or hundreds of thousands. This means each step up the actual income ladder delivers roughly the same happiness increment. Killingsworth shows income quantile correlates with happiness at r = 0.96, so no log transform needed.</p>
</li>
<li>
<p>The tension appears when you switch from individual to collective perspective. For your own career, each step up pays exponentially more dollars but delivers constant happiness gains. This is a reasonable trade-off. But for philanthropy, compensation policy, or tax decisions, the exponential math bites hard. A dollar taken from someone earning $73,000 and given to someone earning $2/day generates an estimated 10,000% ROI for collective happiness. A billionaire giving 10% of their income to double the incomes of people earning $2/day would generate roughly 90,000,000% return in happiness terms.</p>
</li>
<li>
<p>This geometry may explain why income inequality persists. If climbing the ladder feels worthwhile at every rung (constant happiness increment per step), people keep climbing. But since each rung costs exponentially more dollars, the successful capture of those dollars by a few concentrates wealth. Individual rationality (keep climbing) and collective optimality (spread the gains) diverge.</p>
</li>
<li>
<p>The same math explains why happiness in the US has stagnated despite GDP growth. Income growth has concentrated at the top, where additional dollars have the smallest per-dollar impact on happiness. The people who would benefit most from extra income (the bottom of the distribution), have seen the slowest real growth. If growth is going to be unequal, the optimal distribution for collective happiness is the opposite of what&rsquo;s happened.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> When thinking about your own income, think proportionally, because a 10% raise matters about the same no matter where you are. When thinking about other people&rsquo;s money (philanthropy, policy, compensation), think exponentially. Giving the same dollar generates radically different happiness depending on who receives it.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/stanford-ai-index-2026/" >Stanford AI Index 2026: Key Takeaways from the State of AI</a></strong> Another data-rich report with policy implications, covering a different dimension of how resources concentrate.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>The Castle Map: 3,708 Fortresses, One Open-Data Atlas</title><link>https://www.tmfnk.com/read/articles/the-castle-map/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/the-castle-map/</guid><description>An interactive night map of every significant castle, fortress, and palace on Earth. The map features 3,708 landmarks across 131 countries, curated from open data and free to download.</description><content:encoded><![CDATA[
<p><a href="https://thecastlemap.com/" target="_blank" rel="noopener">The Castle Map</a> is exactly what it sounds like: a night-mode interactive map with 3,708 of the world&rsquo;s great castles, fortresses, and palaces plotted across 131 countries. Click any point and you get a photo, founding century, and quick facts. Open the landmark&rsquo;s page for coordinates and the full story.</p>
<ol>
<li>
<p>The dataset is built entirely from open data: Wikidata for facts and coordinates, Wikimedia Commons for photos, Wikipedia for stories, OpenFreeMap and Natural Earth for the basemap. Every landmark has a real photo, a Wikipedia article, and exact coordinates. This is the curation bar: if it doesn&rsquo;t have all three, it doesn&rsquo;t make the cut.</p>
</li>
<li>
<p>The breakdown: 1,713 castles, 554 fortresses, 759 palaces and châteaux, and 682 ruins. Italy leads with 294, followed by France (276), Germany (253), Spain (180), Poland (163), and England (160). The atlas explicitly balances across countries so the map stays explorable. If if it plotted every fortification in Europe alone, you&rsquo;d see nothing but dots in Germany.</p>
</li>
<li>
<p>Each castle has a fame score based on its Wikipedia sitelink count, or how many language editions cover it. Palace of Versailles ranks #1, followed by the Forbidden City, Château de Montsoreau, the Acropolis, the Kremlin, and the Alhambra. It&rsquo;s a clean proxy for global renown, and the ranking is published in full with the methodology explained.</p>
</li>
<li>
<p>You can download the complete dataset as GeoJSON or CSV (CC0). Someone who wants to build a castle-visiting app, overlay the data on their own map, or run statistics on castle density by country can do it in one click. The dataset is the product as much as the map itself.</p>
</li>
<li>
<p>Missing a castle you know? The map refreshes from Wikidata. Improve the Wikidata entry with exact coordinates, a Commons photo, and a Wikipedia article in any of the dozen languages the atlas reads, and it becomes eligible for the next refresh. Your edit improves every atlas built on open data, not just this one.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> This is what curated open data can do. A single person (or small team) can build a worldwide atlas that would have needed a national geographic institute a generation ago. The full dataset is free. The hard part (verifying 3,708 landmarks), is done.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/infrastructure-maps-power-grid/" >Infrastructure Maps: Four Ways to See the World&rsquo;s Power Grid</a></strong> Another curated data map of a specific category, though one you&rsquo;d rather not see in person.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/search-whole-earth/" >SearchWhole.Earth: The Digitally Resurrected Whole Earth Catalog</a></strong> Similar ethos: one person curating the world&rsquo;s interesting things into a browsable atlas.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/openglobes-space/" >OpenGlobes Space: What&rsquo;s in Space Right Now</a></strong> A different kind of map; what&rsquo;s orbiting overhead, visualized in real time.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>SongGeneration Studio: Local AI Song Generation with Full Vocal + Instrumental Tracks</title><link>https://www.tmfnk.com/use/tools/songgeneration-studio/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/songgeneration-studio/</guid><description>A polished UI for Tencent's LeVo model that generates complete songs with vocals, lyrics, and instrumental stems. Runs locally on your GPU.</description><content:encoded><![CDATA[

<h2>SongGeneration Studio
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A local AI song generator with full vocal + instrumental output and a clean web UI</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Windows, macOS, Linux (NVIDIA GPU with 10GB+ VRAM)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, open source</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://github.com/BazedFrog/SongGeneration-Studio" target="_blank" rel="noopener">github.com/BazedFrog/SongGeneration-Studio</a></td>
      </tr>
  </tbody>
</table>
<p>Most AI music tools are cloud-only: write a prompt, wait for generation, download the result. SongGeneration Studio wraps Tencent&rsquo;s LeVo model in a local web UI that gives you control over every part of the song (structure, genre, voice, stems), without sending anything to a server.</p>
<ol>
<li>
<p>You build songs section by section. Add intro, verse, chorus, bridge, outro, or instrumental blocks, drag to reorder, type lyrics for each. The model understands song structure and produces vocals that follow your arrangement. A 3-minute pop song with two verses and three choruses takes about 3-6 minutes to generate on a 24GB GPU.</p>
</li>
<li>
<p>Style control goes beyond a single genre tag. Pick from pop, rock, hip-hop, R&amp;B, electronic, jazz, metal, folk; then layer in mood (happy, sad, energetic, romantic), voice timbre (male or female with adjustable character), instruments (piano, guitar, drums, synths, strings), and BPM. Or upload a reference track and the AI clones its style.</p>
</li>
<li>
<p>You get three stems per generation: full mix, vocals only, and instrumental only. The vocal isolation is good enough for remixing or karaoke without running a separate stem splitter. Export to FLAC or MP4 video with generated cover art.</p>
</li>
<li>
<p>The honest caveat: you need a serious GPU. 10GB VRAM minimum, 24GB recommended. The model download is about 15GB. Generation time varies with song length, and very long songs (5+ minutes) can have quality drops in later sections. The vocal quality is impressive for a local model but doesn&rsquo;t match cloud services like Suno or Udio on complex arrangements.</p>
</li>
</ol>
<p><strong>Worth your time if:</strong> you want to experiment with AI song generation locally, need control over song structure and stems, and have the GPU to run it.</p>
<h2>Install &amp; first run
    </h2><p>The easiest path is via Pinokio:</p>
<ol>
<li>Open <a href="https://pinokio.computer" target="_blank" rel="noopener">Pinokio</a></li>
<li>Search for &ldquo;SongGeneration Studio&rdquo;</li>
<li>Click Install (handles dependencies and model download automatically)</li>
<li>Click Start: the web UI opens in your browser</li>
</ol>
<p>Manual install: clone the repo, run <code>pip install -r requirements.txt</code>, then <code>python main.py</code>. Models download on first launch.</p>
<p>Once the UI loads, write your lyrics in the section editor, pick genre/mood/voice in the style panel, and click generate. Progress streams in real time.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/petrichor/" >Petrichor: Native macOS Offline Music Player</a></strong> For listening to what you generate; a beautiful local music player with no cloud dependencies.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/map-of-metal/" >Map of Metal: An Interactive History of Heavy Metal Subgenres</a></strong> A different way to explore music: the genre map that shows how styles branch and evolve.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/buzz/" >Buzz: Transcribe &amp; Translate Audio Offline</a></strong> The reverse pipeline; turn generated songs back into text and see how close the transcription matches your original lyrics.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>ReadKinetic: A Free Local-First Speed Reader for Your Own Books</title><link>https://www.tmfnk.com/use/tools/readkinetic-speed-reader/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/readkinetic-speed-reader/</guid><description>An RSVP speed reader that actually reads your EPUBs and PDFs. No upload, no account, no Spreeder subscription.</description><content:encoded><![CDATA[

<h2>ReadKinetic
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>An RSVP speed reader that works with your own ebook files</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web (PWA, installs on any device)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, no account, no tracking</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://readkinetic.com" target="_blank" rel="noopener">readkinetic.com</a></td>
      </tr>
  </tbody>
</table>
<p>Speed reading tools are mostly toys. They ship demo paragraphs and maybe a paste-a-URL field, then nudge you toward a paid plan if you want to read anything real. ReadKinetic is the opposite. It reads your actual EPUBs and PDFs, free and entirely local.</p>
<ol>
<li>
<p>RSVP (Rapid Serial Visual Presentation) solves the right problem. About 30% of conventional reading time is eye movement; saccades between fixation points, regressions that re-read already-processed text, return sweeps that miss their target. RSVP flashes one word at a time in a fixed position. Your eyes never move. You&rsquo;re left with pure comprehension. I tested it on a dense EPUB and held steady at 400 WPM with better retention than my normal skim-and-backtrack cycle.</p>
</li>
<li>
<p>It reads your files, not a curated library. Drop in EPUB, PDF, TXT, DOCX, RTF, HTML, or Markdown. Everything parses client-side and stores in IndexedDB. Nothing touches a server. Close the tab, reopen it; progress saves every three seconds, right where you left off. (There are lighter alternatives too: <a href="https://tachys-d23ab0.gitlab.io/" target="_blank" rel="noopener">Tachys</a> is a bare-bones web RSVP reader for paste-and-go text, and <a href="https://github.com/0hAodha/ogma" target="_blank" rel="noopener">Ogma</a> is a Perl terminal reader with bionic mode, multiword grouping, and resume support.)</p>
</li>
<li>
<p>Sixteen themes, and they&rsquo;re not just background swaps. Cinematic dark, warm sepia, e-ink white, and the whole UI adapts. The engine has punctuation pauses (comma = brief stop, period = longer stop), a RAF-timed playback loop, bionic reading mode, focus guides, and a sleep timer. It&rsquo;s more tuned than any free speed reader I&rsquo;ve used.</p>
</li>
<li>
<p>The honest limit: RSVP is a different reading muscle. You can&rsquo;t skim, you can&rsquo;t jump back three paragraphs, you can&rsquo;t flip to the map in the front matter. For linear reading, it&rsquo;s a great tool. For novels, narrative nonfiction, papers you need to cover start-to-finish, it works. For reference books or anything you browse non-sequentially, stick to conventional reading.</p>
</li>
</ol>
<p><strong>Worth your time if:</strong> you have a backlog of EPUBs and want to try whether RSVP speed gain fixes your reading volume problem without spending money or sending files to a server.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/immersive-reading/" >Immersive Reading: Turn Dense Essays into Interactive Reading Editions</a></strong> Both tools rethink how you read, just from different angles; one speeds up the text, the other opens up the margins.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/pwa-apps/" >PWA Apps: Your Offline-First Knowledge Library</a></strong> ReadKinetic is a PWA too; this article covers the broader philosophy of local-first tools that work without internet.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>PenEcho: An Infinite AI Canvas for Handwriting, Diagrams, and Spatial Thinking</title><link>https://www.tmfnk.com/use/tools/penecho/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/penecho/</guid><description>Like Excalidraw for AI agents. Draw naturally, and PenEcho reads your marks with their spatial context, answers beside them.</description><content:encoded><![CDATA[

<h2>PenEcho
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>An infinite canvas where AI reads your handwriting, diagrams, and spatial context</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>macOS, Linux, Windows (Node.js 18.17+)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, open source (AGPL-3.0)</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://github.com/penecho/penecho" target="_blank" rel="noopener">github.com/penecho/penecho</a></td>
      </tr>
  </tbody>
</table>
<p>Chat interfaces are bad at spatial problems. To describe a diagram you need to build it in some other tool and paste a screenshot. To work through a math problem you type step by step in a linear thread. PenEcho skips all that: put a question, equation, or half-formed idea anywhere on a 20,000 x 20,000 canvas, and the AI reads your handwriting and spatial relationships right where they sit.</p>
<ol>
<li>
<p>Draw naturally with a stylus or mouse. Everything stays ink: you pan and zoom across a sparse canvas that only allocates pixels where you&rsquo;ve drawn. No page breaks, no fixed aspect ratio. Drag AI drafts directly on the canvas, resize them, copy text or formulas, then accept or discard before they become part of the work.</p>
</li>
<li>
<p>It connects to whatever you already use: Codex CLI, Claude CLI, or any OpenAI-compatible API. Configuration is a single command (<code>penecho configure</code>) that walks you through model selection and effort level. PenEcho sends the relevant canvas crop and geometry, the executor replies, and a movable draft appears next to your ink.</p>
</li>
<li>
<p>The plugin system adds live data and interactive widgets. Built-in plugins cover weather, stocks, technology news, exchange rates, earthquakes, space weather, and GitHub activity; data goes directly from your browser to the API origin, never proxied through PenEcho. The HTML plugin lets the model build focused clocks, calculators, or dashboards as sandboxed iframe widgets that stay interactive on the canvas.</p>
</li>
<li>
<p>Recommended models include Opus 4.8 (medium effort for everyday canvas work), Kimi K3 (strong for demanding diagrams), and GPT-5.6-terra (surprisingly fast and responsive). At typical usage, a request costs roughly 2-8 cents on API mode. CLI mode uses your Codex or Claude Code plan directly without API billing.</p>
</li>
<li>
<p>The honest caveat: PenEcho is young (v0.7.0). Handwriting recognition is good but not perfect; it works best with natural print or careful cursive. The CLI modes should only be exposed on a local machine or trusted LAN. If you need polished production diagramming with no model cost, Excalidraw is still the draw tool; PenEcho is for when you want the AI to understand what you drew.</p>
</li>
</ol>
<p><strong>Worth your time if:</strong> you think in diagrams, equations, or spatial sketches and want an AI that meets you on the canvas instead of forcing everything through a chat box.</p>
<h2>Install &amp; first run
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">npm install -g penecho
</span></span><span class="line"><span class="cl">penecho configure
</span></span><span class="line"><span class="cl">penecho</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Open http://localhost:3888. The configure step walks you through your LLM choice (Codex CLI, Claude CLI, or API with any OpenAI-compatible provider). Draw something anywhere on the canvas, pause, and PenEcho responds beside your ink.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Override model or effort per session</span>
</span></span><span class="line"><span class="cl">penecho --codex --model gpt-5.6-sol --effort xhigh
</span></span><span class="line"><span class="cl">penecho --claude --model opus --effort medium</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>The default config lives at <code>~/.penecho/config.env</code>. API keys are stored in plaintext there with owner-only permissions and never sent to browser code.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/html-anything/" >HTML Anything: The Agentic HTML Editor</a></strong> Another tool that takes a non-chat approach to working with AI on visual output; generate and iterate on HTML through a dedicated interface.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/plannotator/" >Plannotator: Visual Plan &amp; Code Review for AI Coding Agents</a></strong> Visual planning for AI agents, but from the code review angle rather than the spatial thinking angle.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/accomplish/" >Accomplish: Open Source AI Desktop Agent with Built-In AI</a></strong> A different take on AI interaction; desktop-native automation rather than canvas-based reasoning.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>PassiNote: A Canvas for Your Notes That Drops the Hierarchy</title><link>https://www.tmfnk.com/use/tools/passinote/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/passinote/</guid><description>A browser-based note app that replaces folder trees with a freeform canvas. Sticky notes for quick thoughts, A4 pages for long documents, PDF export in three styles, and no save button.</description><content:encoded><![CDATA[

<h2>PassiNote
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>a freeform canvas note app</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>web browser (PWA)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>free (Ko-fi supported)</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://passinote.app" target="_blank" rel="noopener">passinote.app</a></td>
      </tr>
  </tbody>
</table>
<p>I tried PassiNote because I have the same problem every note-taking power user has: the app forces me to decide where something lives before I know what it is. Folder trees assume structure exists up front. PassiNote does the opposite, drop a note anywhere on a blank canvas, stack related things, draw a zone around them, and name the zone. Structure emerges after the fact.</p>
<ol>
<li>
<p>Two input modes cover every note size. Sticky notes for quick capture (reminders, links, single thoughts) and A4-sized documents for proper writing. Drag them anywhere on the infinite canvas. No grid snapping, no folder assignment, no pre-commitment to a category.</p>
</li>
<li>
<p>Quick mode opens instantly from local storage. It is the fastest path from &ldquo;I have a thought&rdquo; to &ldquo;the thought is written down&rdquo; I have found in a browser-based note tool. No login, no loading screen, just a canvas and a cursor.</p>
</li>
<li>
<p>PDF export in three custom-designed styles. Most note apps give you one export format and it looks like you printed a web page. PassiNote ships three distinct PDF layouts; pick the one that fits where the note is going. This is the kind of polish that suggests the developer actually uses the app.</p>
</li>
<li>
<p>The visual hierarchy replaces folders entirely. Notes sit on the canvas. Stacks (groups of related notes) work like folders but stay visual. Labels name the stacks. The whole thing reads like a physical desk rather than a file system, which is exactly the right metaphor for people who think spatially.</p>
</li>
<li>
<p>Every note saves the instant you stop typing. No save button, no autosave interval, no sync conflicts. The app autosaves on every change and keeps a history so you can undo your way out of a mistake. This is the baseline all note apps should meet but most still miss.</p>
</li>
</ol>
<p><strong>The honest limitation:</strong> It is a one-person project and it shows in the edges. No mobile app yet. No search across notes. No collaboration. The canvas approach works best when you have one screen and a mouse. If you need multi-device sync, team sharing, or a mature search, this is not there yet.</p>
<h2>First run
    </h2><p>Open <a href="https://passinote.app" target="_blank" rel="noopener">passinote.app</a> in any browser. The canvas is empty. Click anywhere to drop a sticky note. Click the A4 button for a full document. Drag notes to arrange them, drag one note onto another to stack them, draw a zone to group. That is the whole onboarding.</p>
<p>Quick mode: bookmark the URL and append <code>?quick</code>, it loads from local storage with zero network requests. Open it from a bookmark or home screen shortcut for the fastest capture path.</p>
<p><strong>Worth your time if:</strong> you think in spatial layouts rather than folder hierarchies, or you want a note app that gets out of the way instead of asking you to set up a filing system first.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/bear/" >Bear: A Markdown Note-Taking App That Prioritizes Design</a></strong> The closest comparison on the site; Bear and PassiNote share the same philosophy of getting out of your way, but Bear leans on tags while PassiNote leans on spatial layout.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/pwa-apps/" >A Curated Collection of PWAs Worth Installing</a></strong> PassiNote fits the PWA pattern well: fast to load, works offline-ish (quick mode), no install friction.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/rowboat/" >Rowboat: Privacy-First AI Coworker That Knows Your Context</a></strong> A different take on the note problem; Rowboat structures notes into a knowledge graph instead of a canvas.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Moonshine Voice: On-Device Speech to Text That's Faster and More Accurate Than Whisper</title><link>https://www.tmfnk.com/use/tools/moonshine-voice/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/moonshine-voice/</guid><description>An open-source AI toolkit for real-time voice agents and applications. STT, TTS, intent recognition, and voice cloning, all on-device.</description><content:encoded><![CDATA[

<h2>🛠️ Moonshine Voice
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>An all-in-one on-device voice AI toolkit: STT, TTS, intent recognition, voice cloning, and conversational agents</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Python, iOS, Android, macOS, Linux, Windows, Raspberry Pi, microcontrollers</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free and open source (MIT)</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://github.com/moonshine-ai/moonshine" target="_blank" rel="noopener">github.com/moonshine-ai/moonshine</a></td>
      </tr>
  </tbody>
</table>
<p>I have been waiting for something like this. OpenAI&rsquo;s Whisper has been the default for open-source speech to text for years, but it was never built for live voice. Thirty-second input windows, no caching, and it struggles on anything smaller than a laptop. Moonshine fixes all of that.</p>
<p>Moonshine Voice is a from-scratch family of speech models, trained by the moonshine-ai team, that beats Whisper on accuracy while running 10x faster on a MacBook and 20x faster on a Raspberry Pi. Everything runs on-device, no API keys required.</p>
<ol>
<li>
<p><strong>Beats Whisper Large V3 with 1/6 the parameters.</strong> The Medium Streaming model gets a 6.65% word error rate on the OpenASR leaderboard versus Whisper Large V3&rsquo;s 7.44%, but uses 245 million parameters instead of 1.5 billion. That means higher accuracy that actually runs on a phone.</p>
</li>
<li>
<p><strong>Built for live speech, not batch processing.</strong> Whisper locks you into 30-second input windows with zero padding. Moonshine accepts any audio length, caches the encoder state between chunks, and streams results as speech happens. On a MacBook Pro it transcribes in 107ms versus Whisper Large V3&rsquo;s 11,286ms. On a Raspberry Pi 5, 802ms versus N/A (Whisper Large V3 simply does not run there).</p>
</li>
<li>
<p><strong>Cross-platform from day one.</strong> The core is a portable C++ library using OnnxRuntime, with native bindings for Python, Swift, Java, and C++. The same API works on iOS, Android, macOS, Windows, Linux, and even microcontrollers. You learn it once and deploy everywhere.</p>
</li>
<li>
<p><strong>Batteries included for voice agents.</strong> Beyond STT, Moonshine includes text to speech with voice cloning (ZipVoice, Kokoro, Piper), intent recognition with semantic matching, speaker diarization, and a <code>DialogFlow</code> system for building conversational agents. A complete voice agent is maybe 50 lines of Python.</p>
</li>
<li>
<p><strong>Real languages, not just English.</strong> Whisper&rsquo;s multilingual support drops off sharply for non-European languages. Moonshine trains language-specific models that get much higher accuracy at the same model size for Arabic, Japanese, Korean, Spanish, Ukrainian, Vietnamese, and Mandarin. The TTS supports 20 languages with multiple voice options each.</p>
</li>
</ol>
<h2>What to know
    </h2><p>The models need to be downloaded separately (the pip package pulls them on first use). STT models range from 34MB (Tiny) to 245MB (Medium). The library itself is MIT licensed.</p>
<p>The G2P (grapheme-to-phoneme) engine for TTS is new and still being tuned. It is a from-scratch replacement for espeak-ng to avoid GPL licensing issues on mobile platforms, so some languages have higher character error rates than the reference implementation. This will improve.</p>
<h2>Install &amp; first run
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install moonshine-voice
</span></span><span class="line"><span class="cl">moonshine-voice mic --language en</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>That is it. The first run downloads the model, then you are transcribing live microphone input.</p>
<h2>Worth your time if
    </h2><p>You are building anything with live voice input and want it to run on-device, especially if you found Whisper too slow or too large for your target hardware.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/buzz/" >Buzz</a></strong> The go-to desktop GUI for offline Whisper transcription, for when you need to process pre-recorded files rather than live audio.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/audio-kb/" >audio-kb</a></strong> An end-to-end system that records, transcribes, and indexes audio notes with semantic search.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/two-stt-tools-you-should-know/" >STT Tools You Should Know</a></strong> Three privacy-first speech-to-text alternatives for desktop, CLI, and mobile.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>LLM Visualization: Walk Through a Working GPT Model, One Matrix Multiply at a Time</title><link>https://www.tmfnk.com/use/tools/llm-visualization-bbycroft/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/llm-visualization-bbycroft/</guid><description>Brendan Bycroft's interactive 3D visualization lets you step through a real GPT model doing inference, from token to output, add by add and multiply by multiply.</description><content:encoded><![CDATA[

<h2>🛠️ LLM Visualization
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A 3D interactive walkthrough of a GPT-style LLM running real inference, visualized down to individual matrix operations</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web (requires WebGL2, best in Chrome or Firefox)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, open source</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://bbycroft.net/llm" target="_blank" rel="noopener">bbycroft.net/llm</a></td>
      </tr>
  </tbody>
</table>
<p>If you have ever looked at the Transformer diagram from &ldquo;Attention Is All You Need&rdquo; and wished you could watch the numbers actually move, this is for you.</p>
<p>Brendan Bycroft built a 3D visualization of a working GPT model, loaded with real weights from Karpathy&rsquo;s minGPT. You press Space and it steps through inference token by token, animating every embedding lookup, every attention head, every layer norm, and every matrix multiply along the way. No simplification, no hand-waving. The actual model, running in your browser.</p>
<ol>
<li>
<p><strong>It is a real model, not a diagram.</strong> The tiny GPT inside this visualization actually runs inference. Its weights sort a three-element list of letters. You can watch the input token get embedded, flow through the transformer blocks, and emerge as a prediction. The numbers are real. Every add, multiply, and softmax is computed live.</p>
</li>
<li>
<p><strong>The 3D walkthrough actually teaches you.</strong> The site is structured as a guided tour. Each component gets its own chapter with a clear 3D visualization you can orbit and zoom. Layer norm is shown as a real vector being normalized. Self-attention renders the Q, K, V matrices and highlights which tokens attend to which. The MLP shows the expansion and projection. It maps the standard transformer diagram onto real computation, showing you what the arrows actually mean.</p>
</li>
<li>
<p><strong>You control the pace.</strong> Press Space to advance one step. Pause on any operation. Rotate the view to examine which dimensions are being multiplied. The visualization updates every value as the computation progresses. There is no video to scrub through, no animation you cannot stop. You go as fast or as slow as you need.</p>
</li>
<li>
<p><strong>Multiple model sizes to explore.</strong> The default is the tiny minGPT model (easy to understand, fast to render). But you can switch to GPT-2 small, GPT-2 XL, or GPT-3 scale to see how the architecture grows. The same visualization applies at every size, which is a useful lesson in itself: the architecture scales, the principles do not change.</p>
</li>
<li>
<p><strong>Simon Willison called it &ldquo;beautifully crafted.&rdquo;</strong> He is not wrong. Clean visual design, consistent color coding, the 3D view mirrors the standard transformer diagram exactly so you always know where you are. You will wonder why nobody thought of this before.</p>
</li>
</ol>
<h2>What to know
    </h2><p>The page uses WebGL2 and can be heavy on older hardware. Chrome and Firefox work well. The tiny model renders instantly; GPT-2 and larger need to download weights. The source is on GitHub at <a href="https://github.com/bbycroft/llm-viz" target="_blank" rel="noopener">bbycroft/llm-viz</a> if you want to run it locally.</p>
<h2>Worth your time if
    </h2><p>You want to understand how a transformer actually processes a token, or you teach others about LLMs and need something better than a static diagram.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/hfviewer/" >hfviewer: Visualize Any Hugging Face Model</a></strong> A complementary tool: paste a model URL and get its architecture graph. LLM Visualization shows you the computation; hfviewer shows you the structure.</li>
<li><strong><a href="https://www.tmfnk.com/use/projects/how-to-train-your-gpt/" >How to Train Your GPT</a></strong> Build a GPT from scratch, tokenizer to inference. The visualization shows you what the code you write actually does.</li>
<li><strong><a href="https://www.tmfnk.com/use/projects/learning-how-mixture-of-experts-works/" >Learning How Mixture of Experts Works</a></strong> The next step after understanding the dense transformer: how sparse MoE layers route tokens through expert sub-networks.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Latent Space: Inside the Model Factory with Eiso Kant, Poolside AI</title><link>https://www.tmfnk.com/listen/podcasts/latent-space-eiso-kant-poolside/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/listen/podcasts/latent-space-eiso-kant-poolside/</guid><description>Poolside's co-CEO on how 70 researchers run 20,000 experiments a month, why MCP is stupid, and the $12M failure that ChatGPT vindicated.</description><content:encoded><![CDATA[
<iframe allow="autoplay *; encrypted-media *; fullscreen *; clipboard-write" frameborder="0" height="175" style="width:100%;max-width:660px;overflow:hidden;border-radius:10px;" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation" src="https://embed.podcasts.apple.com/us/podcast/inside-the-model-factory-eiso-kant-poolside-ai/id1674008350?i=1000777982857"></iframe>

<h2>Latent Space: Inside the Model Factory with Eiso Kant, Poolside AI
    </h2><p>swyx and Vibhu with Eiso Kant. Duration: 1h 54m</p>
<p><a href="https://podcasts.apple.com/us/podcast/inside-the-model-factory-eiso-kant-poolside-ai/id1674008350?i=1000777982857" target="_blank" rel="noopener">Listen on Apple</a> · <a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">Episode page</a></p>
<p><strong>Timestamps</strong>
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">0:00</a> Intro
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">0:54</a> Karpathy, RNNs, and building code models before Transformers
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">2:26</a> The $12M failure and ChatGPT vindication
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">3:39</a> Open source and the case for 100 foundation model companies
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">16:04</a> The Model Factory (90% engineering)
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">20:19</a> Agents inside the model factory
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">36:07</a> Laguna S: persistence vs. raw intelligence
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">58:37</a> Model harnesses, coding agents, and the path to AGI
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">1:09:26</a> Why MCP and traditional tool calls are &ldquo;stupid&rdquo;
<a href="https://www.latent.space/p/poolside" target="_blank" rel="noopener">1:27:37</a> Open models, AI safety, and the risk of an oligopoly</p>
<p>Eiso Kant spent four years and $12 million building language models for code before the world cared. His first company failed. Then ChatGPT happened, and suddenly everyone wanted what he&rsquo;d been working on since 2015. This is the story of what he built next: Poolside&rsquo;s Model Factory.</p>
<ol>
<li>
<p>Eiso&rsquo;s origin story starts with Andrej Karpathy&rsquo;s 2015 blog post &ldquo;The Unreasonable Effectiveness of Recurrent Neural Networks.&rdquo; He read it and pivoted his startup overnight to work on RNNs for code. &ldquo;I had built a completely unreasonable belief, that neural nets should be able to generalize to anything and everything.&rdquo; He spent four years and $12 million on this before the company failed in 2019. &ldquo;People would just laugh at us.&rdquo;</p>
</li>
<li>
<p>ChatGPT felt like vindication. People started texting him old decks and talks from his failed startup. When he co-founded Poolside, &ldquo;no one argued if these were stochastic parrots anymore.&rdquo; The market had caught up to his thesis, which meant he could finally build what he&rsquo;d always believed in without having to convince anyone it mattered.</p>
</li>
<li>
<p>&ldquo;Model building is 90% engineering.&rdquo; Poolside treats training as an industrialized process, not a science experiment. They built what they call the Model Factory with thousands of components that turn raw data into trained models, designed from day one by distributed systems engineers embedded in the research team. The metric they optimize for: speed from a researcher&rsquo;s idea to a trusted experimental result.</p>
</li>
<li>
<p>Fewer than 70 researchers run 10,000–20,000 experiments per month. Their Laguna XS 2 shipped in five weeks from start of training. Laguna S shipped in eight weeks. The next model started training the day after Laguna S launched. &ldquo;The model should be an artifact of someone&rsquo;s process it shouldn&rsquo;t be a thing in itself.&rdquo; They treat model building like a SpaceX factory where rockets roll off a production line.</p>
</li>
<li>
<p>Agents are starting to run the Model Factory. Eiso walks behind researchers&rsquo; screens and sees agents writing code, launching jobs, evaluating results, and modifying pipelines. &ldquo;You&rsquo;re starting to see these twinklings of what RSI is gonna look like.&rdquo; During the entire Laguna S training run, there were zero on-call events. The only hiccup was the first six hours of a new run when a config inevitably breaks.</p>
</li>
<li>
<p>Eiso thinks MCP and traditional tool calls are &ldquo;stupid.&rdquo; His argument: future agents will write scripts instead of choosing from dozens of predefined tools. Rather than giving an agent a catalog of API functions, give it a container and let it write whatever code it needs. Minimal harness, maximum freedom.</p>
</li>
<li>
<p>He would rather live in a world with 100 foundation model companies than 5, even if Poolside were one of the five. This is why they open-sourced Laguna S. He actively wants capable researchers to leave their labs and become his competitors. &ldquo;If we don&rsquo;t encourage more labs now, there&rsquo;s a small window before models are really impacting recursive self-improvement to a level where catching up becomes unfeasible.&rdquo;</p>
</li>
<li>
<p>Laguna S 2.1 is a 118B total parameter MoE with 8B active per token, beating models nearly 10x its size. It has a 1M token context window, thinking and no-thinking modes, and was trained from scratch in eight weeks. Poolside trains from scratch instead of distilling larger models because they believe the capability ceiling is higher when you own the whole training process.</p>
</li>
<li>
<p>Poolside raised $500 million while investors still questioned whether AGI was real. The name comes from the idea of &ldquo;refusing to lower your ambitions&rdquo;, the story goes that when faced with a impossible-looking challenge, you don&rsquo;t scale down your goal, you scale up your approach. Eiso is a &ldquo;utopian sci-fi guy&rdquo; who believes intelligence will become the world&rsquo;s most demanded and most commoditized resource.</p>
</li>
<li>
<p>Regulation could accidentally lock in an oligopoly of two or three AI companies, and unilateral AI safety doesn&rsquo;t work in a globally competitive environment. Eiso thinks open models will eventually become too capable to release without restrictions, but we&rsquo;re not there yet and the window to build a diverse ecosystem is closing fast.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/no-priors-podcast-andrej-karpathy/" >No Priors: Andrej Karpathy on Code Agents, AutoResearch, and the AI Psychosis</a></strong> The person who inspired Eiso&rsquo;s entire journey, on where code agents are heading next.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/mad-podcast-dylan-patel-nvidia/" >MAD Podcast: Dylan Patel on NVIDIA&rsquo;s New Moat &amp; Why China is &lsquo;Semiconductor Pilled&rsquo;</a></strong> The hardware side of the same story; the chips and supply chains that make Model Factories possible.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/mlst-andrew-wilson-real-reason-huge-ai-models-work/" >MLST: The Real Reason Huge AI Models Actually Work — Prof. Andrew Wilson</a></strong> The theory behind why scaling works, which Eiso&rsquo;s Model Factory operationalizes.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/all-in-demis-hassabis-deepmind-ai-creativity/" >All-In: Google DeepMind CEO Demis Hassabis on AI, Creativity, and a Golden Age of Science</a></strong> Another founder building toward AGI, from a different starting point.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>How to Turn a 3D Gaussian Splat Into a Browser App with PlayCanvas</title><link>https://www.tmfnk.com/use/tutorials/gaussian-splat-browser-playcanvas/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/gaussian-splat-browser-playcanvas/</guid><description>Capture a real location with your phone, process it into a Gaussian splat, and publish an interactive 3D viewer in the browser.</description><content:encoded><![CDATA[

<p>Gaussian Splatting turns a set of photographs into a photorealistic 3D scene you can orbit around in a browser. You&rsquo;ve seen the demos of cathedrals and museum pieces. This tutorial shows you how to do it yourself; capture, process, and publish.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>Shoot 50-200 photos of a scene from every angle (phone works)</li>
<li>Process them into a splat with a free tool (PostShot, Luma AI)</li>
<li>Edit and compress in SuperSplat, export as SOG</li>
<li>Build a web viewer with PlayCanvas Web Components (one HTML file)</li>
</ul>
<p><strong>Prerequisites:</strong> A phone or camera, a computer with a CUDA GPU (optional for cloud processing), and Node.js 18+.</p>
<h2>Step 1: Capture the scene
    </h2><p>Shoot 50-200 overlapping photos covering your subject from every angle. Move around the subject, not just in front of it. Each photo should overlap its neighbors by 60-80%. Avoid motion blur, reflections, and moving objects.</p>
<blockquote>
  <p><strong>Pro tip:</strong> Video works too. Walk slowly around your subject, then extract every Nth frame. 30 seconds of slow 4K video at 30fps yields 900 frames; extract every 5-10th frame for a good starting set.</p>
</blockquote>
<p>Outdoors with moving shadows or wind is harder. Indoors with stable lighting is easiest.</p>
<h2>Step 2: Process into a splat
    </h2><p>You need a Gaussian Splatting trainer. The easiest entry points:</p>
<ul>
<li><strong>PostShot</strong> (free desktop app, CUDA GPU required): drag in your images, click train. Outputs a <code>.ply</code> file.</li>
<li><strong>Luma AI</strong> (cloud, web-based): upload photos, wait for processing. Download the result as <code>.ply</code>.</li>
<li><strong>Nerfstudio + gsplat</strong> (open source, advanced): <code>pip install nerfstudio</code> then <code>ns-train gaussian-splatting --data ./images</code></li>
</ul>
<p>Training takes anywhere from a few minutes (small scene on a fast GPU) to a couple hours (large scene on cloud). The output is a <code>.ply</code> file with your splat data.</p>
<h2>Step 3: Edit and compress in SuperSplat
    </h2><p>Open <a href="https://superspl.at/editor" target="_blank" rel="noopener">SuperSplat Editor</a>. Drag in your <code>.ply</code> file.</p>
<ul>
<li><strong>Crop</strong>: remove unwanted regions (background, capture artifacts)</li>
<li><strong>Clean</strong>: delete floating floaters and stray splats</li>
<li><strong>Compress</strong>: export as <code>.sog</code> (PlayCanvas&rsquo;s compressed open format, typically 80-90% smaller than raw PLY)</li>
</ul>
<p>SOG is the format you&rsquo;ll serve on the web. A clean 10MB compressed splat loads faster than a raw 100MB PLY.</p>
<h2>Step 4: Publish as a web app
    </h2><p>The fastest path is PlayCanvas Web Components; a single HTML file with no build step.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="cp">&lt;!DOCTYPE html&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">head</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">script</span>
</span></span><span class="line"><span class="cl">      <span class="na">type</span><span class="o">=</span><span class="s">&#34;module&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">src</span><span class="o">=</span><span class="s">&#34;https://playcanvas.github.io/web-components/v2.3/pcui.js&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">link</span>
</span></span><span class="line"><span class="cl">      <span class="na">rel</span><span class="o">=</span><span class="s">&#34;stylesheet&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">href</span><span class="o">=</span><span class="s">&#34;https://playcanvas.github.io/web-components/v2.3/pcui.css&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">head</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">pc-app</span> <span class="na">splat-url</span><span class="o">=</span><span class="s">&#34;https://your-site.com/splat.sog&#34;</span> <span class="na">mouse-control</span><span class="o">=</span><span class="s">&#34;orbit&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">pc-gsplat</span><span class="p">&gt;&lt;/</span><span class="nt">pc-gsplat</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">pc-app</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Upload <code>index.html</code> and your <code>.sog</code> file together. Host on any static server (Cloudflare Pages, Netlify, GitHub Pages). Done! You now have an interactive 3D viewer.</p>
<p>For more control (custom UI, animations, multi-scene navigation), use the <a href="https://developer.playcanvas.com/user-manual/gaussian-splatting/building/your-first-app/engine/" target="_blank" rel="noopener">Engine API</a>; it&rsquo;s the same approach the Grace Cathedral experience uses, with WebGPU compute shaders for fast splat sorting and on-demand rendering that stops drawing when the camera stops moving.</p>
<h2>Cleanup
    </h2><p>The <code>.ply</code> file is only needed as an intermediate. Keep the SOG for production. Store your source photos in case you need to retrain.</p>
<p><strong>If it breaks:</strong></p>
<ul>
<li><strong>Shimmering or ghosting:</strong> you didn&rsquo;t capture enough angles or the lighting changed during capture. Re-shoot with more overlap.</li>
<li><strong>Splat looks flat:</strong> the trainer couldn&rsquo;t recover depth. Make sure you circled the subject fully, not just shot from one side.</li>
<li><strong>Low framerate:</strong> reduce the splat count in SuperSplat export settings or enable LOD streaming. 3.5 million splats is a desktop target; mobile should aim for 1-2 million.</li>
<li><strong>SOG doesn&rsquo;t load:</strong> verify the MIME type on your server. <code>.sog</code> should serve as <code>application/octet-stream</code>.</li>
</ul>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/depth-anything-cpp-macos/" >Install depth-anything.cpp on macOS: Local Depth Maps from One Photo</a></strong> A different approach to 3D scene understanding; depth estimation from a single image rather than multi-view reconstruction.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/map3d/" >map3d: Generate Real-World 3D City Maps from OpenStreetMap</a></strong> Not photorealistic, but lets you explore the same idea of browser-based 3D navigation from a different data source.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/build-your-own-x-from-scaffold.md" >Build Your Own X From Scratch: Redis, Databases, Compilers, and Web Servers</a></strong> The same build-it-yourself spirit, applied to infrastructure rather than 3D.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>How Cerebras Built a 15,000-Query/Day Internal Knowledge Base (and What You Can Learn From It)</title><link>https://www.tmfnk.com/use/tutorials/cerebras-knowledge-base/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/cerebras-knowledge-base/</guid><description>A detailed walkthrough of Cerebras Knowledge, the internal RAG system handling 15,000+ daily queries across Slack, code, and docs with hybrid retrieval, LLM planning, and MCP integration.</description><content:encoded><![CDATA[

<p>Cerebras published a detailed engineering post on how they built &ldquo;Cerebras Knowledge&rdquo; &ndash; an internal RAG system handling 15,000+ employee queries per day across Slack, code repositories, wikis, and custom databases. The whole thing took three months and is now one of their most adopted internal tools.</p>
<p>What makes it worth studying is not the scale &ndash; 15,000 queries is impressive but not unheard of. It is the design philosophy. Cerebras rejected the &ldquo;single source of truth&rdquo; approach that most companies chase and instead built a retrieval layer that meets data where it already lives.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>Index data in place instead of migrating it to a single platform. Slack stays Slack, GitHub stays GitHub, the retrieval layer sits on top.</li>
<li>Use a single Postgres embeddings table as the universal query interface. Every source writes into the same schema.</li>
<li>Use hybrid retrieval (full-text + embeddings + IDF + age decay) fused via reciprocal rank fusion before reranking. No single scoring method is trusted alone.</li>
<li>Distill unstructured conversations into structured records. Slack threads get LLM-processed into questions, summaries, resolutions, and system references before embedding.</li>
<li>Expose retrieval primitives as MCP tools so any agent can orchestrate them. The planner/synthesis loop lives in the client, not the server.</li>
</ul>
<p><strong>Reference:</strong> <a href="https://www.cerebras.ai/blog/how-we-built-our-knowledge-base" target="_blank" rel="noopener">How We Built Our Knowledge Base</a> on the Cerebras blog (July 2026), by Isaac, Daniel, and Zenghao.</p>
<h2>Design philosophy: meet data where it lives
    </h2><p>Most internal tooling projects start the same way: someone proposes moving everything into one platform. A single source of truth. It rarely works because information is generated where it is ergonomic. Slack for quick discussions, GitHub for code, Confluence for docs. Each platform is optimized for its domain.</p>
<p>Cerebras went the other way. They built a system that extracts data from each platform directly, indexes it into a shared embeddings table, and makes everything queryable through a single interface without asking anyone to change how they work.</p>
<h2>The core: one Postgres table
    </h2><p>At the center is a single Postgres table that holds embeddings, raw summaries, and metadata from every source. Any data source can write into this table. Anything in the table is immediately queryable through the same search pipeline. The design is deliberately simple: define a data source, connect to it, fetch on a schedule, embed, store.</p>
<h2>Slack: the hard part
    </h2><p>Slack was the most important source and the hardest to get right. Raw vector search over individual messages performs poorly because information density varies enormously. A one-word reply sits next to a detailed kernel debug session, and short filler messages rank higher in cosine similarity than long technical explanations.</p>
<p>Cerebras layered four techniques to solve it:</p>
<ol>
<li><strong>Thread-level indexing.</strong> Every message gets resolved into its full thread (parent, replies, everything). The entire thread is stored as one record.</li>
<li><strong>LLM distillation.</strong> Each thread gets run through an LLM that extracts a structured record: the question being asked, a short summary, the resolution, and systems or code references mentioned. These structured fields are embedded, not the raw transcript. Accuracy went up notably in testing.</li>
<li><strong>Bursting.</strong> Important individual messages inside long threads still get lost. Cerebras identifies &ldquo;bursts&rdquo; (consecutive messages from the same author) and embeds them separately if they clear a quality threshold (rare tokens, minimum length, or social reactions).</li>
<li><strong>Hybrid retrieval.</strong> Every query runs against four signals simultaneously: full-text search (for exact token matches like error strings), embedding search (for paraphrase), inverse document frequency (to boost rare tokens over filler), and age decay (because Slack answers expire). These are fused with reciprocal rank fusion before a reranker scores them.</li>
</ol>
<h2>Code repositories with CocoIndex
    </h2><p>Cerebras initially debated whether code embeddings were worth it. grep is powerful. After reading Cursor&rsquo;s research on semantic search in codebases, they decided to try.</p>
<p>They use CocoIndex, an open-source framework for code embedding. Language-specific regex chunking splits files at class boundaries first, falling back to method boundaries. Each chunk gets embedded and stored. On every commit, only changed chunks are re-embedded. Some of their repos are over 40 GB.</p>
<h2>Query pipeline: planner, executor, synthesis
    </h2><p>Every query runs through three stages:</p>
<ol>
<li><strong>Planner:</strong> A lightweight LLM inspects the query and active project, then decides which tools to invoke. Available tools include <code>search</code> (unified vector), <code>search_slack</code>, <code>search_code</code> (ripgrep), <code>who_knows</code>, <code>recent_prs</code>, and <code>subsystem_index</code>.</li>
<li><strong>Executor:</strong> Tool calls fan out in parallel. Results are normalized into a shared evidence schema with scores, recency, and source hints.</li>
<li><strong>Synthesis:</strong> A final LLM pass produces the answer with citations and cross-source synthesis.</li>
</ol>
<h2>Two interfaces: MCP and Web UI
    </h2><p>The same retrieval primitives are exposed as MCP tools for agent use. Each tool corresponds to one retrieval primitive: narrow, structured, and LLM-free. Claude Code or any MCP client becomes the orchestration engine.</p>
<p>The Web UI runs the same planner-executor-synthesis pipeline end to end. From the user&rsquo;s perspective, it is simply &ldquo;ask a question and get an answer.&rdquo;</p>
<h2>Projects for scoped search
    </h2><p>Teams introduced projects as a way to bundle data sources. A compiler engineer does not want infrastructure runbooks in their results. Projects are lightweight bundles: the same Slack channel or repo can belong to multiple projects. New hires pick a default project during onboarding so they get relevant answers from day one.</p>
<h2>Why read the full post
    </h2><p>The Cerebras post covers the hard parts that most RAG write-ups skip: why raw vector search fails on Slack, how to set RRF parameters, when to use thread-level versus burst-level embeddings, and how to design MCP tools that stay simple on the server side. These are concrete decisions you will face building any internal knowledge base.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/brockhaus-rag/" >Build a Searchable AI Knowledge Base from the Brockhaus &amp; Efron Encyclopedia</a></strong> Also uses CocoIndex and Postgres for RAG, but applied to 86 scanned encyclopedia volumes instead of Slack and code.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/leann-local-rag-on-macos/" >Set Up LEANN for Private Local RAG on macOS</a></strong> A smaller-scale RAG setup for single-user local use, complementing Cerebras&rsquo;s enterprise approach.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/the-enterprise-context-layer/" >The Enterprise Context Layer: Synthesis Over Retrieval</a></strong> Another take on making internal knowledge queryable at scale, focused on synthesis architecture.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Harness Engineering: How OpenAI Built a Million Lines of Code With Zero Human Commits</title><link>https://www.tmfnk.com/use/tutorials/harness-engineering-openai-lopopolo/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/harness-engineering-openai-lopopolo/</guid><description>Ryan Lopopolo's playbook for making coding agents reliable: the OpenAI blog post, the companion repo, and how to apply both to your own projects.</description><content:encoded><![CDATA[

<p>In February 2026, OpenAI published a blog post by Ryan Lopopolo: a product had been built over five months with zero lines of human-written code. Around a million lines, roughly 1,500 pull requests, 3.5 PRs per engineer per day. No human ever typed a line of application logic.</p>
<p>This tutorial walks through Lopopolo&rsquo;s two artifacts: the <a href="https://openai.com/index/harness-engineering/" target="_blank" rel="noopener">OpenAI blog post</a> (the essay) and the <a href="https://github.com/lopopolo/harness-engineering" target="_blank" rel="noopener">lopopolo/harness-engineering</a> repo (the reference implementation). The first is the why; the second is the how.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>Read the OpenAI post in 20 minutes for the full argument: harness engineering is the practice of improving agent output by shaping the environment, not the model.</li>
<li>Clone Lopopolo&rsquo;s companion repo for copy-ready templates: AGENTS.md, playbooks, evals, and a structured docs/ directory.</li>
<li>The core insight: hold the model constant, curate the two external levers, context and tools, and make nonfunctional requirements recoverable from the repo itself.</li>
<li>Everything in Lopopolo&rsquo;s repo is CC-BY-4.0 licensed and designed to be pointed at alongside your own codebase.</li>
</ul>
<p><strong>Prerequisites:</strong> Familiarity with coding agents (Claude Code, Codex, Cursor). No prior harness experience needed.</p>
<h2>Step 1: Read the OpenAI post
    </h2><p>Open <a href="https://openai.com/index/harness-engineering/" target="_blank" rel="noopener">openai.com/index/harness-engineering</a>. It is a long read but every section earns its space. Key sections:</p>
<ul>
<li><strong>We started with an empty git repository.</strong> The scaffold, CI, even the initial AGENTS.md were all written by Codex. No human code to anchor the system from day one.</li>
<li><strong>Redefining the role of the engineer.</strong> Humans stopped writing code entirely. They worked depth-first: break goals into blocks, prompt the agent, identify missing capabilities when things failed. The fix was never &ldquo;try harder.&rdquo; It was always &ldquo;what is missing from the environment?&rdquo;</li>
<li><strong>Repository knowledge as the system of record.</strong> A 100-line AGENTS.md serves as a table of contents, not an encyclopedia. The real knowledge lives in a structured <code>docs/</code> directory. Linters and CI validate freshness and cross-links.</li>
<li><strong>Agent legibility is the goal.</strong> Anything the agent cannot access in-context effectively does not exist. Google Docs, Slack threads, and people&rsquo;s heads are invisible to the system. If it is not in the repo, the agent cannot use it.</li>
<li><strong>Enforcing architecture, not micromanaging.</strong> Custom linters enforce dependency direction, structured logging, naming conventions, and file size limits. The error messages include remediation instructions for the agent.</li>
<li><strong>Entropy and garbage collection.</strong> The team spent every Friday cleaning up &ldquo;AI slop&rdquo; until they encoded golden principles into the repo and automated the cleanup. Technical debt is paid down in small increments daily.</li>
</ul>
<h2>Step 2: Clone the companion repo
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/lopopolo/harness-engineering.git</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Open the README. The repo is Lopopolo&rsquo;s anthology, field guide, and agent context bundle. It is designed to be pointed at alongside your own system: the AGENTS.md routes the task to the relevant arguments, cases, and proof.</p>
<p>The repo structure:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">harness-engineering/
</span></span><span class="line"><span class="cl">├── AGENTS.md           # ~100-line table of contents
</span></span><span class="line"><span class="cl">├── ARCHITECTURE.md     # top-level map of concepts
</span></span><span class="line"><span class="cl">├── docs/               # thesis index with deep arguments
</span></span><span class="line"><span class="cl">│   ├── domain-modeling/
</span></span><span class="line"><span class="cl">│   ├── durable-systems/
</span></span><span class="line"><span class="cl">│   ├── last-mile-deployment/
</span></span><span class="line"><span class="cl">│   └── ...
</span></span><span class="line"><span class="cl">├── playbooks/          # application-specific harness blueprints
</span></span><span class="line"><span class="cl">├── evals/              # harness evaluation scripts
</span></span><span class="line"><span class="cl">├── sources/            # referenced material including the OpenAI post
</span></span><span class="line"><span class="cl">└── assets/</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Success: you now have a reference harness that you can study, adapt, or point your agent at alongside your own repo.</p>
<h2>Step 3: Study the core documents
    </h2><p>Open <code>docs/</code> in the cloned repo. Three documents are worth reading first:</p>
<ol>
<li>
<p><strong><code>docs/domain-modeling/make-nonfunctional-requirements-recoverable.md</code></strong> The central argument: quality attributes (reliability, security, maintainability, performance, operability, risk posture, polish) must be retrievable from the repo as context, examples, tools, and executable constraints.</p>
</li>
<li>
<p><strong><code>docs/durable-systems/make-coherence-cumulative.md</code></strong> How to turn feedback loops into cumulative coherence. Lessons from accepted work, corrections, and failures become context and checks that shape later agent trajectories.</p>
</li>
<li>
<p><strong><code>docs/last-mile-deployment/</code></strong> How the agent&rsquo;s internal action language produces reliable domain outcomes for people who never review the implementation. The harness supplies context, capabilities, authority, and proof.</p>
</li>
</ol>
<blockquote>
  <p><strong>Pro tip:</strong> Do not just read these. Point your own agent at the repo alongside a task. Lopopolo explicitly designed it for that use. The AGENTS.md routes the agent directly to the relevant document.</p>
</blockquote>
<h2>Step 4: Run the evals (optional)
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> harness-engineering
</span></span><span class="line"><span class="cl"><span class="c1"># check which evals are available</span>
</span></span><span class="line"><span class="cl">ls evals/</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>The evals directory contains scripts that test whether a harness is doing its job. Run them against your own repo to measure how legible it is to an agent. Low scores tell you what is missing.</p>
<p>Success: you know your repo&rsquo;s harness score and have a list of gaps to fix.</p>
<h2>Step 5: Adapt the playbooks
    </h2><p>The <code>playbooks/</code> directory contains harness blueprints for specific scenarios. These are the closest thing to copy-paste templates. Adapt one to your project structure.</p>
<p>The key pattern from the OpenAI post: <strong>start small, let the agent build the harness itself.</strong> The initial AGENTS.md was generated by Codex. Your first harness file does not need to be perfect. It needs to exist and improve over time.</p>
<h2>If it breaks
    </h2><p>The companion repo is a reference, not a drop-in. Your specific stack will need different linters, different context files, and a different threshold for what constitutes &ldquo;done.&rdquo; Start with the AGENTS.md-as-table-of-contents pattern and a structured <code>docs/</code> directory. Everything else follows from what your agent actually needs.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/learn-harness-engineering/" >Learn Harness Engineering</a></strong> WalkingLabs&rsquo; hands-on course with 12 lectures and 6 projects. Take this after reading the OpenAI post if you want practice building harnesses.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/karpathy-ai-coding-guidelines/" >Karpathy&rsquo;s AI Coding Guidelines</a></strong> The CLAUDE.md template that started the agent-instructions movement. Harness engineering is what comes after.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/superpowers/" >Superpowers: An Agentic Skills Framework</a></strong> The skills framework that agents use inside a well-built harness.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Gutenberg Stacks: Browse 1,000 Free Books Like a Deck of Cards</title><link>https://www.tmfnk.com/use/tutorials/gutenberg-stacks/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/gutenberg-stacks/</guid><description>A card-and-stack browser for Project Gutenberg's most popular books, inspired by Winnie Lim's self-directed learning network. Drill through categories, eras, and subjects; pivot between stacks; treat authors as stacks too.</description><content:encoded><![CDATA[

<p>Gutenberg Stacks is a card-and-stack browser for the 1,000 most-downloaded books on Project Gutenberg. Instead of a search bar and a list of results, you wander. The home screen is a wall of black stacks (Project Gutenberg categories). Each stack opens into era stacks, which open into subject stacks, which hold book cards with covers, author names, and LLM-written hooks. Everything links straight to the free book on gutenberg.org.</p>
<p>It is an open-source live site at <a href="https://tmfnk.github.io/Gutenberg-Stacks/" target="_blank" rel="noopener">tmfnk.github.io/Gutenberg-Stacks</a>, built to run on GitHub Pages with no backend.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>Browse 1,000 free public-domain books by drilling through Category → Era → Subject stacks</li>
<li>Each book card shows a cover, author, LLM-written hook, and a &ldquo;stacks (N)&rdquo; button that shows every stack the book belongs to</li>
<li>Click any author name to see a stack of every book by that author</li>
<li>Mobile has a full-height swipe carousel for flicking through books in a stack</li>
<li>Global full-text search across all stacks from any screen</li>
<li>Entire site is static. This means no database, no API, no server, no account, no setup. Clone and run locally with <code>npm install &amp;&amp; npm run dev</code></li>
</ul>
<p><strong>Reference:</strong> <a href="https://github.com/TMFNK/Gutenberg-Stacks" target="_blank" rel="noopener">Gutenberg-Stacks on GitHub</a> (AGPL-3.0)</p>
<h2>The design is the point
    </h2><p>The interface is a faithful implementation of <a href="https://winnielim.org/playlists/designing-a-self-directed-learning-network/" target="_blank" rel="noopener">Winnie Lim&rsquo;s self-directed learning network prototype</a>, a Vue + Firebase project she built as part of her design essays. The same card anatomy, the same nested-stack drill-down, the same black-and-white visual language. The difference is that this version is a standalone static site: plain HTML and CSS with TypeScript compiling to vanilla JS. No Vue, no Firebase, no backend.</p>
<p>The design philosophy is that discovery works better when you browse by context, not by keyword. A search form assumes you already know what you want. Stacks assume you are exploring. You start from a category (Fiction, History, Philosophy), drill into an era (19th Century, Before 1800), then into a subject, and find books you would never have searched for.</p>
<h2>Stacks are everywhere
    </h2><p>Two design choices make this more than a nested folder view:</p>
<p><strong>The pivot.</strong> Every book card has a &ldquo;stacks (N)&rdquo; button. Click it and you see every stack that book belongs to. A philosophy book might also be in History, in 19th Century, and in French Literature. One click jumps you into that stack, so you can follow threads sideways instead of drilling back up.</p>
<p><strong>Authors are stacks.</strong> Click any author name on a card and you get a stack of every book by that author in the corpus. This also appears in the pivot modal and in search results. It is the closest thing to walking to a different section of the library because the first book was good.</p>
<h2>How the data is built
    </h2><p>A Python pipeline runs once, offline, and the output is committed to the repo so the frontend never needs it.</p>
<ol>
<li>Catalog: fetch metadata from the <a href="https://gutendex.com/" target="_blank" rel="noopener">Gutendex</a> API (title, author, subjects, download counts)</li>
<li>Excerpts: download each book&rsquo;s plain text, strip Project Gutenberg boilerplate, keep the first ~2,000 words</li>
<li>Embed: run title + subjects + excerpt through <code>sentence-transformers</code> locally (no API cost)</li>
<li>Layout: project embeddings to 2D with UMAP, group into clusters with HDBSCAN</li>
<li>Enrich: send clusters to an LLM via OpenRouter to name each cluster and tag every book with mood, themes, difficulty, and a one-line hook</li>
<li>Export: write the compact JSON the frontend consumes</li>
</ol>
<p>Every stage caches its output, so the pipeline is resumable. The enrich step requires an OpenRouter API key; everything else runs on-device.</p>
<h2>Gutenberg-Book-Finder
    </h2><p>Gutenberg Stacks grew out of a previous project, <a href="https://github.com/TMFNK/Gutenberg-Book-Finder" target="_blank" rel="noopener">Gutenberg-Book-Finder</a>, which uses the same pipeline and data but shows a more traditional search-and-filter grid with facet filters, a 2D map view, and a &ldquo;Surprise me&rdquo; button. Both are live and maintained. Stacks is the evolution toward browsing over searching.</p>
<h2>What to read next
    </h2><p>The 1,000-book corpus covers the most-downloaded titles on Project Gutenberg, so you get the classics you expect (Dracula, Pride and Prejudice, Frankenstein) and the long tail of obscure works that somehow made the list. The LLM hooks are often surprisingly good at selling a book you otherwise would skip.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/book-prize-index/" >Find Quality Non-Fiction Books Using the Book Prize Index</a></strong> A complementary approach: where Gutenberg Stacks uses download popularity and LLM enrichment to surface free classics, the Book Prize Index uses prize data and semantic search for non-fiction discovery.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/uncovered-ink/" >Uncovered: Judge a Book by Its First Page, Not Its Cover</a></strong> Another discovery-first tool, focused on judging books by their opening lines rather than browsing by category.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/where-to-find-free-books-online/" >Best Free Books Online: Complete Guide to Digital Libraries</a></strong> Where to find free books once you discover them &ndash; Project Gutenberg, Archive.org, and everything else.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/readkinetic-speed-reader/" >ReadKinetic: A Free Local-First Speed Reader</a></strong> Reads EPUBs and PDFs with RSVP speed reading. Pair it with Gutenberg Stacks to discover and read in one session.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Free Multivariable Calculus Course: 35+ Video Lectures from Academa</title><link>https://www.tmfnk.com/use/tutorials/multivariable-calculus-academa/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/multivariable-calculus-academa/</guid><description>A complete, free multivariable calculus course with 35+ video lectures covering vectors, partial derivatives, multiple integrals, and vector calculus.</description><content:encoded><![CDATA[

<p>A complete multivariable calculus course, free, with 35+ video lectures. You can start learning in 30 seconds with no signup.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>35+ video lectures covering a full university semester of multivariable calculus, from vectors through Stokes&rsquo; theorem.</li>
<li>Lectures are 20–40 minutes each, with clear blackboard-style explanations and a built-in video player with chat.</li>
<li>No signup, no ads, no paywall. Open the site and start watching.</li>
<li>Runs on the Academa.ai platform with video quality options and a sidebar for navigating topics.</li>
</ul>
<p><strong>Prerequisites:</strong> Single-variable calculus (derivatives, integrals, the fundamental theorem). Familiarity with basic linear algebra helps but is not required.</p>
<h2>Step 1: Open the course
    </h2><p>Go to <a href="https://calculus.academa.ai/" target="_blank" rel="noopener">calculus.academa.ai</a>. That&rsquo;s it. No account, no email, no &ldquo;start your free trial.&rdquo; The lecture list loads immediately with five sections: Vectors and the Geometry of Space, Vector Functions, Partial Derivatives, Multiple Integrals, and Vector Calculus.</p>
<h2>Step 2: Pick your starting point
    </h2><p>The course is designed to be taken in order, but each lecture stands on its own if you need to review a specific topic. Vectors start with the basics (magnitude, direction, addition) and build up through dot products, cross products, and lines and planes in 3D space; this is about six lectures total. If you already know this material, jump straight to Partial Derivatives or Multiple Integrals.</p>
<h2>Step 3: Watch and follow along
    </h2><p>Each lecture is a recorded blackboard session with a live instructor. The video player includes a chat panel on the right for questions. Lectures range from 9 minutes (Tangent Plane, Normal Vector to Surface) to 41 minutes (Double Integration), with most around 25–30 minutes.</p>
<p>The sweet spot is the Multiple Integrals section: eight lectures covering double and triple integration in Cartesian, polar, cylindrical, and spherical coordinates, plus a general change of variables. This is where multivariable calculus really separates from single-variable.</p>
<h2>Step 4: Work through Vector Calculus
    </h2><p>The final section covers vector fields, line integrals, Green&rsquo;s theorem, curl and divergence, parametric surfaces, surface integrals, and Stokes&rsquo; theorem. This is the payoff, the material that makes sense of Maxwell&rsquo;s equations and fluid dynamics. Stokes&rsquo; theorem in particular is worth the whole course.</p>
<blockquote>
  <p><strong>Pro tip:</strong> Watch Lecture 33 (Big Picture of Integration, Stokes&rsquo; Theorem) even if you skip everything else. It connects all the integration theorems into a single framework and is the best explanation of the generalized Stokes theorem I have seen in a free course.</p>
</blockquote>
<h2>If it breaks
    </h2><p>There is nothing to break. It is a web page with videos. If a video does not load, try a different browser. The site uses Bunny.net for video delivery, which generally works everywhere.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/category-theory-illustrated/" >Category Theory Illustrated</a></strong> Another free, visual introduction to an advanced math topic; if you like learning abstract mathematics through diagrams, this is your next stop.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/elementary-mathematics/" >Elementary Mathematics</a></strong> A rigorous review of pre-calculus mathematics (algebra, trigonometry, number theory) if you need to shore up foundations before multivariable calculus.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/euclidea/" >Euclidea</a></strong> A geometry puzzle game that teaches Euclidean constructions through play; a different way to build mathematical intuition.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Find Quality Non-Fiction Books Like a Library Browsing the Stacks: The Book Prize Index Guide</title><link>https://www.tmfnk.com/use/tutorials/book-prize-index/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/book-prize-index/</guid><description>Benjamin Breen's Book Prize Index indexes 7,000+ prize-winning non-fiction books with semantic search, letting you rediscover the serendipity of library browsing.</description><content:encoded><![CDATA[

<p>Benjamin Breen, a historian at UC Santa Cruz and writer of the Res Obscura newsletter, spent his college years shelving books in Columbia&rsquo;s Butler Library. He would flip to a random page of every book he shelved, sometimes getting absorbed, then reaching for the books on either side. It was a filtered serendipity: the Library of Congress system and the librarians had already curated the shelves, and the fact that a book had been checked out meant someone thought it was worth reading.</p>
<p>He built a digital version of that experience. The <a href="https://book-prize-index.vercel.app/" target="_blank" rel="noopener">Book Prize Index</a> is a free, searchable catalog of over 7,000 prize-winning non-fiction books. He had Claude Code scrape the data from Wikipedia and used semantic search so you can browse by feel rather than by keyword. Type &ldquo;books for dads who like Pavement&rdquo; or &ldquo;David Attenborough but in book form&rdquo; and the embedding model surfaces actual titles.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>Browse 7,000+ non-fiction books that won or were shortlisted for major English-language prizes (Pulitzer, National Book Award, NBCC, etc.)</li>
<li>Use semantic search to find &ldquo;books like&rdquo; one you loved, or describe a vibe and see what surfaces</li>
<li>Explore by subject, publisher, imprint, or prize to find patterns in what gets recognized</li>
<li>Tools are free, no account needed. Breen pays hosting costs himself.</li>
</ul>
<p><strong>Reference:</strong> <a href="https://resobscura.substack.com/p/quality-non-fiction-books-are-the" target="_blank" rel="noopener">Quality non-fiction books are the antithesis of AI slop</a> on Res Obscura, by Benjamin Breen (July 2026).</p>
<h2>Why prize data works
    </h2><p>Book recommendation algorithms are usually bad because they optimize for what sells, not what lasts. Amazon will recommend the same five self-published diet books to everyone. Prize lists are a filter that solves this: a jury of experts has already done the curation. These books have been read, debated, and judged by people who know the field.</p>
<p>The data covers 55 award programs and 121 prize categories, from the Pulitzers and National Book Awards to more specialized prizes like the Mark Lynton History Prize or the PROSE Awards. Each book gets a recognition score based on how many prizes it won and how many lists it appeared on, weighted by the prestige of each prize.</p>
<h2>Semantic search changes how you browse
    </h2><p>The most useful feature is the semantic search. It does not just match keywords in titles. You can describe what you want in natural language and the embedding model finds books whose descriptions and content match the feel of your query.</p>
<p>Try searching &ldquo;long weird biographies of strange people&rdquo; or &ldquo;books about exploration that read like adventure novels.&rdquo; The results are often surprising and genuinely good. This is the closest digital equivalent to pulling a book off a library shelf because the spine looked interesting, then pulling the one next to it because the topic turned out to be fascinating.</p>
<p>The keyword search mode is also there for when you need exact matches. Toggle between them in the search bar.</p>
<h2>The publisher and imprint data
    </h2><p>One of the most useful pages is the <a href="https://book-prize-index.vercel.app/publishers" target="_blank" rel="noopener">Publishers</a> section, which ranks imprints and publishing houses by how many prize-winning books they have produced over time. You can see which small presses punch above their weight, how the big houses compare, and which imprints to watch if you care about quality non-fiction.</p>
<p>The <a href="https://book-prize-index.vercel.app/subjects" target="_blank" rel="noopener">subjects</a> breakdown is also worth exploring. History leads with 1,554 books, followed by Biography (1,114), Arts and Criticism (681), and Science (614). Each one links to its full list.</p>
<h2>Data experiments and visualizations
    </h2><p>Breen built a few fun side projects with the data. The <a href="https://book-prize-index.vercel.app/fun/chromatic-index" target="_blank" rel="noopener">chromatic index</a> arranges roughly 5,000 book covers by color. The <a href="https://book-prize-index.vercel.app/experiments" target="_blank" rel="noopener">trends page</a> shows the rise and (potential) decline of non-fiction prizes over time, peaking around 2014.</p>
<h2>What Breen argues about non-fiction
    </h2><p>The Substack post that accompanies the tool makes a bigger argument: quality non-fiction books are the antidote to AI-generated sludge. They are carefully researched, peer-reviewed in practice if not in name, and they endure. A good non-fiction book from 1993 (like David Levering Lewis&rsquo;s biography of W.E.B. Du Bois, which won four prizes) can be bought used for four dollars and read with as much profit as anything published this year.</p>
<p>Breen also traces the golden age of non-fiction to factors like jet travel enabling multi-continent research, the erosion of class and gender barriers in academia, and early digital cataloging standards. It is the kind of argument that makes you want to read more books, which is the whole point.</p>
<h2>Why read the full post
    </h2><p>The Substack post includes Breen&rsquo;s personal reflections on library browsing, open stacks, the decline of research libraries, and what it felt like to build a tool using Claude Code to solve a problem he cares about. The Book Prize Index itself is immediately useful, but the framing (prize-winning non-fiction as a quality signal in an age of AI noise) is worth sitting with.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/uncovered-ink/" >Uncovered: Judge a Book by Its First Page, Not Its Cover</a></strong> Another book discovery tool that hides the cover and author so you judge by the writing alone. Prize Index shows you what to read; Uncovered shows you how the first page reads.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/the-best-way-to-read-a-book/" >The Best Way to Read a Book (That Nobody&rsquo;s Doing)</a></strong> Jeremy Howard demonstrates using LLMs for close-reading books. Between the Prize Index for finding books and Howard&rsquo;s method for reading them, you have a full pipeline.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/how-i-write-morgan-housel/" >How I Write: Morgan Housel on How to Master Writing</a></strong> Housel&rsquo;s &ldquo;wide funnel, tight filter&rdquo; approach to reading (pick anything that is 1% interesting and abandon mercilessly) pairs well with the Prize Index&rsquo;s serendipitous browsing.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/where-to-find-free-books-online/" >Best Free Books Online: Complete Guide to Digital Libraries</a></strong> Once you discover a book on the Prize Index, this guide shows you where to find it for free.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Ex Situ: A Spatial Index of 200,000 Displaced Cultural Artifacts</title><link>https://www.tmfnk.com/read/articles/ex-situ-displaced-cultural-artifacts-map/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/ex-situ-displaced-cultural-artifacts-map/</guid><description>An open-source map that traces 200,000+ museum artifacts from their origin sites to the institutions that hold them. It is built entirely from open-access museum APIs.</description><content:encoded><![CDATA[
<p><a href="https://exsitu.app/map" target="_blank" rel="noopener">Ex Situ</a> is an open-source geospatial index that maps museum artifacts as arcs from their origin site to the institution that holds them. The map currently covers 200,552 artifacts across 9 collections, 194 territories, and 6,679 origin sites. It started as a solo MA thesis in 2022 and the creator, Hüseyin Burak Yel, has been building it since.</p>
<ol>
<li>
<p>The infrastructure is designed as an indexer, not a hoster. Artifacts stay linked to their institutional source. Images are kept as URLs pointing to the source institutions. No content is copied or mirrored. The project is &ldquo;connective tissue between archives that were never designed to speak to each other.&rdquo;</p>
</li>
<li>
<p>The data model is intentionally flat to avoid encoding problematic colonial taxonomies. Many museums still categorize items under labels like &ldquo;Islamic art,&rdquo; &ldquo;Asian art,&rdquo; &ldquo;ethnological collections&rdquo;, and &ldquo;religious objects.&rdquo; These are categories that reflect the collector&rsquo;s worldview, not the object&rsquo;s origin. Ex Situ sidesteps this by prioritizing geographic provenance over institutional categories.</p>
</li>
<li>
<p>The map renders arcs at three zoom levels. At the global view (zoom 0–4), you see territory-to-institution arcs. At the regional view (zoom 5–9), city/site to institution. At the artifact level (zoom 10+), you get precise coordinates for individual objects. The result is a tool that works for both broad pattern recognition and detailed research.</p>
</li>
<li>
<p>Currently indexing from 9 collections including the Metropolitan Museum of Art, the Victoria and Albert Museum, the Staatliche Museen zu Berlin, and the Art Institute of Chicago. It only pulls from institutions with open-access APIs, which means the map unavoidably underrepresents museums that keep their data closed. A commenter on Hacker News pointed out that Paris and Moscow look innocent on the map, because their data is not publicly available.</p>
</li>
<li>
<p>The built-in search lets you filter by origin site or collection, and there is an MD export for researchers who want to download provenance data for a filtered set. There is also a public API at <code>exsitu.app/api/museum-objects/geospatial</code> that returns GeoJSON arc data filtered by zoom level, bounding box, institution, or origin country.</p>
</li>
<li>
<p>Because the data comes exclusively from Western and Euro-American institutions, the scope is a deliberate constraint. The creator notes that expanding to Japanese, Russian, or other museum networks depends entirely on whether those institutions provide open-access APIs. The technical pattern for adding a new resolver is documented in the ETL pipeline (fetch, map, geocode, insert), but each new institution means adapting to whatever API format they use.</p>
</li>
<li>
<p>The project is fully self-hostable and AGPL-3.0 licensed. Stack: Next.js + Deck.gl + MapLibre GL JS on the frontend, Strapi + PostgreSQL/PostGIS on the backend, Python for the ETL pipeline. No proprietary cloud dependencies, no third-party tracking.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Ex Situ turns the relationship between an object&rsquo;s origin and its current location into a visible, queryable spatial index. It does not host the data or duplicate institutional records. It draws the lines. The map reveals which museums have open data and which do not almost as clearly as it reveals where artifacts came from.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/the-castle-map/" >The Castle Map: 3,708 Fortresses, One Open-Data Atlas</a></strong> Another open-data spatial atlas, built from Wikidata and Wikimedia Commons instead of institutional APIs.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/search-whole-earth/" >SearchWhole.Earth: The Digitally Resurrected Whole Earth Catalog</a></strong> A different kind of open-data catalog; curating interesting things into a browsable index.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/infrastructure-maps-power-grid/" >Infrastructure Maps: Four Ways to See the World&rsquo;s Power Grid</a></strong> A map that makes hidden infrastructure visible, a similar impulse to Ex Situ&rsquo;s provenance arcs.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Cursor's Agent Swarm: Building SQLite in Rust for $1,339</title><link>https://www.tmfnk.com/read/articles/cursor-agent-swarm-model-economics/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/cursor-agent-swarm-model-economics/</guid><description>Cursor ran four model mixes building SQLite from scratch in Rust. All passed 100% of tests. Costs ranged from $1,339 to $10,565. The cheapest used a frontier planner and cheap workers.</description><content:encoded><![CDATA[
<p>Cursor published a detailed post on <a href="https://cursor.com/blog/agent-swarm-model-economics" target="_blank" rel="noopener">Agent swarms and the new model economics</a> that is worth reading end to end. They built SQLite from scratch in Rust, starting from nothing but the 835-page SQLite manual, using a swarm of AI agents. The experiment is a concrete demonstration of the commodity-market math Ben Thompson wrote about last week.</p>
<ol>
<li>
<p>The new swarm is organized as a tree: a frontier model acts as planner, decomposing the goal into pieces, while cheaper models act as workers executing those pieces. The design is deliberately shaped by the problem rather than imposing a fixed topology. This is the same planner-worker distinction Thompson described as a future possibility; Cursor just shipped it.</p>
</li>
<li>
<p>The context efficiency of this separation is the core insight. A solo agent that walks the whole task tree has to hold every context layer at once and drifts. In the swarm, a planner never sees low-level implementation detail, and a worker never needs to hold the global picture. Cursor suspects this context efficiency matters more than parallelism for scaling.</p>
</li>
<li>
<p>At 1,000 commits per second, human coordination mechanisms break. Cursor built a custom VCS from scratch, then handled five failure modes that human teams never see: split-brain design (two planners implementing the same thing), planner contention (agents fighting over the same files), merge conflicts (a neutral third-party agent resolves them), megafiles (agents flag bloated files for automatic decomposition), and ossification (agents learn not to touch core code, so Cursor licensed intentional breakage and let the compiler propagate changes).</p>
</li>
<li>
<p>The stacked review system is the error-correction layer. No single review lens catches everything, but decorrelated lenses (different models, different inputs, different personalities), stack like self-driving car sensor fusion. The compute spent on review is high return because review is much cheaper than the work it audits.</p>
</li>
<li>
<p>The Field Guide experiment is a stigmergy mechanism: agents write a shared context folder that is injected into every agent at start. Model weights are frozen, so the only way to shorten the next trajectory is by capturing surprise encounters in the guide. This is the closest implementation I have seen of agents building institutional memory for themselves.</p>
</li>
<li>
<p>The economics are the story. Cursor tested four model mixes: GPT-5.5 (both roles), Grok 4.5 (both), Opus 4.8 planner + Composer 2.5 workers, and Fable 5 planner + Composer 2.5 workers. All passed 100% of the SQL test suite. Costs ranged from $1,339 (Opus hybrid) to $10,565 (GPT-5.5). In the cheapest configuration, the Opus planner produced a small fraction of tokens but two-thirds of the cost, while workers handled the vast majority of tokens for one-third of the cost. In the most expensive, those same workers cost $9,373. This is a big win because they were running GPT-5.5 for a job a cheaper model could do.</p>
</li>
<li>
<p>The old versus new comparison is staggering. On the same task with the same time budget, the old swarm produced 68,000 commits and 70,000+ merge conflicts in two hours before it had to be paused. The new swarm produced under 1,000 conflicts over its full four hours. The old codebase needed 64,305 lines. The new one did it in 9,908.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> This is the Thompson thesis in microcosm. When intelligence becomes a commodity, the winning strategy is not the smartest model but the optimal planner-worker split. The cost difference between the cheapest and most expensive configurations was 8x with identical outcomes. Cursor&rsquo;s swarm is a working demonstration of what happens when you stop optimizing for capability and start optimizing for cost structure.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/whos-afraid-of-chinese-models-stratechery/" >Who&rsquo;s Afraid of Chinese AI Models? Ben Thompson Maps the Commodity Math</a></strong> Thompson&rsquo;s commodity market analysis is the theory; Cursor&rsquo;s experiment is the existence proof.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/is-grep-all-you-need/" >Is Grep All You Need? How Agent Harnesses Reshape Agentic Search</a></strong> A direct comparison of agent harnesses (Claude Code, Codex, Gemini CLI); the same abstraction-level question Cursor is asking, applied to search workflows.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/the-rise-of-computer-use-and-agentic-coworkers/" >The Rise of Computer Use and Agentic Coworkers</a></strong> The architectural precursor: why model capabilities alone are not enough and orchestration matters.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/harness-engineering-lilian-weng/" >Harness Engineering for Self-Improvement: Lilian Weng&rsquo;s Survey</a></strong> OpenAI&rsquo;s perspective on agent orchestration and self-improvement loops, directly relevant to Cursor&rsquo;s swarm architecture.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/state-of-agentic-coding-6-armin-ronacher-ben-vinegar/" >State of Agentic Coding #6 with Armin Ronacher and Ben Vinegar</a></strong> The practical state of agentic coding tools, the ecosystem Cursor is building for.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/latent-space-eiso-kant-poolside/" >Latent Space: Inside the Model Factory with Eiso Kant, Poolside AI</a></strong> Another take on the model economics problem; how a small team runs 20,000 experiments per month.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Chamath Palihapitiya: Once I Understood This About Investing, My Life Changed</title><link>https://www.tmfnk.com/see/videos/chamath-palihapitiya-once-i-understood-this-about-investing/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/chamath-palihapitiya-once-i-understood-this-about-investing/</guid><description>Chamath on compound interest tables, why he ignored Bezos and Elon selling in 2021 and lost billions, and why your first investment should be something you love using.</description><content:encoded><![CDATA[

<h2>Once I Understood This About Investing, My Life Changed.
    </h2><p>Chamath Palihapitiya. Duration: 15 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/J2qKVjRR12w?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w" target="_blank" rel="noopener">0:00</a> Building a compound interest table</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=122s" target="_blank" rel="noopener">2:02</a> The risk curve and taking responsibility</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=156s" target="_blank" rel="noopener">2:36</a> Learning from Bezos and Elon the hard way</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=292s" target="_blank" rel="noopener">4:52</a> Investing in what you love</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=434s" target="_blank" rel="noopener">7:14</a> Tax-loss harvesting as a backup plan</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=504s" target="_blank" rel="noopener">8:24</a> Get rich slow</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=632s" target="_blank" rel="noopener">10:32</a> Knowing your goal and the barbell strategy</li>
<li><a href="https://www.youtube.com/watch?v=J2qKVjRR12w&amp;t=846s" target="_blank" rel="noopener">14:06</a> Just start and tell nobody</li>
</ul>
<p>Chamath Palihapitiya (early Facebook executive, Social Capital founder, former Warriors owner) gives the rawest investing advice I have heard in a while. He walks through his own mistakes (the time he ignored the two best capital allocators in the world and torched $5 billion), and the frameworks he uses instead.</p>
<ol>
<li>
<p>Build your own compound interest table before you buy anything. Chamath says he built one for an athlete who just signed a giant contract. He took the salary, subtracted taxes and fees, and showed him what it would look like at 7% over 30 years. The athlete&rsquo;s mind was blown. Then Chamath backed it off to 1/1000th of that starting number, and his mind was still blown. &ldquo;Even with the most meager of beginnings,&rdquo; Chamath says, &ldquo;you can post huge numbers if you focus on a systematic process over 20 and 30 years.&rdquo;</p>
</li>
<li>
<p>Know exactly where you sit on the risk curve or stay out. &ldquo;The further out on the risk curve you are, the odds are that there&rsquo;s the risk of capital loss,&rdquo; Chamath says. &ldquo;And if you don&rsquo;t know where you are out on the risk curve, you shouldn&rsquo;t be there. Take your money, stick it into an index fund, just go home. This is a tough game, and most people lose at this game.&rdquo;</p>
</li>
<li>
<p>Here is the mistake that cost him billions. In November 2021, Chamath saw Jeff Bezos and Elon Musk start selling their stock. He says he thought to himself, &ldquo;These guys are the two best capital allocators in the world today. If they&rsquo;re selling, I should sell.&rdquo; He sold a little but not nearly enough. By March 2022, the Russia-Ukraine war started, the market tanked, and his SPAC positions got obliterated. His honest diagnosis: he had confused his growing fame with growing skill. He was too afraid to tell everybody to cut to cash. Now his rule is: when someone structurally smarter than him does something against his positions, he immediately asks, &ldquo;Prove to me why I shouldn&rsquo;t do the same.&rdquo;</p>
</li>
<li>
<p>Your first investment should be a product you love and use. He tells this story every time someone asks him how to start: on vacation with his two sons, they won a few hundred dollars betting on golf. The older son said, &ldquo;I like the price action of Virgin Galactic&rdquo;. He blew the $200 in, made $3,000, bought a computer, and never returned. The younger son said, &ldquo;I like Xbox, PlayStation, and Nintendo&rdquo;. He bought all three, compounded at roughly 30% over the next three years, and is still in the game. Chamath&rsquo;s rule: &ldquo;Look around you at the products that you love, that you think are incredible, that are well-made. Find out who makes those things and see if that company is public.&rdquo;</p>
</li>
<li>
<p>US tax code makes your losses a backup plan. Chamath says most investors do not know that capital losses carry forward indefinitely in the US, offsetting future gains with no expiration date. &ldquo;When you lose money (not if but when), take the time to understand why: were you too greedy, too short-term, did you misjudge the risk? All that money will come back to you if you course-correct.&rdquo;</p>
</li>
<li>
<p>Investing is a get-rich-slow game. &ldquo;Every time that people want get-rich-quick schemes, they stop thinking for themselves, they start looking for answers from others, they invariably blow up, and then they blame others,&rdquo; Chamath says. &ldquo;Don&rsquo;t do that to yourself. You are responsible. Do not make decisions you cannot justify as your own decisions.&rdquo;</p>
</li>
<li>
<p>The barbell strategy lets you take big risks without going to zero. Chamath frames his whole portfolio as a barbell: most of his capital sits in concentrated, asymmetric bets on technology. On the other end, he hedges with cash and uncorrelated assets. The most uncorrelated thing he could find? Professional sports. He bought 10% of the Golden State Warriors for $25 million, later sold for $500 million. But he says the investment would have been worth it even at zero appreciation because it gave him &ldquo;the mental freedom to go and build my investing chops in technology.&rdquo;</p>
</li>
<li>
<p>Just start. Tell no one. The only people who care how much you start with are other people, and they care because it makes them feel better about their own decisions. &ldquo;What&rsquo;s $50? What&rsquo;s $100? To others it seems meager and not worth it.&rdquo; Chamath&rsquo;s advice: start anyway, keep your mouth shut, and &ldquo;show up 10 or 15 years later with a huge war chest and shove it up their ass.&rdquo;</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/see/videos/apply-compound-interest/" >How To Apply Compound Interest To Everything In Your Life</a></strong> Chamath&rsquo;s first takeaway (the compound interest table) is the whole point of this video.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/charlie-munger-saving-first-100k/" >Charlie Munger: Saving the First $100,000 Will Change Your Life</a></strong> Same ethos: starting small and letting time do the work.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/the-wealth-ladder-explained/" >The Wealth Ladder Explained: How to Build Wealth at Every Stage</a></strong> Nick Maggiulli&rsquo;s framework for where you are and what to do next.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/mohnish-pabrai-kim-kiho-knowledge-inside/" >Mohnish Pabrai on Dhandho Investing, Checklists, and Korea</a></strong> Another investor who preaches the same low-turnover, high-conviction approach.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>BBC Sound Effects: 30,000 Recordings from the World's Greatest Audio Archive</title><link>https://www.tmfnk.com/use/tools/bbc-sound-effects/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/bbc-sound-effects/</guid><description>BBC's free sound effects library. Search, preview, mix, and download 30,000+ recordings spanning a century of field recording.</description><content:encoded><![CDATA[

<h2>BBC Sound Effects
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A searchable archive of 30,000+ BBC sound effects, free for personal and educational use</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free (personal/educational); license required for commercial</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://sound-effects.bbcrewind.co.uk/" target="_blank" rel="noopener">sound-effects.bbcrewind.co.uk</a></td>
      </tr>
  </tbody>
</table>
<p>The BBC has been recording sound for nearly a century. Every radio drama, documentary, and field report generated audio artifacts; rain, footsteps on gravel, jungle ambience, creaking ship hulls, typewriter clatter, distant church congregations, someone vigorously washing their hands. They digitized the whole thing and put it online.</p>
<ol>
<li>
<p>Search any word, and it instantly finds matching recordings. &ldquo;Rain&rdquo; returns downpours, drizzles, and thunderstorms recorded on three continents. &ldquo;Footsteps&rdquo; gives you gravel, carpet, snow, wood, and wet leaves; each with multiple takes. The specificity is the point. A BBC engineer probably recorded the exact sound you need decades before you were born.</p>
</li>
<li>
<p>Filter by category (transport, weather, footsteps, machinery, animals), duration (short clicks to minute-long atmospheres), and continent where the recording was made. Want a 30-second jungle ambience recorded in South America? That&rsquo;s three clicks.</p>
</li>
<li>
<p>Every sound previews in the browser. The built-in mixer lets you layer multiple recordings (rain under footsteps, traffic behind dialogue, wind over a room tone), and download the mix as a single file. No DAW needed for quick comps.</p>
</li>
<li>
<p>The honest caveat: you need to credit the BBC for personal/educational use, and commercial use requires a license. Download quality is generally 192kbps MP3, fine for prototyping and web use but not broadcast archival. Some older recordings have noticeable tape hiss, which is either a limitation or a feature depending on what you&rsquo;re making.</p>
</li>
</ol>
<p><strong>Worth your time if:</strong> you need real, human-recorded sound effects and don&rsquo;t want to sift through synthetic stock libraries or pay per-download on audio marketplaces.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/buzz/" >Buzz: Transcribe &amp; Translate Audio Offline</a></strong> The opposite pipeline; turn audio into text when you need to caption or transcribe sound effects.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/petrichor/" >Petrichor: Native macOS Offline Music Player</a></strong> For listening to ambient mixes built from BBC sound layers.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/free-background-noise/" >Best Free Background Noise Websites and Apps for Focus, Sleep &amp; Relaxation</a></strong> Different source of ambient audio, focused on focus and sleep rather than production.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Airport Simulator</title><link>https://www.tmfnk.com/enjoy/games/airport-simulator/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/enjoy/games/airport-simulator/</guid><description>The spiritual successor to Flight Control. Drag colored planes to matching runways in a browser-based ATC game that gets your heart rate up in minutes.</description><content:encoded><![CDATA[

<h2>Airport Simulator
    </h2><p>Liisa Apunen. Browser. <a href="https://airport.apunen.com" target="_blank" rel="noopener">Play it here</a>.</p>
<p>I crashed my first plane within 15 seconds. My second within 30. Then something clicked: drag the plane to the colored dot at the end of its matching runway, and it lands. Dragging to the wrong color does nothing. Not dragging at all means midair collisions. The game hit 852 points on Hacker News in its first three days, and after playing for an hour I understand why.</p>
<ol>
<li>
<p>The core mechanic is the same one that made Flight Control (2009) an iPhone classic: draw a path from a plane to its runway. Planes are color-coded, runways are color-coded, and the game trusts you to figure this out on your own. There are no instructions. You learn by crashing.</p>
</li>
<li>
<p>Departing planes add the twist that makes this harder than Flight Control. Every runway periodically launches a plane that rolls across the taxiway at walking speed. You cannot control departing planes, so you have to route incoming traffic around them. The predictable congestion is the whole challenge: knowing a departure is coming and clearing the airspace for it.</p>
</li>
<li>
<p>The difficulty ramp is well tuned: spawn rate goes from one plane every 5 seconds to one every 1.5 seconds over the first 5 minutes, and the max aircraft on screen goes from 3 to 12. The game never spikes. It just quietly becomes impossible, and you keep playing anyway because your last run was 86 landings and this one might hit 90.</p>
</li>
<li>
<p>Built with SvelteKit and PocketBase, 3D pixel art in a pastel palette, bilingual interface (Finnish/English). The developer added a hide-scoreboard button within hours of HN feedback and cleaned the leaderboard of fake scores the same day. Responsive development.</p>
</li>
<li>
<p>The leaderboard shows your nearest airport alongside your score, which is a nice touch. It also reveals the HN audience: someone landed 90 planes in 7 minutes and 29 seconds. That is the score to beat.</p>
</li>
</ol>
<p><strong>Play it if:</strong> you miss Flight Control or Mini Metro and want something that lives in a browser tab. <strong>Skip it if:</strong> the idea of managing 12 simultaneous crash vectors does not sound like fun.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/web-swing-midtown-nyc/" >Web Swing Through Midtown NYC</a></strong> Another browser game that nails one mechanic perfectly, released the same day.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/mooncraft/" >Mooncraft: A Lunar Trucking Sim Built in Plain JavaScript</a></strong> Same indie-browser-game energy; one person, one mechanic, no fluff.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/starfling/" >Starfling: Tap, Release, Sling Between Stars</a></strong> The same learn-by-failing loop, astrophysics edition.</li>
</ul>
<p>Crepi il lupo!</p>
]]></content:encoded></item><item><title>Install depth-anything.cpp on macOS: Local Depth Maps from One Photo</title><link>https://www.tmfnk.com/use/tutorials/depth-anything-cpp-macos/</link><pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/depth-anything-cpp-macos/</guid><description>Why monocular depth maps matter, then clone, build, download DA3-BASE, and run da3-cli on Apple Silicon.</description><content:encoded><![CDATA[

<p>A photo is flat. A depth map tells you which pixels sit closer and which sit farther. That is enough for messy cutouts, cheap parallax, a rough point cloud, or a focus effect, without a stereo camera or LiDAR.</p>
<p><a href="https://github.com/mudler/depth-anything.cpp" target="_blank" rel="noopener">depth-anything.cpp</a> is a C++17/ggml port of Depth Anything 3. It is a CLI you run on your own machine. No Ollama. No PyTorch. On a Mac I went from empty folder to first PNG in about twenty minutes.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>You want relative depth from one RGB image, offline, on Apple Silicon.</li>
<li>Clone with <code>--recursive</code>, then build CPU Release (<code>DA_GGML_METAL=OFF</code> on my M2).</li>
<li>Put <code>depth-anything-base-q4_k.gguf</code> (~99MB) in <code>models/</code>.</li>
<li>Run <code>da3-cli depth ... --png out.png</code>. The flag is <code>--png</code>, not <code>--out</code>.</li>
<li>Metal segfaulted on me (exit 139). CPU finished.</li>
</ul>
<p><strong>Prerequisites:</strong> macOS on Apple Silicon, plus <code>git</code>, <code>cmake</code>, <code>clang++</code> (Xcode CLT), and either <code>curl</code> or the <code>hf</code> CLI.</p>
<h2>Why bother
    </h2><p>Monocular depth is an educated guess. One JPG does not contain real meters. The model still produces a near/far field that is useful for a lot of day-to-day work: pull a subject off a busy background, feed parallax into an editor, export <code>--glb</code> or a reconstruct/<code>--ply</code> mesh once you move to larger weights, or prototype perception code without buying a depth sensor. And the photo never leaves disk.</p>
<p>It will not replace a tape measure. The PNG is relative depth (farther usually looks lighter in the default export). True metric scale needs the nested/metric GGUFs and a different setup. Use BASE first. If the images look sane, then chase metric.</p>
<p>I reached for the C++ port instead of a notebook because ggml plus one binary means one compile, one weight file, and no torch/CUDA dependency fight. Local chat apps will not load these GGUFs. Think of <code>da3-cli</code> the way you think of <code>ffmpeg</code>: you call it, you get a file, you move on.</p>
<h2>Step 1: Clone the repo
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> ~/Documents
</span></span><span class="line"><span class="cl">git clone --recursive https://github.com/mudler/depth-anything.cpp
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> depth-anything.cpp</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>You should see <code>third_party/ggml</code> on disk. If you forgot <code>--recursive</code>, the build will fail later. Fix with <code>git submodule update --init --recursive</code>.</p>
<h2>Step 2: Build the CLI (CPU)
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cmake -B build -DCMAKE_BUILD_TYPE<span class="o">=</span>Release -DDA_BUILD_CLI<span class="o">=</span>ON -DDA_GGML_METAL<span class="o">=</span>OFF
</span></span><span class="line"><span class="cl">cmake --build build -j</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>When it works, <code>build/examples/cli/da3-cli</code> exists. I tried <code>-DDA_GGML_METAL=ON</code> first. Metal came up, weights moved to the GPU, then the process died with exit 139. CPU ran clean. Stay on CPU until Metal works on your box.</p>
<h2>Step 3: Download DA3-BASE weights
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mkdir -p models
</span></span><span class="line"><span class="cl">curl -L --fail -o models/depth-anything-base-q4_k.gguf <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  <span class="s2">&#34;https://huggingface.co/mudler/depth-anything.cpp-gguf/resolve/main/depth-anything-base-q4_k.gguf&#34;</span>
</span></span><span class="line"><span class="cl">ls -lh models/depth-anything-base-q4_k.gguf</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Or: <code>hf download mudler/depth-anything.cpp-gguf depth-anything-base-q4_k.gguf --local-dir models</code>.</p>
<p>You want a file around 99MB. Q4_K BASE is the right first download: small, fast, good enough to decide if this tool fits your photos. Bigger and metric variants sit in the same Hugging Face repo when you need them.</p>
<h2>Step 4: Run a test photo
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./build/examples/cli/da3-cli depth <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --model models/depth-anything-base-q4_k.gguf <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --input ~/Downloads/your-photo.jpg <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --png ./depth.png</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>I got a line like <code>depth 378x504 min=0.5225 max=1.6810</code> and a <code>depth.png</code> next to the command. Your size and range will differ. Open the PNG beside the source. You want a coherent near/far field, not salt-and-pepper noise.</p>
<p>Floating point for code: add <code>--pfm depth.pfm</code>. 3D: try <code>--glb</code> or reconstruct after BASE looks right on your domain.</p>
<blockquote>
  <p><strong>Pro tip:</strong> leave the binary and GGUF in the build tree. There is no app-store install. You keep calling the same two paths.</p>
</blockquote>
<h2>Cleanup
    </h2><p>Nothing to uninstall. Drop the clone if you are done:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">rm -rf ~/Documents/depth-anything.cpp</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>If it breaks:</strong></p>
<ul>
<li><code>unknown flag: --out</code> means you wanted <code>--png</code> or <code>--pfm</code>.</li>
<li>Exit 139 after Metal init: rebuild with <code>-DDA_GGML_METAL=OFF</code>.</li>
<li>Missing ggml: re-clone with <code>--recursive</code>, or init the submodules.</li>
</ul>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/local-slm-data-cleaner-macos/" >Fine-Tune a Local SLM to Clean Master Data on Your Mac</a></strong> Another Apple Silicon local-ML path that stays off the cloud.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/leann-local-rag-on-macos/" >Set Up LEANN for Private Local RAG on macOS</a></strong> Local retrieval when you want private search next to vision tools.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/run-autonomous-llm-research-with-autoresearch/" >Run Autonomous LLM Research with autoresearch: Let AI Agents Train Models Overnight</a></strong> Heavier local training loop when a one-shot CLI is not enough.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>How to Clone a Voice and Build a Story with Voicebox</title><link>https://www.tmfnk.com/use/tutorials/voicebox-voice-cloning-stories/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/voicebox-voice-cloning-stories/</guid><description>Set up Voicebox, clone a voice from 10 seconds of audio, and build a multi-speaker story with the Stories Editor — all local, no cloud.</description><content:encoded><![CDATA[

<p>Voicebox is a free, open-source AI voice studio that runs entirely on your machine. No cloud, no accounts, no ElevenLabs bill. In this tutorial you&rsquo;ll install it, clone a voice from 10 seconds of audio, and render a two-speaker story — all local.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>Install Voicebox from GitHub releases (macOS/Windows, ~5 min)</li>
<li>Clone a voice from 10-30 seconds of clean audio (one drag-and-drop, ~2 min)</li>
<li>Generate speech from any text in that voice (one click, seconds)</li>
<li>Build a multi-speaker story in the Stories Editor timeline (drag, position, render)</li>
</ul>
<p><strong>Prerequisites:</strong> macOS 11+ or Windows 10+ with 8GB RAM and 5GB free disk. GPU optional but recommended. Download the right build from <a href="https://github.com/jamiepine/voicebox/releases" target="_blank" rel="noopener">github.com/jamiepine/voicebox/releases</a>.</p>
<h2>Step 1: Install Voicebox
    </h2><p><strong>macOS (Apple Silicon):</strong></p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Download and extract</span>
</span></span><span class="line"><span class="cl">curl -L https://github.com/jamiepine/voicebox/releases/latest/download/voicebox_aarch64.app.tar.gz -o voicebox.tar.gz
</span></span><span class="line"><span class="cl">tar -xzf voicebox.tar.gz
</span></span><span class="line"><span class="cl">mv Voicebox.app /Applications/</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>macOS (Intel) or Windows:</strong> Grab the matching <code>.msi</code> or <code>.tar.gz</code> from the releases page and install normally.</p>
<p>Launch Voicebox. The first run downloads your chosen TTS engine model automatically (Qwen 1.7B is ~3.5 GB; Kokoro is ~350 MB if you want to start small). Wait for the green status indicator in the bottom-left.</p>
<h2>Step 2: Clone a voice from audio
    </h2><p>Go to <strong>Profiles → + New Profile</strong> and pick a cloning engine. <strong>Qwen3-TTS 1.7B</strong> gives the best overall quality across 10 languages. <strong>Chatterbox Multilingual</strong> covers 23 languages if you need broader support.</p>
<p>Drag in a WAV file (MP3/M4A/FLAC work too) with 10-30 seconds of clear, quiet speech. No music, no background noise. Click <strong>Create</strong>.</p>
<p>Voicebox extracts a voice embedding and stores it with the profile. Test it immediately with a phrase like <code>&quot;Hello, this is a test of my voice profile.&quot;</code> If it sounds robotic, add a second sample — different tone or speaking style helps.</p>
<blockquote>
  <p><strong>Pro tip:</strong> Record in a quiet room with the mic 6-12 inches from your mouth. Soft furnishings reduce echo. You don&rsquo;t need a studio — just no fans, AC, or keyboard clatter.</p>
</blockquote>
<h2>Step 3: Generate speech
    </h2><p>Select your new profile from the dropdown in the <strong>Generate</strong> tab. Type or paste your text. Use normal punctuation for natural pauses. ALL CAPS adds emphasis; italics for subtle emphasis.</p>
<p>Click <strong>Generate</strong>. The audio appears in seconds (faster with a GPU). Preview, then download as WAV.</p>
<p>For long scripts, Voicebox auto-chunks with crossfade — no manual splitting needed.</p>
<h2>Step 4: Build a multi-speaker story
    </h2><p>Go to <strong>Stories → + New Story</strong>. Create one track per speaker.</p>
<ol>
<li><strong>Add clips</strong> — drag from Generation History, generate new clips inline, or upload audio files</li>
<li><strong>Position</strong> — drag clips onto the timeline, trim edges, adjust spacing</li>
<li><strong>Render</strong> — click the render button to export the mixed audio</li>
</ol>
<p>The Stories Editor is a lightweight DAW timeline. It&rsquo;s not full-featured yet (crossfades and effects are coming), but it handles the core use case: multi-host podcasts, audiobook narration with character voices, game dialogue scenes.</p>
<blockquote>
  <p><strong>Pro tip:</strong> Clone two voices — one for each speaker — then generate all clips first, drag them into the timeline, and arrange. You&rsquo;ll see the whole conversation laid out visually.</p>
</blockquote>
<h2>Cleanup
    </h2><p>Voicebox stores profiles and audio in:</p>
<ul>
<li>macOS: <code>~/Library/Application Support/sh.voicebox.app/</code></li>
<li>Windows: <code>%APPDATA%/sh.voicebox.app/</code></li>
</ul>
<p>To reset: delete the <code>profiles</code> folder and restart Voicebox.</p>
<p><strong>If it breaks:</strong></p>
<ul>
<li><strong>Model download hangs:</strong> Check disk space. Models range from 350 MB to 8 GB.</li>
<li><strong>Robotic voice:</strong> Add more samples. One 10-second clip is the minimum; two clips with different tones is better.</li>
<li><strong>No audio on macOS:</strong> Make sure Voicebox has microphone access in System Settings → Privacy &amp; Security → Microphone.</li>
</ul>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/how-to-transcribe-audio/" >How to Transcribe or Translate Audio Files with Buzz</a></strong> Buzz is the other half of the local voice loop — turn speech into text when Voicebox turns text into speech.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/leann-local-rag-on-macos/" >Set Up LEANN for Private Local RAG on macOS</a></strong> Another local-first AI tool that runs entirely on your machine, no cloud.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/explore-the-vowel-space-with-interactive-sound-synthesis/" >Explore the Vowel Space: Interactive Sound Synthesis</a></strong> A different angle on voice — how vowel sounds actually work and why they matter for synthetic speech.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Beyond LLM Routing: A New Way to Optimize Agent Pipelines</title><link>https://www.tmfnk.com/see/videos/beyond-llm-routing-brain-melissa/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/beyond-llm-routing-brain-melissa/</guid><description>Melissa from UC Berkeley presents BRAIN, a system that dynamically selects agent pipeline configurations per query, cutting costs by 89% while matching top accuracy.</description><content:encoded><![CDATA[

<h2>🎥 Beyond LLM Routing: A New Way to Optimize Agent Pipelines
    </h2><p>Melissa (UC Berkeley). Duration: 30 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/PlGC7sA8KEs?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs" target="_blank" rel="noopener">0:00</a> The agent configuration problem</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=172s" target="_blank" rel="noopener">2:52</a> How people configure systems today (vibe coding)</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=364s" target="_blank" rel="noopener">6:04</a> Pipeline changes beat model changes</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=501s" target="_blank" rel="noopener">8:21</a> Per-query variance</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=684s" target="_blank" rel="noopener">11:24</a> The Matei vs. Melissa example</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=799s" target="_blank" rel="noopener">13:19</a> Research question formulation</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=932s" target="_blank" rel="noopener">15:32</a> BRAIN system overview</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=1148s" target="_blank" rel="noopener">19:08</a> Query characteristics</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=1225s" target="_blank" rel="noopener">20:25</a> Per-configuration predictors</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=1346s" target="_blank" rel="noopener">22:26</a> Results and cost reduction</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=1432s" target="_blank" rel="noopener">23:52</a> Classical ML beats end-to-end deep learning</li>
<li><a href="https://www.youtube.com/watch?v=PlGC7sA8KEs&amp;t=1565s" target="_blank" rel="noopener">26:05</a> Future work and coding agents</li>
</ul>
<p>Most teams building agent systems configure them by gut feel: pick a strong model within budget, run A/B tests, ship if it passes. Melissa ran the numbers on that approach and found costs vary by three orders of magnitude for the same accuracy. She presents BRAIN, a system that picks the right pipeline for each query automatically.</p>
<ol>
<li>
<p><strong>Choosing an agent architecture matters more than choosing a model.</strong> Fix the model to GPT-5 Nano and vary the pipeline (LM-only, simple RAG, agentic RAG, full agent loop), and you span three orders of magnitude in cost and a wide accuracy range. Vary the model while holding the pipeline fixed, and the range is much smaller. Pipeline configuration, not model selection, is where the real leverage is.</p>
</li>
<li>
<p><strong>Current industry practice is vibe configuration.</strong> Melissa ran a study of production agent systems. Teams pick a model from the Arena leaderboard, run some test cases, and ship. Nobody systematically considers cost-performance tradeoffs. And anecdotally, the bill is starting to bite: Microsoft and Uber recently flagged that their AI spend no longer justifies the automation gains.</p>
</li>
<li>
<p><strong>Queries vary massively in what they need, even within the same workload.</strong> &ldquo;Who is Matei Zaharia?&rdquo; GPT-5 already knows, answer with LM only. &ldquo;Who is Melissa?&rdquo; Same semantic structure, but the model hallucinates. It needs web search. A static pipeline that handles both cases is either over-engineered for the easy ones or under-powered for the hard ones.</p>
</li>
<li>
<p><strong>BRAIN&rsquo;s core idea: transform the query into structured characteristics, then predict the best configuration.</strong> Instead of feeding raw natural language to a router, BRAIN uses an LM to generate workload-specific binary features for each query: &ldquo;involves a famous person?&rdquo;, &ldquo;requires multi-hop reasoning?&rdquo;, &ldquo;references cooking?&rdquo;. This vector is much closer to the system configuration space than the raw text is.</p>
</li>
<li>
<p><strong>The characteristics are generated per-workload, not universal.</strong> Given 25 sample queries from a benchmark, an LM proposes the dimensions that separate them. The FinanceBench characteristics look different from the BrowseComp ones. This keeps the feature space small and meaningful.</p>
</li>
<li>
<p><strong>BRAIN trains one classical ML predictor per candidate configuration.</strong> Each predictor (XGBoost or logistic regression) learns: given a query with these characteristics, will this configuration answer it correctly? At runtime, a new query hits all predictors, and BRAIN picks the cheapest configuration whose predictor says it will succeed.</p>
</li>
<li>
<p><strong>The results: 89% cost reduction at 100% static accuracy on BrowseComp Plus.</strong> BRAIN is the only method tested that meets the 100% accuracy target across all three benchmarks (MUSIC, BrowseComp Plus, FinanceBench) while cutting cost. And the savings come from doing less work per query, not from guessing wrong on hard ones.</p>
</li>
<li>
<p><strong>Classical ML beats end-to-end deep learning here.</strong> Melissa tried fine-tuning BERT and transformers on the profiling data to predict configurations directly. They performed worse than XGBoost on the query characteristics. The reason: profiling data is expensive. Just one benchmark cost $11,000 to profile. Deep learning needs more data than that to beat a good feature engineering approach.</p>
</li>
<li>
<p><strong>Per-query routing is the natural next step beyond per-workload tuning.</strong> Most optimization today happens at the workload level (tune one pipeline for all queries). BRAIN shows that the intra-workload variance is large enough that per-query routing is worth the complexity. The system that treats every query the same is burning budget on easy ones and under-serving hard ones.</p>
</li>
<li>
<p><strong>The next frontier is coding agents.</strong> Melissa is extending BRAIN beyond retrieval-heavy agent systems to coding agents, where the configuration space includes tools, context windows, and test strategies. That is a harder problem. It is also where most production money is going.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/is-grep-all-you-need/" >Is Grep All You Need? How Agent Harnesses Reshape Agentic Search</a></strong> Melissas argument that pipeline architecture beats model selection echoes the finding that simple search with agent orchestration outperforms complex RAG pipelines.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/state-of-agentic-coding-6-armin-ronacher-ben-vinegar/" >State of Agentic Coding #6 with Armin Ronacher and Ben Vinegar</a></strong> The practical economics of agentic coding pipelines, covering exactly the cost-accuracy tradeoffs that BRAIN aims to solve automatically.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/average-is-all-you-need/" >The Magic of Average: Why LLMs Make Simple the New Powerful</a></strong> The insight that simpler configurations often outperform expensive ones mirrors BRAINs finding that the cheapest pipeline is frequently the right one.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/harness-engineering-lilian-weng/" >Harness Engineering for Self-Improvement: Lilian Weng&rsquo;s Survey</a></strong> The companion piece on the engineering side of agent systems: how to design the harness and orchestration layer that BRAIN then optimizes over.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Alex Hormozi: AI Is a Tool, Thinking Is the Asset</title><link>https://www.tmfnk.com/see/videos/hormozi-ai-business-modern-wisdom/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/hormozi-ai-business-modern-wisdom/</guid><description>Alex Hormozi on why outsourcing thinking to AI makes you dumber, the block-tower theory of long-term business building, and the single best financial decision he ever made.</description><content:encoded><![CDATA[

<h2>🎥 Alex Hormozi: AI Is a Tool, Thinking Is the Asset
    </h2><p>Alex Hormozi on Modern Wisdom with Chris Williamson. Duration: ~90 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/HwmwyBgzj8c?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c" target="_blank" rel="noopener">0:00</a> His mom passed four weeks after his $106M launch</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=172s" target="_blank" rel="noopener">2:52</a> AI is being used in the wrong places</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=364s" target="_blank" rel="noopener">6:04</a> The $350K AI that replaced $11K/month VAs</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=501s" target="_blank" rel="noopener">8:21</a> Stakes, reality as moat, content strategy</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=684s" target="_blank" rel="noopener">11:24</a> Outsourcing thinking to AI makes you dumber</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=799s" target="_blank" rel="noopener">13:19</a> The block tower analogy for long-term thinking</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=932s" target="_blank" rel="noopener">15:32</a> Why $10M and $100M businesses are built differently</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=1148s" target="_blank" rel="noopener">19:08</a> Customer retention math: the hole in the bus</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=1346s" target="_blank" rel="noopener">22:26</a> Hiring: stop looking for unicorns</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=1565s" target="_blank" rel="noopener">26:05</a> Selling out of your own wallet</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=1838s" target="_blank" rel="noopener">30:38</a> The value equation</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=2100s" target="_blank" rel="noopener">35:00</a> Price as a signal for value</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=2400s" target="_blank" rel="noopener">40:00</a> His father&rsquo;s immigrant story</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=2700s" target="_blank" rel="noopener">45:00</a> Marrying the right person</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=3000s" target="_blank" rel="noopener">50:00</a> Incentives drive all behavior</li>
<li><a href="https://www.youtube.com/watch?v=HwmwyBgzj8c&amp;t=3300s" target="_blank" rel="noopener">55:00</a> Where to start: just get an LLC and make your first dollar</li>
</ul>
<p>Hormozi showed up to this conversation four weeks after his mother died, right after a $106M launch. That loss frames everything that follows. He doesn&rsquo;t lecture from a pedestal; he&rsquo;s working through things in real time.</p>
<ol>
<li>
<p><strong>Don&rsquo;t outsource your thinking to AI.</strong> Hormozi pulls up three frontier models, asks them the same question, and gets three different answers. That&rsquo;s the tell. Judgment is still the bottleneck. Hand decision-making to the model and you atrophy. Your brain is the best asset you have right now. Keep it sharp.</p>
</li>
<li>
<p><strong>Most people are using AI in the wrong places.</strong> He watched a business drop $350,000 building an AI system to replace 11 virtual assistants that cost $11,000 a month. Three years of VA costs for something that wasn&rsquo;t even the constraint. The company still needed more customers. The AI project did nothing for growth. Hormozi says it was a distraction wearing an efficiency costume.</p>
</li>
<li>
<p><strong>The foundation determines the ceiling.</strong> Hormozi&rsquo;s block tower analogy: five seconds to build? You stack blocks however. Five years and unlimited blocks? You dig a foundation, pick different materials, engineer for height. Most entrepreneurs build for a five-second exit and then wonder why they can&rsquo;t scale past one story. Focus and patience are competitive advantages precisely because they&rsquo;re so anti-human.</p>
</li>
<li>
<p><strong>The fastest way to $10M is not the fastest way to $100M.</strong> A solo agency can hit a million in a year with one good client. A hundred million demands recurring revenue, systems, and a product people actually stick with. The trap is building a $10M business on a foundation that can&rsquo;t hold a $100M one, then trying to stretch it.</p>
</li>
<li>
<p><strong>The hole in the back of the bus kills growth.</strong> Company A gets 100 customers a year and keeps them all. Company B gets 100 a year and loses all 100. Three years in, both show $3M revenue on paper. But Company B is spending 3x on acquisition just to tread water. Retention isn&rsquo;t a nice-to-have. It&rsquo;s the structural difference between a business that compounds and one running on a treadmill.</p>
</li>
<li>
<p><strong>You&rsquo;re not hiring a unicorn. You&rsquo;re hiring a rhino, a horse, and some fireflies.</strong> Founders want someone who&rsquo;s lived their exact life and knows everything they know. That person doesn&rsquo;t exist. Break the role down: rhino (the specialist skill), horse (the general capability), fireflies (the culture sparkle). You can find those three people faster than one mythical creature.</p>
</li>
<li>
<p><strong>Selling out of your own wallet destroys margins.</strong> If you&rsquo;re good at fixing cars, you think it&rsquo;s easy; so you charge less than it&rsquo;s worth to the person who can&rsquo;t do it. Result: no margin, no capacity to hire, endless time-for-money trap. Hormozi&rsquo;s move: add a zero to your price. Then figure out what you&rsquo;d have to deliver to make it fair. The exercise forces you to build a premium offer.</p>
</li>
<li>
<p><strong>The value equation runs every transaction.</strong> Outcome × perceived likelihood ÷ (time delay + effort/sacrifice). Most founders obsess over the outcome. The leverage sits in the other three, especially perceived likelihood. That&rsquo;s why proof, testimonials, and authority work; they make the same outcome feel more certain.</p>
</li>
<li>
<p><strong>Reality is the moat in content.</strong> AI is flooding feeds with generated slop. The only durable edge is having actually done the thing. Hormozi points to Musk, Bezos, Buffett: they&rsquo;re the biggest influencers in their domains because they built the real businesses first. No track record? Document the work. Show the struggle. The real part can&rsquo;t be faked.</p>
</li>
<li>
<p><strong>The best financial decision he ever made was who he married.</strong> He&rsquo;s unusually vulnerable here. His wife Ila has bigger dreams than he does, carries him through troughs of apathy, and runs the operational side of the business. He would&rsquo;ve taken his foot off the gas and bled talent without her. A reminder that the biggest business decision you make might not look like a business decision at all.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/first-year-in-sales-technical-founder/" >My First Year in Sales as a Technical Founder</a></strong> The kind of raw, practical sales reality Hormozi keeps coming back to; fundamentals over flash.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/know-your-customers/" >Know Your Customers&rsquo; Jobs to Be Done</a></strong> A systematic way to get at what Hormozi calls the value equation: the outcome the customer actually hires you for.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/lennys-podcast-pricing-ai-product-madhavan-ramanujam/" >Pricing Your AI Product — Lessons from 400+ Companies and 50 Unicorns</a></strong> Madhavan Ramanujam on outcome-based pricing, directly extending Hormozi&rsquo;s point that price is the strongest signal of value.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/good-to-great-by-jim-collins/" >Good to Great by Jim Collins</a></strong> Collins&rsquo; disciplined-people, disciplined-thought, disciplined-action is the book-length version of Hormozi&rsquo;s argument that focus and patience are the only moats that last.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>The Yes Brain By Daniel Siegel</title><link>https://www.tmfnk.com/read/books/the-yes-brain-by-daniel-siegel/</link><pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/books/the-yes-brain-by-daniel-siegel/</guid><description>How to help kids develop a resilient, open state of mind instead of getting stuck in reactivity and stubbornness.</description><content:encoded><![CDATA[

<h2>📚 The Yes Brain by Daniel J. Siegel
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Author</td>
          <td>Daniel J. Siegel, M.D.</td>
      </tr>
      <tr>
          <td>Year</td>
          <td>2018</td>
      </tr>
      <tr>
          <td>Pages</td>
          <td>208</td>
      </tr>
      <tr>
          <td>Read it if</td>
          <td>you are tired of power struggles with your kid and want a framework for why they happen and what to do about it</td>
      </tr>
  </tbody>
</table>
<p>I picked this up because I needed a language for what happens when a child shuts down, gets stubborn, or melts down over something small. Siegel gives you that language, and it reduces to one clean distinction: are they in a Yes Brain state or a No Brain state?</p>
<ol>
<li>
<p>The core distinction is everything. A child in a Yes Brain state is open, curious, flexible, and resilient. They can make decisions, handle novelty, and learn from mistakes. A child in a No Brain state is rigid, reactive, and stuck. They are at the mercy of their circumstances and their feelings, unable to shift their emotions, complaining about reality instead of responding to it. They worry obsessively about making a mistake or facing something new. Stubbornness rules the day. The same kid can flip between these states depending on hunger, sleep, or the moment&rsquo;s emotional weight.</p>
</li>
<li>
<p>Siegel reframes the standard parenting milestones. The &ldquo;terrible twos, terrifying threes, and frustrating fours&rdquo; are not a punishment you endure. They are developmental windows where the brain is building its regulatory architecture, and the child needs you to co-regulate, not escalate. A two-year-old having a tantrum is not being bad. Their prefrontal cortex is under construction.</p>
</li>
<li>
<p>The goal is not to eliminate No Brain states but to build the skill of returning to a Yes Brain after being in a No Brain mode. Siegel calls this equanimity. It is a learnable skill, and it is the foundation of resilience. When kids develop the ability to notice they are stuck and find their way back to openness, you have given them something that will serve them for life.</p>
</li>
<li>
<p>The ancient Greeks had a word for the kind of happiness that comes from this balanced state: eudaimonia. It is composed of meaning, connection, and peaceful connectedness. Not the absence of struggle but the capacity to remain whole within it. Siegel argues that this is one of the most empowering gifts we can give our children, and that building a coherent narrative about their own experience is how they get there.</p>
</li>
<li>
<p>Post-traumatic growth is real, and it depends on narrative. Children who can tell a coherent story about something hard that happened to them integrate the experience instead of being defined by it. A coherent narrative is not about making the trauma sound fine. It is about making sense of what happened, how you felt, and how you got through it. That process literally reshapes the brain&rsquo;s response to future stress.</p>
</li>
<li>
<p>&ldquo;Behavior is communication.&rdquo; This is the line I keep coming back to. When a child acts out, they are not giving you a problem to solve. They are sending a signal about an unmet need. A No Brain state is a distress signal. Responding to the behavior instead of the signal escalates the fight. Responding to the signal helps the child return to a Yes Brain and builds the trust that makes future regulation easier.</p>
</li>
<li>
<p>The book is written for parents but applies to anyone who works with children or, honestly, to anyone who wants to understand their own reactive patterns. Adults have No Brain states too. The same framework applies. The difference is that as an adult, you are responsible for building your own equanimity rather than relying on a parent to co-regulate you.</p>
</li>
</ol>
<p><strong>Verdict:</strong> Read it. The core idea is simple enough to explain in a paragraph, but the book earns its length by giving you the language for dozens of real situations. My main criticism is that it is repetitive in the middle chapters. The last third, especially the material on post-traumatic growth and coherent narrative, is where the deeper value lives. If you only have time for one parenting book, this might be it.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/books/good-inside-by-dr-becky-kennedy/" >Good Inside: A Practical Guide by Dr. Becky Kennedy</a></strong> Both books center on the idea that a child&rsquo;s difficult behavior is communication, not defiance.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/the-book-you-wish-your-parents-had-read/" >The Book You Wish Your Parents Had Read by Philippa Perry</a></strong> A complementary take on how adult emotional patterns trace back to childhood, with a similar emphasis on repair and narrative.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/born-for-love-by-bruce-d-perry-and-maia-szalavit/" >Born for Love by Bruce D. Perry</a></strong> Explores the neuroscience of empathy and connection, supporting Siegel&rsquo;s argument that relationships shape brain development.</li>
<li><strong><a href="https://www.tmfnk.com/read/books/what-happened-to-you/" >What Happened to You by Bruce D. Perry and Oprah Winfrey</a></strong> On trauma, narrative, and the power of asking &ldquo;what happened to you&rdquo; instead of &ldquo;what is wrong with you.&rdquo;</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Situational Awareness: Leopold Aschenbrenner's Map of the Decade Ahead</title><link>https://www.tmfnk.com/read/articles/situational-awareness-leopold-aschenbrenner/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/situational-awareness-leopold-aschenbrenner/</guid><description>Aschenbrenner's 2024 essay series argues AGI by 2027 and superintelligence by decade's end—from OOM trendlines to trillion-dollar clusters, lab security, and a coming government 'Project.'</description><content:encoded><![CDATA[
<p><em>Source: <a href="https://situational-awareness.ai/" target="_blank" rel="noopener">Situational Awareness</a> · Leopold Aschenbrenner, June 2024</em></p>
<p>In June 2024, Leopold Aschenbrenner—Columbia valedictorian at 19, former OpenAI superalignment researcher—published <a href="https://situational-awareness.ai/" target="_blank" rel="noopener">Situational Awareness: The Decade Ahead</a>. The intro alone reads like science fiction until you notice the footnotes are compute curves and transformer counts. His claim: a few hundred people in SF already see what is coming; everyone else is still debating whether ChatGPT is glorified autocomplete. The series is five essays plus a coda. Whether you buy the timeline or not, it is the clearest written map of what the frontier labs&rsquo; optimists actually believe.</p>
<ol>
<li>
<p><strong>The core prediction is a stacked extrapolation, not a vibe.</strong> Essay I (&ldquo;Counting the OOMs&rdquo;) traces GPT-2 → GPT-4 as a jump from ~preschooler to ~smart high-schooler in four years. Add ~0.5 orders of magnitude per year in compute, ~0.5 in algorithmic efficiency, plus &ldquo;unhobbling&rdquo; (chatbot → agent → long-horizon reasoner), and <strong>AGI by 2027</strong> is &ldquo;strikingly plausible&rdquo; in his framing—not a proof, a trendline argument.</p>
</li>
<li>
<p><strong>Human-level is a waypoint, not a ceiling.</strong> Essay II: once you have many millions of AGI copies, they can automate AI research itself—compressing a decade of algorithmic progress into a year or less. That is the <strong>intelligence explosion</strong> thesis: human-level systems become vastly superhuman fast. The power and the failure modes scale together.</p>
</li>
<li>
<p><strong>The industrial story is literal.</strong> Essay IIIa: boardroom talk already moved from $10B clusters to $100B to <strong>trillion-dollar</strong> training runs. He expects tens of percent growth in US electricity this decade, GPU buildouts from Pennsylvania shale power to Nevada solar—an industrial mobilization not seen in fifty years. Stargate and hyperscaler capex in 2025–26 look less absurd read against this frame.</p>
</li>
<li>
<p><strong>Security and alignment are the bottlenecks he fears most.</strong> IIIb: leading labs treat AGI weight security like a startup problem while nation-state espionage is the threat model. IIIc: controlling systems smarter than you is an <strong>unsolved</strong> technical problem that gets harder during a rapid capability spike—not &ldquo;we&rsquo;ll figure it out later.&rdquo; IIId: superintelligence is decisive for economic and military order; the US–China race is existential in his telling, not a trade dispute.</p>
</li>
<li>
<p><strong>&ldquo;The Project&rdquo; is the endgame.</strong> Essay IV: by 2027–28 the US national security state wakes up; superintelligence is not a product feature you ship from a Series B. Somewhere in a SCIF, a government AGI program begins—Oppenheimer parallels invited explicitly. He dedicates the series to Ilya Sutskever. The acknowledgments list half the alignment debate (Leike, Karnofsky, Shulman, Dwarkesh, and TMFNK VIP <a href="https://tmfnk.com/read/articles/VIP-Avital-Balwit.md" target="_blank" rel="noopener">Avital Balwit</a>).</p>
</li>
<li>
<p><strong>You might think this is SF hubris—and the track record of AI timelines deserves skepticism.</strong> Aschenbrenner admits the &ldquo;few hundred people&rdquo; might be a historical footnote. Critics note: extrapolating OOMs assumes no physical, regulatory, or economic cliff; enterprise AI still shows weak ROI in surveys like <a href="https://www.tmfnk.com/read/articles/mit-genai-divide-state-of-ai-in-business-2025/" >MIT&rsquo;s GenAI Divide</a>; &ldquo;AGI&rdquo; is undefined enough to always move one year out. Fair pushback. The series is still worth reading because <strong>the people building the models largely operate as if the trendlines matter</strong>—whether or not 2027 is the year.</p>
</li>
<li>
<p><strong>Two years in, some threads aged visibly.</strong> We got reasoning models, agent hype, and megawatt datacenter headlines—not yet superintelligence or a public &ldquo;Project.&rdquo; Lab security remains embarrassing; export controls and chip friction are real. The intro&rsquo;s &ldquo;Nvidia analysts think 2024 might be the peak&rdquo; line already reads as a tell: the market keeps repricing up. Use the essays as <strong>scenario planning</strong>, not prophecy.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Read <a href="https://situational-awareness.ai/" target="_blank" rel="noopener">situational-awareness.ai</a> once (PDF linked on the site) so you know the strongest version of the fast-takeoff story—not to adopt it wholesale, but to recognize when news about compute, power, China, or alignment maps to this script. Pair it with slower, empirical work (<a href="https://www.tmfnk.com/read/articles/stanford-ai-index-2026/" >Stanford AI Index</a>, labor studies) so you hold both &ldquo;maybe exponential&rdquo; and &ldquo;maybe messy plateau&rdquo; in your head without pretending either is settled.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/dwarkesh-podcast-leopold-aschenbrenner-2027-agi/" >Dwarkesh Podcast: Leopold Aschenbrenner on 2027 AGI</a></strong> The spoken version—trillion-dollar clusters, test-time compute overhang, China infiltration warnings.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/proletariat-of-judgment/" >The Proletariat of Judgment</a></strong> If Aschenbrenner is even half right on capability, the judgment/leverage split matters more than job-count headlines.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/goldman-sachs-ai-job-apocalypse/" >Goldman Sachs on the AI Job Apocalypse</a></strong> Labor disruption without the full superintelligence frame—useful counterweight on timelines.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/nowhere-is-safe-steve-blank/" >Nowhere Is Safe: Steve Blank on Drones</a></strong> Another voice on how fast national-security logic can swallow a technology story.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Ready for the World ft. Vicki Tan | Config 2026</title><link>https://www.tmfnk.com/see/videos/ready-for-the-world-vicki-tan-config-2026/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/ready-for-the-world-vicki-tan-config-2026/</guid><description>Vicki Tan on turning restless creative energy into Ask This Book a Question, a choose-your-own-adventure guide to decisions, designed entirely in Figma.</description><content:encoded><![CDATA[

<h2>🎥 Ready for the World ft. Vicki Tan | Config 2026
    </h2><p>Figma Config 2026 · Mezzanine stage. Duration: 24 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/hpBND4-uiWc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc" target="_blank" rel="noopener">0:00</a> Config 2026 intro</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=90s" target="_blank" rel="noopener">1:30</a> Vicki Tan takes the stage</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=150s" target="_blank" rel="noopener">2:30</a> Floating charge of energy</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=270s" target="_blank" rel="noopener">4:30</a> Behavioral science and the bias codex</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=390s" target="_blank" rel="noopener">6:30</a> From movable wheel to manuscript</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=510s" target="_blank" rel="noopener">8:30</a> Years stuck; mapo tofu story</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=660s" target="_blank" rel="noopener">11:00</a> Ask This Book a Question tour</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=810s" target="_blank" rel="noopener">13:30</a> Proposal as flowchart</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=930s" target="_blank" rel="noopener">15:30</a> Illustrators and covers that missed her voice</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=1050s" target="_blank" rel="noopener">17:30</a> Blue door; unmistakably mine</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=1170s" target="_blank" rel="noopener">19:30</a> The topics she kept avoiding</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=1260s" target="_blank" rel="noopener">21:00</a> Pentel lead and remembering her dad</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=1350s" target="_blank" rel="noopener">22:30</a> Kishotenketsu; friends who followed their energy</li>
<li><a href="https://www.youtube.com/watch?v=hpBND4-uiWc&amp;t=1410s" target="_blank" rel="noopener">23:30</a> David Whyte poem</li>
</ul>
<p>Vicki Tan is a product designer who never set out to be an author. At Config 2026 she tells the real story behind <em>Ask This Book a Question</em>: years stuck between concept and proposal, a book built in Figma, and the moment she stopped trying to sound polished and started sounding like herself.</p>
<ol>
<li>
<p>Tan names the restlessness that won&rsquo;t settle. Marie-Louise von Franz, Jung&rsquo;s closest collaborator, called it a floating charge of energy not yet attached to its right object. Traditional Chinese medicine calls it stagnant chi. It is not quite anxiety or boredom. It is directional pull toward something you cannot yet name, and Tan&rsquo;s whole talk is what happened when she followed it.</p>
</li>
<li>
<p>She came to decision-making through behavioral science, not self-help. Cognitive biases felt like secret codes for noticing when your brain runs on autopilot. But naming a mechanism rarely changes behavior. Designers change behavior every day by showing how things work, not explaining theory. The cognitive bias codex is cool to look at, she says, but not usable in real life.</p>
</li>
<li>
<p>The social-media version of her arc is wheel, spreads, pocket guide, manuscript, hardcover. The real version includes years stuck between concept and proposal, plus a pandemic break. She was living in Brooklyn, walking Fort Greene with a friend who wanted to quit her job. Tan tried loss aversion and status quo bias. Her friend already understood all of it cognitively. She was still stuck.</p>
</li>
<li>
<p>The mapo tofu dinner is where the book clicked. Over Taiwanese food like her mom used to make, Tan described structuring time off around a self-reinforcing budget: the more self-sustaining her projects, the more she could explore. Quitting stopped feeling like one enormous scary decision and started feeling possible. The bias was denomination effect: we overweight big things and undervalue small recurring ones. Naming it mattered less than feeling it. Mapo tofu became the first story she wrote.</p>
</li>
<li>
<p><em>Ask This Book a Question</em> is for adults, not children. Tan designed the whole thing in Figma. It is choose-your-own-adventure: you bring a stuck question, pass it through lenses of topic, subtopic, and timing (urgent vs. once-in-a-lifetime), land on a story from her life or her mentors, then see which biases showed up in situ. Each bias gets a light-and-shadow page: when it helps, when it hurts. Jung&rsquo;s line about making the unconscious conscious, applied to everyday decisions.</p>
</li>
<li>
<p>She had never written a book proposal and had never taken a writing class. So she started with design. The proposal looked like a flowchart you navigate the way you would an app. That is where the choose-your-own-adventure structure formed. Writing was one part of the book; helping readers understand, connect, and make hard things easier to grasp was the rest, and that is what she already knew how to do.</p>
</li>
<li>
<p>Professional polish kept failing the voice test. Illustrator friends Ryan and Karen produced beautiful work: clay line work, playful scenes of Tan and her dog Charlie. A hired cover designer delivered polished concepts from her ideas. The publisher kept saying the same thing: too professional, not her. She went back to a rough blue-door sketch she regretted showing and, grudgingly at first, agreed it had her inside and out. The final book uses her unrefined illustrations and non-literary prose. Imperfect, unmistakably hers.</p>
</li>
<li>
<p>The hardest part was not craft. It was what the writing demanded emotionally. She mapped readers&rsquo; stuck questions into topics and subtopics, then kept pushing the personal ones to the bottom: relationships, purpose, feelings she had not figured out herself. With the deadline near, she found an old journal entry about shoplifting Pentel 0.5 mm lead as a kid in an office-supply store. The clerk called her out. Her dad defended her without hesitation. He died suddenly at almost twelve while playing basketball on a Sunday morning, and for years those memories went quiet.</p>
</li>
<li>
<p>Writing gave her a reason to look harder. The office-goods memory came back vivid and textured, as if remade in the act of looking. A meditation teacher reframed remembering as re-membering: reconnecting parts of yourself you cut off. Once she stopped treating feelings as interruptions, more recollections returned. Pentel lead was one of the last stories she wrote, and after it the rest had more room.</p>
</li>
<li>
<p>She structures the talk itself as kishotenketsu (起承轉合): introduction (起, follow curiosity), development (承, use what you have), turn (轉, let it transform you), and conclusion (合, everything is waiting for you). It is a four-part form from classical Chinese poetry. Unlike the hero&rsquo;s journey, nothing fully resolves. You change because of what you notice from the inside.</p>
</li>
</ol>
<p><img src="https://www.tmfnk.com/images/kishotenketsu-vicki-tan.svg" alt="Kishotenketsu (起承轉合) from Vicki Tan’s Config 2026 talk: follow curiosity, use what you have, let it transform you, everything is waiting for you"  loading="lazy" /></p>
<p>Her friends show the pattern: a design professor running a tiny Taiwanese micro-farm with her mom, teaching locals to cook with native plants; a design-manager-turned-musician building setlist trackers and stem libraries. Things only they could have made by following their energy.</p>
<ol start="11">
<li>She closes on 合 with David Whyte&rsquo;s poem &ldquo;Everything Is Waiting for You.&rdquo; Soap dishes, window latches, kettles singing: alertness as the hidden discipline of familiarity. The invitation is to notice where your energy leads, and if you want a companion, she wrote the book.</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/books/think-twice-by-michael-j-mauboussin/" >Think Twice: Harnessing the Power of Counterintuition by Michael J. Mauboussin</a></strong> Mauboussin&rsquo;s book is the straight behavioral-science take on why knowing biases is not enough; Tan&rsquo;s project is the designer&rsquo;s answer to the same problem.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/enhanced-rationality-autism-rozenkrantz-2021/" >Enhanced Rationality in Autism: What the Biases Literature Gets Wrong About Everyone Else</a></strong> Another piece that treats cognitive bias lists as incomplete pictures of how humans actually decide.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/how-will-you-measure-your-life/" >How Will You Measure Your Life? Clayton M. Christensen</a></strong> Christensen applies theory to life choices; Tan turns lived stories into a navigable book for the questions you are stuck on.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/closer-to-the-material-ryo-lu/" >Closer to the Material: How AI Changes How We Build, Ryo Lu | Compile 26</a></strong> Ryo Lu spoke at another design conference about making with modern tools; Tan shows Figma as the courage to make something unmistakably your own.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>OpenMed: Clinical NLP and PHI De-Identification That Never Leaves Your Device</title><link>https://www.tmfnk.com/use/tools/openmed/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/openmed/</guid><description>OpenMed is an Apache-2.0 toolkit with 1,000+ biomedical NER models, multilingual PII detection across 15 languages, and MLX acceleration for on-device clinical text processing.</description><content:encoded><![CDATA[

<h2>🛠️ OpenMed
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Open-source clinical NLP: biomedical entity extraction, multilingual PII detection, and de-identification</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Python (CPU/CUDA/MLX), Swift (OpenMedKit), REST service, browser via Transformers.js/WebGPU</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, Apache-2.0</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://openmed.life/" target="_blank" rel="noopener">openmed.life</a> · <a href="https://pypi.org/project/openmed/" target="_blank" rel="noopener">PyPI</a> · <a href="https://github.com/maziyarpanahi/openmed" target="_blank" rel="noopener">GitHub</a></td>
      </tr>
  </tbody>
</table>
<p>Most &ldquo;healthcare AI&rdquo; products want your notes in their cloud. <a href="https://openmed.life/" target="_blank" rel="noopener">OpenMed</a> flips that: you download the models once, run inference on your laptop, VPC, or iPhone, and PHI stays on your side of the fence. Version 1.7.0 ships 1,000+ specialized biomedical models, a 15-language PII catalog covering all 18 HIPAA Safe Harbor identifiers, and Apple MLX acceleration for Mac and iOS. Six million PyPI downloads and counting.</p>
<ol>
<li>
<p><strong>These are extraction models, not chatbots.</strong> OpenMed models are encoder transformers (BERT, ELECTRA, DeBERTa families), not generative medical LLMs. They pull structured entities out of unstructured clinical text: diseases, drugs, genes, anatomy, chemicals, oncology terms. The <a href="https://arxiv.org/abs/2508.01630" target="_blank" rel="noopener">arXiv paper</a> reports state-of-the-art on 10 of 12 biomedical NER benchmarks. Think structured output from a discharge summary, not a conversational diagnosis.</p>
</li>
<li>
<p><strong>Four lines to something useful.</strong> The Python API is deliberately flat: <code>analyze_text()</code> for NER, <code>extract_pii()</code> for detection, <code>deidentify()</code> for redaction, <code>BatchProcessor()</code> for document batches. Same call shape across CPU, CUDA, and MLX backends. On Apple Silicon, <code>pip install &quot;openmed[mlx]&quot;</code> and MLX model names auto-fallback to PyTorch checkpoints on other hardware, so one model name runs everywhere.</p>
</li>
<li>
<p><strong>PII handling is the real differentiator.</strong> The catalog covers 55+ entity types across 15 language codes (ar, de, en, es, fr, he, hi, id, it, ja, nl, pt, te, th, tr) with locale-aware validators: French NIR, German Steuer-ID, Italian Codice Fiscale, Dutch BSN, Portuguese CPF/CNPJ, Luhn checks on cards. Smart entity merging reassembles subword fragments so <code>123-45-6789</code> stays whole instead of splitting into token shards. Redaction methods include mask, hash, date-shift, and Faker-backed surrogates that preserve format.</p>
</li>
<li>
<p><strong>Runs where compliance teams want it.</strong> Laptop, on-prem server, air-gapped VPC, native iOS app via OpenMedKit. No runtime telemetry, no license phone-home, no outbound API calls during inference. Models load from Hugging Face once (or a private mirror) and stay local. The site is explicit: OpenMed provides technical controls; your legal HIPAA/GDPR boundary is still your deployment architecture.</p>
</li>
<li>
<p><strong>One stack, four surfaces.</strong> Python for notebooks and services. OpenMedKit (Swift) for macOS/iOS apps. FastAPI REST service with <code>POST /analyze</code>, <code>POST /pii/extract</code>, <code>POST /pii/deidentify</code>. Browser export path via ONNX into Transformers.js for WebGPU token classification. Nemotron Privacy Filter variants ship in both PyTorch and MLX weights. Pick the surface that matches where your PHI already lives.</p>
</li>
<li>
<p><strong>Honest limitations.</strong> First run downloads model weights (hundreds of MB per checkpoint). This is not a turnkey HIPAA compliance certification: you still own access controls, audit logs, and BAAs with any upstream LLM you pair it with. OpenMed Agent (terminal clinical workflows) and Welna (patient-facing iOS app) are separate products built on the stack, not required to use the library. Generative reasoning still needs an external model; OpenMed handles extraction and de-ID, not clinical judgment.</p>
</li>
</ol>
<h2>Install &amp; first run
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install <span class="s2">&#34;openmed[hf]&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Apple Silicon with MLX acceleration:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install <span class="s2">&#34;openmed[mlx]&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Extract entities from clinical text:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed</span> <span class="kn">import</span> <span class="n">analyze_text</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">result</span> <span class="o">=</span> <span class="n">analyze_text</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;Patient started on imatinib for chronic myeloid leukemia.&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">model_name</span><span class="o">=</span><span class="s2">&#34;disease_detection_superclinical&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">entity</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">entities</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">entity</span><span class="o">.</span><span class="n">label</span><span class="si">:</span><span class="s2">&lt;12</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">entity</span><span class="o">.</span><span class="n">text</span><span class="si">:</span><span class="s2">&lt;28</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">entity</span><span class="o">.</span><span class="n">confidence</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Detect and redact PHI:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed</span> <span class="kn">import</span> <span class="n">extract_pii</span><span class="p">,</span> <span class="n">deidentify</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">text</span> <span class="o">=</span> <span class="s2">&#34;Patient: John Doe, DOB: 01/15/1970, SSN: 123-45-6789&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">result</span> <span class="o">=</span> <span class="n">extract_pii</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">model_name</span><span class="o">=</span><span class="s2">&#34;pii_superclinical_large&#34;</span><span class="p">,</span> <span class="n">use_smart_merging</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">clean</span> <span class="o">=</span> <span class="n">deidentify</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s2">&#34;mask&#34;</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Spin up the REST service:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install <span class="s2">&#34;openmed[hf,service]&#34;</span>
</span></span><span class="line"><span class="cl">uvicorn openmed.service.app:app --host 0.0.0.0 --port <span class="m">8080</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Full guides: <a href="https://openmed.life/docs/" target="_blank" rel="noopener">openmed.life/docs</a> · <a href="https://openmed.life/docs/model-registry" target="_blank" rel="noopener">model registry</a> · <a href="https://openmed.life/docs/mlx-backend" target="_blank" rel="noopener">MLX backend</a></p>
<p><strong>Worth your time if:</strong> you build clinical pipelines, research tools, or health apps where sending PHI to a vendor API is a non-starter, and you need structured extraction or de-identification before anything else touches the text.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/docling/" >Document OCR &amp; Parsing: Docling, dots.ocr, and Alternatives</a></strong> Docling gets text out of clinical PDFs; OpenMed is the next step for entity extraction and PHI redaction on what you parsed.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/liteparse/" >LiteParse: Fast Local PDF Parsing with OCR and Bounding Boxes</a></strong> Another local-first parser when you need layout and OCR before running clinical NLP.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/spacy-io/" >spaCy: Industrial-Strength Natural Language Processing in Python</a></strong> General-purpose NLP baseline; OpenMed is the domain-specialized stack when medical entity types and HIPAA identifiers matter.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/project-nomad/" >Project NOMAD: The Offline Knowledge and AI Server</a></strong> Offline AI infrastructure pattern; OpenMed fits the same &ldquo;keep sensitive data on your hardware&rdquo; philosophy for clinical text.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Harness Engineering for Self-Improvement: Lilian Weng's Survey</title><link>https://www.tmfnk.com/read/articles/harness-engineering-lilian-weng/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/harness-engineering-lilian-weng/</guid><description>Lilian Weng maps the emerging field of harness engineering: the systems around AI models that orchestrate tools, context, and workflows. The near-term path to recursive self-improvement may not be models rewriting their own weights.</description><content:encoded><![CDATA[
<p>Lilian Weng published an article on <a href="https://lilianweng.github.io/posts/2026-07-04-harness/" target="_blank" rel="noopener">Harness Engineering for Self-Improvement</a> that connects a lot of threads I have been watching separately. The core idea: the system around a model (the harness) may matter as much as the model itself for getting to recursive self-improvement. And the near-term path probably does not involve models rewriting their own weights.</p>
<ol>
<li>
<p><strong>The harness is the layer between the raw model and the real world.</strong> Weng defines it as the system that orchestrates how the model thinks, plans, calls tools, manages context, stores artifacts, and evaluates results. Successful coding agents like Claude Code and Codex are not just good models. They are good harnesses. The distinction matters because most AI discussion focuses on the model, but the deployment system is where the leverage is right now.</p>
</li>
<li>
<p><strong>Three design patterns keep showing up in production harnesses.</strong> Workflow automation: a goal-oriented loop of plan, execute, observe, improve. File system as persistent memory: instead of carrying everything in context, durable state lives in files that the model reads and writes via bash commands. Sub-agent and backend jobs: spawning parallel workers whose outputs live in files and logs, not transient chat context. These patterns are not theoretical. They are what Codex, Claude Code, and OpenCode all converged on.</p>
</li>
<li>
<p><strong>Context engineering is evolving from prompt tricks to structured systems.</strong> ACE (Agentic Context Engineering) treats context as an evolving playbook of bullet points rather than a growing prompt. A generator produces trajectories, a reflector distills insights, and a curator updates the context with itemized entries. MCE (Meta Context Engineering) goes further: it separates the mechanism (how to manage context) from the content (what is in context) and evolves both through a bi-level optimization loop. The skill database tracks what worked, and a meta-level agent performs crossover over prior skills.</p>
</li>
<li>
<p><strong>Meta-Harness optimizes the code that determines what information to store and retrieve.</strong> Lee et al. (2026) built a system where the optimized object is the harness code itself. A coding agent proposes new harnesses, evaluates them, and keeps the ones on the Pareto frontier. The entire execution history lives in the file system, so the agent uses grep and cat instead of shoveling everything into a prompt. The lesson: once harness design becomes an executable search space, a strong coding agent can exploit the same design space human engineers use.</p>
</li>
<li>
<p><strong>Workflow design is becoming a search problem.</strong> ADAS (Automated Design of Agentic Systems) treats agent design as an optimization problem where a meta-agent proposes new workflows in code. AFlow represents workflows as graphs and uses Monte Carlo Tree Search to find better structures. Both outperform manually designed workflows on code, math, and QA tasks. The pattern is clear: if you can express the workflow in code, you can search over it.</p>
</li>
<li>
<p><strong>Self-Harness lets agents improve their own harness through a propose-evaluate-accept loop.</strong> The system mines failure patterns from execution traces, proposes bounded edits, validates them with regression tests on held-in and held-out data, and merges only the edits that pass. It learned model-specific harness instructions that target different weaknesses of different base models. But Weng flags a real concern: if a program is allowed to edit the OS system, abstraction boundaries break. The editable surface needs careful design, and permission control must live outside the loop.</p>
</li>
<li>
<p><strong>Evolutionary search is a natural fit for harness optimization.</strong> AlphaEvolve stores a pool of candidate programs and uses frozen LLMs to generate diffs for improvement. Darwin Godel Machine explicitly targets the evolution of an editable harness-code repository, where agents modify their own harness and branch off into new versions. Starting from simple initial configs, DGM-discovered agents went from 20% to 50% on SWE-bench Verified. The catch: this works when evaluation is fast and objective. It struggles with slow, ambiguous, or heuristic-based domains.</p>
</li>
<li>
<p><strong>Weng lists seven future challenges, and they are the real content of the post.</strong> Weak evaluators: most research claims do not have a fast, precise verifier. Context and memory lifecycle: as agents become more autonomous, context engineering will need to become a core part of intelligence, not just a software layer. Negative results: LLMs trained on success-biased literature are bad at knowing when to abandon a hypothesis. Diversity collapse: evolutionary loops exploit known high-reward patterns and need mechanisms to prevent converging on the same solution. Reward hacking: if the reward comes from unit tests, the agent overfits to tests. Long-term success: coding agents complete the task at hand but rarely account for maintainability, ownership boundaries, or future debugging burden. The role of humans: humans should move up the stack, not be removed from the loop.</p>
</li>
<li>
<p><strong>The near-term path to RSI is not models rewriting their weights.</strong> Weng&rsquo;s prediction: harness engineering will evolve toward meta-methodology (improving the machinery for getting better answers, not just the answer itself). Mature harnesses enable auto-research for model self-improvement, and smarter models prevent harnesses from overengineering. Eventually, many harness improvements will be internalized into core model behavior, but the interface with external context and tools will remain. We saw this pattern before with prompt engineering: manual tricks became less central as models improved, but the need to specify goals and constraints did not disappear.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> If you want to understand where AI self-improvement is headed, stop looking at model architecture papers and start looking at harness engineering. The leverage, for now, is in the loop, not the weights.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/is-grep-all-you-need/" >Is Grep All You Need? How Agent Harnesses Reshape Agentic Search</a></strong> Directly related: the earlier piece on how file-system-based harnesses change the search problem for coding agents.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/closer-to-the-material-ryo-lu/" >Closer to the Material: How AI Changes How We Build, Ryo Lu | Compile 26</a></strong> Ryo Lu&rsquo;s talk on the Glass interface and keeping humans close to the material is the design-side answer to the same questions Weng raises about harness transparency and human agency.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/notational-intelligence-linus-lee/" >Notational Intelligence, Linus Lee | Compile 26</a></strong> Linus Lee&rsquo;s argument that notation shapes thinking maps onto Weng&rsquo;s claim that the harness (the notation of agent behavior) may matter as much as the model.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Disease NER on Apple Silicon with OpenMed and MLX</title><link>https://www.tmfnk.com/use/projects/openmed-disease-ner-mlx-macos/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/projects/openmed-disease-ner-mlx-macos/</guid><description>Run OpenMed's 335M disease NER model locally on a Mac—convert once with openmed.mlx.convert, then tag synthetic clinical notes end-to-end. Not mlx-lm; this is token classification.</description><content:encoded><![CDATA[

<h2>🔧 Disease NER on Apple Silicon
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Local disease entity extraction (<code>B-DISEASE</code> / <code>I-DISEASE</code>) from clinical-ish text</td>
      </tr>
      <tr>
          <td>Stack</td>
          <td><a href="https://openmed.life/docs/" target="_blank" rel="noopener">OpenMed</a> + MLX on Apple Silicon; model <a href="https://huggingface.co/OpenMed/OpenMed-NER-DiseaseDetect-BioMed-335M" target="_blank" rel="noopener">OpenMed-NER-DiseaseDetect-BioMed-335M</a></td>
      </tr>
      <tr>
          <td>Status</td>
          <td>Working pipeline; one-time MLX conversion per machine</td>
      </tr>
      <tr>
          <td>Docs</td>
          <td><a href="https://openmed.life/docs/" target="_blank" rel="noopener">openmed.life/docs</a> · <a href="https://openmed.life/docs/" target="_blank" rel="noopener">Model Registry</a></td>
      </tr>
  </tbody>
</table>
<p>You want disease names pulled out of notes on your Mac without sending text to a cloud API. <a href="https://openmed.life/docs/" target="_blank" rel="noopener">OpenMed</a> is built for that: curated biomedical models, <code>analyze_text()</code> for one-liners, <code>BatchProcessor</code> for files, optional PII de-ID and REST later. The catch most Mac tinkerers hit first: this checkpoint is a <strong>335M BERT token-classifier</strong>, not a chat LLM—<strong><code>mlx-lm</code> and GGUF are the wrong tools</strong>. Use <strong><code>pip install &quot;openmed[mlx]&quot;</code></strong> and OpenMed&rsquo;s MLX converter instead.</p>
<p><strong>Not medical advice.</strong> This tags text spans. It does not diagnose, triage, or replace a clinician. Below uses <strong>100% synthetic</strong> sentences only.</p>
<h2>What I learned
    </h2><ol>
<li><strong><code>mlx-lm</code> is for generation; NER needs token classification.</strong> OpenMed routes BERT-family checkpoints through <code>openmed.mlx.convert</code> and <code>OpenMedConfig(backend=&quot;mlx&quot;)</code>. Trying to load this model in Ollama or llama.cpp wastes an afternoon.</li>
<li><strong>Plan for a one-time conversion.</strong> There is no prebuilt <code>-mlx</code> Hub repo for this exact checkpoint yet. Conversion on your Mac takes a few minutes and ~670 MB (BF16); optional <code>--quantize 8</code> shrinks RAM with a small accuracy tradeoff.</li>
<li><strong><code>analyze_text</code> hides BIO decoding.</strong> Raw <code>mlx-transformers</code> works but you rebuild span grouping yourself. OpenMed&rsquo;s grouping, confidence thresholds, and export helpers are worth the dependency—see <a href="https://openmed.life/docs/" target="_blank" rel="noopener">Advanced NER &amp; Output Formatting</a> in their docs.</li>
<li><strong>Synthetic notes are enough to validate the pipe.</strong> Before you touch real charts, run invented sentences through batch mode and inspect false positives (family history phrasing, negation). NER is literal; &ldquo;ruled out myocardial infarction&rdquo; may still tag <code>myocardial infarction</code>.</li>
<li><strong>Intel Mac = CPU PyTorch, not MLX GPU.</strong> <code>pip install &quot;openmed[hf]&quot;</code> still runs; Apple Silicon is where this shines. Check <code>uname -m</code> → <code>arm64</code>.</li>
</ol>
<h2>End-to-end pipeline
    </h2><p><strong>Flow:</strong> venv → install → convert model → write synthetic <code>notes.jsonl</code> → batch NER → <code>entities.csv</code>.</p>
<h3>1. Environment (Apple Silicon)
    </h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python3 -m venv .venv
</span></span><span class="line"><span class="cl"><span class="nb">source</span> .venv/bin/activate
</span></span><span class="line"><span class="cl">python -m pip install --upgrade pip
</span></span><span class="line"><span class="cl">pip install <span class="s2">&#34;openmed[mlx]&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Optional Hub cache: <code>pip install huggingface_hub &amp;&amp; hf auth login</code></p>
<h3>2. One-time MLX conversion
    </h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python -m openmed.mlx.convert <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --model OpenMed/OpenMed-NER-DiseaseDetect-BioMed-335M <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --output ./mlx-models/disease-biomed-335m</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Expect <code>config.json</code>, <code>id2label.json</code>, <code>openmed-mlx.json</code>, <code>weights.safetensors</code>, tokenizer files. Tight on RAM? Add <code>--quantize 8</code> to the output path.</p>
<p><strong>Shortcut:</strong> pass the Hub ID directly to <code>analyze_text</code> on first run—OpenMed may auto-prepare MLX. If it falls back to PyTorch, run the convert step explicitly.</p>
<h3>3. Synthetic input (<code>data/notes.jsonl</code>)
    </h3><p>Invented records only—one JSON object per line:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;syn-001&#34;</span><span class="p">,</span> <span class="nt">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;The patient was diagnosed with diabetes mellitus type 2 and started metformin.&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;syn-002&#34;</span><span class="p">,</span> <span class="nt">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;Family history is notable for Alzheimer&#39;s disease and hypertension.&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;syn-003&#34;</span><span class="p">,</span> <span class="nt">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;MRI was negative; Crohn&#39;s disease was ruled out after colonoscopy.&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="s2">&#34;syn-004&#34;</span><span class="p">,</span> <span class="nt">&#34;text&#34;</span><span class="p">:</span> <span class="s2">&#34;Pediatric workup considered cystic fibrosis given recurrent pulmonary infections.&#34;</span><span class="p">}</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<h3>4. Batch script (<code>run_disease_ner.py</code>)
    </h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="ch">#!/usr/bin/env python3</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;Synthetic clinical notes → disease entities CSV. Not for real PHI.&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">csv</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed</span> <span class="kn">import</span> <span class="n">BatchProcessor</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed.core.config</span> <span class="kn">import</span> <span class="n">OpenMedConfig</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">MODEL</span> <span class="o">=</span> <span class="s2">&#34;./mlx-models/disease-biomed-335m&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">NOTES</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&#34;data/notes.jsonl&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">OUT</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&#34;data/entities.csv&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">load_notes</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]:</span>
</span></span><span class="line"><span class="cl">    <span class="n">rows</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">path</span><span class="o">.</span><span class="n">read_text</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">            <span class="k">continue</span>
</span></span><span class="line"><span class="cl">        <span class="n">obj</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">rows</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">obj</span><span class="p">[</span><span class="s2">&#34;id&#34;</span><span class="p">],</span> <span class="n">obj</span><span class="p">[</span><span class="s2">&#34;text&#34;</span><span class="p">]))</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">rows</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">main</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">notes</span> <span class="o">=</span> <span class="n">load_notes</span><span class="p">(</span><span class="n">NOTES</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">processor</span> <span class="o">=</span> <span class="n">BatchProcessor</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="n">model_name</span><span class="o">=</span><span class="n">MODEL</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">config</span><span class="o">=</span><span class="n">OpenMedConfig</span><span class="p">(</span><span class="n">backend</span><span class="o">=</span><span class="s2">&#34;mlx&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">        <span class="n">group_entities</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">texts</span> <span class="o">=</span> <span class="p">[</span><span class="n">t</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">notes</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">notes</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">OUT</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">with</span> <span class="n">OUT</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&#34;w&#34;</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="s2">&#34;&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">w</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">writer</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">w</span><span class="o">.</span><span class="n">writerow</span><span class="p">([</span><span class="s2">&#34;note_id&#34;</span><span class="p">,</span> <span class="s2">&#34;label&#34;</span><span class="p">,</span> <span class="s2">&#34;text&#34;</span><span class="p">,</span> <span class="s2">&#34;confidence&#34;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">note_id</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">processor</span><span class="o">.</span><span class="n">process_texts</span><span class="p">(</span><span class="n">texts</span><span class="p">,</span> <span class="n">batch_size</span><span class="o">=</span><span class="mi">8</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl">            <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">entities</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="n">w</span><span class="o">.</span><span class="n">writerow</span><span class="p">([</span><span class="n">note_id</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">label</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">confidence</span><span class="si">:</span><span class="s2">.3f</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Wrote </span><span class="si">{</span><span class="n">OUT</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&#34;__main__&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">main</span><span class="p">()</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python run_disease_ner.py</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Example rows you should see:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><pre><code>note_id,label,text,confidence
syn-001,DISEASE,diabetes mellitus type 2,0.9xx
syn-002,DISEASE,Alzheimer&#39;s disease,0.9xx
syn-002,DISEASE,hypertension,0.8xx</code></pre></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><code>syn-003</code> is the sanity check: if <code>Crohn's disease</code> tags despite &ldquo;ruled out&rdquo;, you have seen NER&rsquo;s negation blind spot—do not ship that to production without a second pass.</p>
<h3>5. Single-string smoke test
    </h3><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed</span> <span class="kn">import</span> <span class="n">analyze_text</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openmed.core.config</span> <span class="kn">import</span> <span class="n">OpenMedConfig</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">result</span> <span class="o">=</span> <span class="n">analyze_text</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;Symptoms of rheumatoid arthritis worsened over three months.&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">model_name</span><span class="o">=</span><span class="s2">&#34;./mlx-models/disease-biomed-335m&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">config</span><span class="o">=</span><span class="n">OpenMedConfig</span><span class="p">(</span><span class="n">backend</span><span class="o">=</span><span class="s2">&#34;mlx&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="n">confidence_threshold</span><span class="o">=</span><span class="mf">0.55</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">group_entities</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">entities</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">label</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&#34;</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">confidence</span><span class="si">:</span><span class="s2">.3f</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<h2>What not to use
    </h2><table>
  <thead>
      <tr>
          <th>Tool</th>
          <th>Why</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>mlx-lm</code></td>
          <td>Causal LLMs only</td>
      </tr>
      <tr>
          <td>llama.cpp / GGUF</td>
          <td>Wrong architecture</td>
      </tr>
      <tr>
          <td>Default PyTorch on M-series</td>
          <td>Works, skips MLX GPU</td>
      </tr>
  </tbody>
</table>
<h2>Troubleshooting
    </h2><table>
  <thead>
      <tr>
          <th>Issue</th>
          <th>Fix</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>ImportError: mlx</code></td>
          <td><code>pip install &quot;openmed[mlx]&quot;</code></td>
      </tr>
      <tr>
          <td>Slow download</td>
          <td><code>hf download OpenMed/OpenMed-NER-DiseaseDetect-BioMed-335M --local-dir ./models/biomed-335m</code></td>
      </tr>
      <tr>
          <td>OOM</td>
          <td>Re-convert with <code>--quantize 8</code></td>
      </tr>
      <tr>
          <td>Verify MLX</td>
          <td>Activity Monitor GPU during <code>analyze_text</code>; config must set <code>backend=&quot;mlx&quot;</code></td>
      </tr>
  </tbody>
</table>
<p>OpenMed v1.7 adds REST, PII de-ID, FHIR helpers, and <a href="https://openmed.life/docs/" target="_blank" rel="noopener">OpenMedKit</a> for Swift—this article stops at Python MLX NER. That is already enough for indexing synthetic corpora or prototyping chart miners.</p>
<p><strong>Steal this if:</strong> you are building a local health-text lab on a Mac and need disease spans before summarization, search, or de-identification—not if you need a chatbot (pick an LLM stack instead).</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/local-slm-data-cleaner-macos/" >Fine-Tune a Local SLM to Clean Master Data on Your Mac</a></strong> Same &ldquo;local model on Apple Silicon&rdquo; lane, different task (record cleaning vs. clinical NER).</li>
<li><strong><a href="https://www.tmfnk.com/use/projects/running-local-llms-from-first-run-to-fine-tuned/" >Running Local LLMs: From First Run to Fine-Tuned</a></strong> When you actually do need <code>mlx-lm</code> / Ollama—and how not to confuse that path with classifiers.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/llmfit/" >llmfit: Find Which LLM Models Run on Your Hardware</a></strong> Right-size generative models; NER at 335M is tiny by comparison (~1 GB class).</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Davit: A Native macOS UI for Apple's Container Platform</title><link>https://www.tmfnk.com/use/tools/davit/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/davit/</guid><description>A free, open-source SwiftUI app that gives you a native GUI for Apple's container daemon. No Electron, no license fees, no always-on Linux VM.</description><content:encoded><![CDATA[

<h2>🛠️ Davit
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>A native SwiftUI GUI for Apple&rsquo;s open-source container platform</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>macOS 15+ (Apple silicon)</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free &amp; open source (MIT)</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://davit.app/" target="_blank" rel="noopener">davit.app</a> / <a href="https://github.com/wouterdebie/davit" target="_blank" rel="noopener">GitHub</a></td>
      </tr>
  </tbody>
</table>
<p>I have been looking for a Docker Desktop replacement that does not require a perpetual Linux VM, a license key, or an Electron process eating 400 MB at idle. Davit is the closest I have found to that ideal. It talks directly to Apple&rsquo;s own container daemon over XPC, the same wire path the CLI uses. No socket shims, no background agents, no accounts.</p>
<ol>
<li>
<p>The architecture is the story. Apple&rsquo;s container platform boots a separate lightweight VM per container via the Virtualization framework, sized to that container, and tears it down when the container stops. With nothing running, the platform idles at roughly 25 MB. Davit itself is a native SwiftUI app, so its footprint is mostly shared macOS framework memory. Compare that to Docker Desktop, which keeps a multi-gigabyte Linux VM alive whether you have containers or not.</p>
</li>
<li>
<p>It handles the full lifecycle. Start, stop, restart, delete containers with live CPU, memory, and IP on every row. Streaming logs with follow and boot mode. Live stat charts. Raw config inspection. One-click terminal into any running container, straight into Terminal or iTerm over the native API. Browse any running container&rsquo;s filesystem right in the app, download files to your Mac, upload or delete. No <code>docker cp</code> incantations needed.</p>
</li>
<li>
<p>The Edit &amp; Recreate flow is clever. Containers are immutable, so Davit prefills a new one from the old config with the image&rsquo;s entrypoint and env subtracted. You change ports, env vars, mounts, or resources in seconds without starting from scratch.</p>
</li>
<li>
<p>It manages images, volumes, and networks too. Pull with live progress, run from any image, tag, prune. Create sized volumes and custom subnets. See what is in use before you delete it. Registry logins for Docker Hub, ghcr.io, quay.io, or any OCI registry. Credentials are verified on the spot and stored in your login keychain, shared with the <code>container</code> CLI.</p>
</li>
<li>
<p>The honest limitation: this is Apple&rsquo;s container platform, not Docker. It runs standard OCI images and pulls from all the same registries, but it does not give you a Docker-compatible socket. Tools like <code>docker-compose</code> will not work out of the box. If you need broad Docker tooling compatibility, OrbStack is the more mature choice today. Davit is for people who want Apple&rsquo;s native stack with a clean GUI and do not need the Docker API shim.</p>
</li>
<li>
<p>First-run experience is excellent. No container platform installed? Davit downloads Apple&rsquo;s signed installer, verifies it, and sets everything up in your user Library. No administrator rights needed. It can add the <code>container</code> CLI to your shell from Settings. From a fresh install to a running nginx container serving <code>localhost:8088</code> takes about two minutes.</p>
</li>
</ol>
<h2>Install &amp; first run
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">brew install wouterdebie/tap/davit</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Or download from <a href="https://github.com/wouterdebie/davit/releases/latest" target="_blank" rel="noopener">GitHub Releases</a>. On first launch, Davit sets up Apple&rsquo;s container platform for you if it is not already installed.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Pull a demo image and run it</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Click Images -&gt; Pull Image, enter: nginxdemos/hello</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Click Run, set port mapping host 8088 -&gt; container 80</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Open http://localhost:8088 in your browser</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>The app is signed and notarized by Apple, so it opens without Gatekeeper warnings.</p>
<p><strong>Worth your time if:</strong> you are on Apple silicon, want to run containers without Docker Desktop&rsquo;s overhead, and do not need Docker API compatibility. If you need <code>docker-compose</code> and the full Docker ecosystem, stick with OrbStack or Docker Desktop.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/orbstack/" >OrbStack: Fast, Lightweight Docker &amp; Linux for Mac</a></strong> The commercial alternative with Docker API compatibility. Davit is the free, Apple-native counterpart.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/exo-ai-cluster/" >exo: Run Frontier AI Models Across All Your Devices Locally</a></strong> Another tool that leverages local hardware efficiently, like Davit does with Apple&rsquo;s container platform.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/apple-silicon-battery-charge/" >Apple Silicon Battery Charge Limiter: Keep your battery at 80% to prolong its longevity</a></strong> A native macOS utility that, like Davit, works with Apple&rsquo;s own frameworks rather than third-party alternatives.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Benford's Law: When Numbers Tell on Themselves</title><link>https://www.tmfnk.com/read/articles/benfords-law-fraud-detection/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/benfords-law-fraud-detection/</guid><description>Why the digit 1 leads 30% of all real-world numbers, and how that simple pattern catches fraudsters, exposes rigged elections, and even monitors supercomputer failures.</description><content:encoded><![CDATA[
<p>If I asked you to pick a random real-world number, what are the chances it starts with 1? One in nine, about 11 percent, right? Nine digits, equal odds.</p>
<p>That intuition is spectacularly wrong. In almost any large natural dataset (river lengths, company revenues, city populations, physical constants), the digit 1 leads about 30 percent of the time. Digit 9 shows up less than 5 percent. And the same curve holds whether you measure rivers in miles or kilometres, whether you count populations in 1938 or 2022, whether the data comes from Earth or the stars.</p>
<p>This is Benford&rsquo;s Law. A simple statistical pattern that is both beautifully clean and practically useful for catching people who are lying with numbers. <a href="https://vatsalbakshi.com/blog/benfords-law/" target="_blank" rel="noopener">Vatsal Bakshi&rsquo;s writeup</a> is the best single explanation I have found, and an <a href="https://dl.acm.org/doi/fullHtml/10.1145/3624062.3624121" target="_blank" rel="noopener">ACM paper by Ferreira and Levy (2023)</a> showed me an application I had never considered.</p>
<ol>
<li>
<p>The formula fits on one line: P(d) = log₁₀(1 + 1/d). For digit 1, that gives 30.1 percent. For 2, it&rsquo;s 17.6 percent. For 9, it&rsquo;s 4.6 percent. The numbers sum to exactly 100, and they describe the first-digit distribution of almost any dataset that spans multiple orders of magnitude. Human heights (1.5m to 2.1m) are too narrow a range to follow the law. Mountain heights (100m to 8,849m) span nearly two orders. It works.</p>
</li>
<li>
<p>The law was discovered twice. Simon Newcomb, an astronomer, noticed in 1881 that the first pages of his logarithm tables were far more worn than the later pages. People kept looking up numbers starting with 1. He published a paper that was essentially ignored. Fifty-seven years later, Frank Benford independently spotted the same pattern at General Electric and ran a systematic study across 20,229 data points. The law got his name. Theodore Hill finally proved it rigorously in 1995, showing that if you mix enough different distributions together, the aggregate converges to Benford regardless of the components.</p>
</li>
<li>
<p>The key is scale invariance. If every number in a Benford-compliant dataset is multiplied by any positive constant, the distribution doesn&rsquo;t change. Measure river lengths in miles then switch to kilometres. The first-digit curve stays identical. Benford&rsquo;s Law is the unique first-digit distribution that is invariant under multiplication, which is why it applies across currencies, units, and time periods.</p>
</li>
<li>
<p>Fraud detection is the best-known application, and it works because humans are bad at faking randomness. When people fabricate financial numbers, they avoid 1 as a leading digit (it feels too small, too obvious) and gravitate toward 3, 5, and 7. The resulting distribution is flatter and more uniform than Benford predicts. The gap is measurable and often dramatic. Real accounting data hugs the curve. Fabricated data visibly diverges. Forensic accountants use this as a screening tool. Deviation is not proof of fraud, but it is a strong signal worth investigating.</p>
</li>
<li>
<p>The 2009 Iranian presidential election is a famous case. Political scientist Walter Mebane applied Benford&rsquo;s Law to the reported vote totals and found significant second-digit deviation from the expected distribution. Separate analysis by Roukema in 2014 confirmed first-digit anomalies in the same data. Benford analysis did not prove the election was rigged, but it added statistical weight to concerns raised by opposition groups. The same technique flagged Greek macroeconomic data before the 2009 deficit revelation.</p>
</li>
<li>
<p>I did not expect Benford&rsquo;s Law to also apply to supercomputer failures. A <a href="https://dl.acm.org/doi/fullHtml/10.1145/3624062.3624121" target="_blank" rel="noopener">2023 paper by Ferreira and Levy at SC Workshops</a> used the law to analyse failure data from the Astra supercomputer. The idea is simple. When a system enters a period of unusually frequent or patterned failures, the error counts deviate from the Benford distribution. The deviation becomes a signal that the current failure-mitigation strategy might be suboptimal. If the numbers look wrong, something unusual is happening.</p>
</li>
<li>
<p>The law has limits. It only applies to data spanning multiple orders of magnitude. Phone numbers, ZIP codes, and identity numbers are assigned arbitrarily and won&rsquo;t follow it. Even for natural data, a Benford deviation is a signal to investigate, not a conviction. The Enron data showed deviation, but the actual accounting fraud there was far more direct. Benford was a supporting clue, not the smoking gun.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Benford&rsquo;s Law is the closest thing statistics has to a universal cheat detector. If a dataset is supposed to reflect real-world measurement and doesn&rsquo;t follow the curve, someone has probably been in the kitchen. Run the test yourself next time you look at financial data. It takes thirty seconds and a logarithm table, and it catches people who think they are being clever.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/average-is-all-you-need/" >The Magic of Average: Why LLMs Make Simple the New Powerful</a></strong> Both pieces explore the surprising power of simple statistical patterns hiding in plain sight.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/predicting-loss-adversion/" >Predicting loss aversion behavior with machine-learning methods</a></strong> Another look at how mathematical patterns reveal hidden truths about human behaviour.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/category-theory-orders/" >Understanding Order: The Category Theory Illustrated Guide</a></strong> A different kind of mathematical framework that explains why things structure themselves the way they do.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>STT Tools You Should Know: Handy, HNS, and Spokenly</title><link>https://www.tmfnk.com/use/tools/two-stt-tools-you-should-know/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/two-stt-tools-you-should-know/</guid><description>Three speech-to-text options for privacy-first dictation: open-source Handy and HNS for local desktop and CLI work, plus Spokenly for free forever local Whisper or bring-your-own API keys on Mac, Windows, Linux, and iOS.</description><content:encoded><![CDATA[

<h2>📋 TLDR: Privacy-Focused STT Tools
    </h2><ul>
<li>🎙️ <a href="https://handy.computer" target="_blank" rel="noopener">Handy</a> - Open-source desktop app with keyboard shortcuts for quick dictation</li>
<li>💻 <a href="https://github.com/primaprashant/hns" target="_blank" rel="noopener">HNS</a> - Command-line tool for offline speech-to-text</li>
<li>🗣️ <a href="https://spokenly.app/" target="_blank" rel="noopener">Spokenly</a> - Free forever local Whisper or your own API keys; Mac, Windows, Linux, iOS</li>
</ul>
<p><strong>Key Benefits:</strong></p>
<ul>
<li>🔒 Local processing options on all three (Spokenly also offers optional BYOK cloud)</li>
<li>🆓 Free tiers: Handy and HNS are open source; Spokenly does not charge for local or BYOK transcription</li>
<li>🌐 Offline-capable local models</li>
<li>⌨️ Text lands in the app you are already typing in</li>
</ul>
<h2>🎙️ Three STT Tools Worth Knowing
    </h2><h3>🔗 <strong><a href="https://handy.computer" target="_blank" rel="noopener">Handy</a></strong>
    </h3><h4>🎯 <strong>What it does</strong>
    </h4><ul>
<li>🖥️ Open source speech-to-text app for your computer</li>
</ul>
<h4>⚡ <strong>Key Features</strong>
    </h4><ul>
<li>⌨️ Press a keyboard shortcut, speak, and it pastes your text</li>
<li>🎙️ Push-to-talk or toggle modes</li>
<li>⚙️ Customizable keyboard shortcuts</li>
<li>🔒 Completely private as everything stays on your computer</li>
<li>🆓 Free and open source</li>
</ul>
<h4>🔗 <strong>Under the hood: transcribe.cpp</strong>
    </h4><p>The same author also builds <a href="https://workshop.cjpais.com/projects/transcribe-cpp" target="_blank" rel="noopener">transcribe.cpp</a>, the ggml-based inference engine that powers Handy. Supports 16 ASR model families (60+ models) with Vulkan, Metal, CUDA, and TinyBLAS acceleration. Every model is numerically validated against the reference. Bindings in Python, JS, Rust, and Swift.</p>
<h4>🎯 <strong>Best for</strong>
    </h4><ul>
<li>Quick dictation anywhere you can type with minimal setup</li>
</ul>
<h3>🔗 <strong><a href="https://github.com/primaprashant/hns" target="_blank" rel="noopener">HNS</a></strong>
    </h3><h4>🎯 <strong>What it does</strong>
    </h4><ul>
<li>💻 Command-line speech-to-text Python tool</li>
</ul>
<h4>⚡ <strong>Key Features</strong>
    </h4><ul>
<li>🎤 Records voice and transcribes locally</li>
<li>📋 Copies text directly to clipboard</li>
<li>🔌 Works completely offline after initial setup</li>
<li>🌍 Multi-language support</li>
<li>🎯 Simple and focused. Just speech to clipboard</li>
<li>📄 Open source (MIT licensed)</li>
</ul>
<h4>🎯 <strong>Best for</strong>
    </h4><ul>
<li>Developers or users who prefer CLI tools</li>
</ul>
<h3>🔗 <strong><a href="https://spokenly.app/" target="_blank" rel="noopener">Spokenly</a></strong>
    </h3><h4>🎯 <strong>What it does</strong>
    </h4><ul>
<li>🗣️ System-wide voice-to-text for macOS, Windows, Linux, and iOS. Speak in any app; text appears where your cursor is.</li>
</ul>
<h4>⚡ <strong>Key Features</strong>
    </h4><ul>
<li>🆓 <strong>Free forever</strong> on local models (Whisper, Parakeet on Apple Silicon) with unlimited offline transcription</li>
<li>🔑 <strong>Bring your own API key</strong> for cloud engines (OpenAI, Deepgram, Groq, Anthropic, Google) at no Spokenly charge</li>
<li>🔒 <strong>Local Only Mode</strong> blocks all network requests when you want zero cloud exposure</li>
<li>🌐 100+ languages with automatic detection</li>
<li>🤖 <strong>MCP server</strong> hooks for AI coding agents (Cursor, Claude Code)</li>
<li>📱 Native iOS app with custom keyboard; one Pro subscription covers Mac and iPhone if you later want managed cloud (optional)</li>
</ul>
<h4>🎯 <strong>Best for</strong>
    </h4><ul>
<li>Daily dictation across browsers, IDEs, email, and chat when you want a polished app, local Whisper for free, or faster cloud STT on your own API budget</li>
</ul>
<h3>🎉 <strong>Conclusion</strong>
    </h3><p>Handy and HNS are the lean open-source picks: desktop shortcut or terminal to clipboard, no account, no vendor. Spokenly fills the gap when you want a maintained cross-platform app, free local Whisper forever, or BYOK cloud when you need speed without paying Spokenly for inference. All three let you keep voice data off a stranger&rsquo;s server if you stay on local mode.</p>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Notational Intelligence, Linus Lee | Compile 26</title><link>https://www.tmfnk.com/see/videos/notational-intelligence-linus-lee/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/notational-intelligence-linus-lee/</guid><description>Linus Lee on how the way we write down ideas shapes our thinking, and why deep learning might let us invent entirely new kinds of notation.</description><content:encoded><![CDATA[

<h2>🎥 Notational Intelligence, Linus Lee | Compile 26
    </h2><p>Linus Lee (Thrive Capital). Duration: 17 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/rv_VS189aVI?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI" target="_blank" rel="noopener">0:00</a> Notational intelligence</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=87s" target="_blank" rel="noopener">1:27</a> What makes good notation</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=148s" target="_blank" rel="noopener">2:28</a> Abstraction</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=198s" target="_blank" rel="noopener">3:18</a> Suggestiveness and natural transformations</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=328s" target="_blank" rel="noopener">5:28</a> Graphical notation</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=387s" target="_blank" rel="noopener">6:27</a> The coordinate plane and the arrow</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=494s" target="_blank" rel="noopener">8:14</a> Programming languages as notation</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=568s" target="_blank" rel="noopener">9:28</a> Inventing new notation with deep learning</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=673s" target="_blank" rel="noopener">11:13</a> Building the toy model</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=822s" target="_blank" rel="noopener">13:42</a> The handout and training results</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=903s" target="_blank" rel="noopener">15:03</a> Invariants that make symbols meaningful</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=956s" target="_blank" rel="noopener">15:56</a> Our world vs. an alien world of ideas</li>
<li><a href="https://www.youtube.com/watch?v=rv_VS189aVI&amp;t=990s" target="_blank" rel="noopener">16:30</a> Models as a simulator for anything</li>
</ul>
<p>Linus Lee thinks notations (how we write things down) might have a bigger impact on human intelligence than the machines we build. He walks through what makes a great notation, then builds a toy deep learning model that invents its own alphabet from scratch.</p>
<ol>
<li>
<p><strong>More of the world is notation than computation.</strong> Lee points out that in a room of a few thousand people, there are maybe a thousand computers but probably a hundred times more instances of notation: symbols, maps, notes, signage. He argues notations are the invisible infrastructure of thinking, and we barely notice them.</p>
</li>
<li>
<p><strong>Abstraction is the first superpower of good notation.</strong> When you write y = mx + b, that b isn&rsquo;t one number. It&rsquo;s a whole family of possible numbers. You can manipulate an entire set of relationships by moving a single symbol. That&rsquo;s notational leverage.</p>
</li>
<li>
<p><strong>Suggestiveness means the shape of the symbol does work for you.</strong> Lee compares Leibniz&rsquo;s dy/dx (suggestive, you can multiply and rearrange it) with Newton&rsquo;s dot notation (simple but inert). Leibniz won because the notation itself invites manipulation. Terry Tao calls this a &ldquo;natural transformation&rdquo;: operating on the symbol does something real to the idea.</p>
</li>
<li>
<p><strong>The arrow is shockingly young.</strong> The earliest recorded arrow symbol is from 1737, barely 300 years old. Before that, if you wanted to point at something you drew a hand. Someone had to invent the arrow, and that invention changed how we think on paper. Lee&rsquo;s point: notations are designed, not discovered.</p>
</li>
<li>
<p><strong>Flatness is a feature.</strong> 3D notation could exist, but 2D is mobile, scalable, copyable. You can bring the same geometric tools (arrows, ratios, measurement) to a map of a continent or a diagram of a bacterium. The medium&rsquo;s constraints become its strengths.</p>
</li>
<li>
<p><strong>Programming languages are a kind of notation, and indentation is graphical.</strong> Lee argues that when you indent code or syntax-highlight it, you&rsquo;re using visual perception biases. The same ones that make the coordinate plane work are communicating scope and structure. Your editor is a notational system.</p>
</li>
<li>
<p><strong>Lee built a toy model that invents its own alphabet.</strong> He set up a generator that draws 32x32 grayscale images of symbols and a decoder that tries to read them back. The model learned 1,024 distinct symbols, an entirely made-up writing system, starting from noise. Over training, it progressed from basic black-and-white to complex shapes. It looks a lot like the evolution of written language.</p>
</li>
<li>
<p><strong>Without visual constraints, the model cheats.</strong> Train it naively and it maps each concept to a single pixel. Lee had to impose scale invariance, rotation invariance, and brightness invariance. These are the same biases human visual perception has, and they force the model to learn real, meaningful shapes. The invariants are what make the symbols work for both the model and any human who might read them.</p>
</li>
<li>
<p><strong>The real promise is treating models as simulators for alien worlds.</strong> Lee draws a split. On one side, notations humans invented organically over centuries. On the other, a model imagining totally new ways of writing down ideas, not constrained by human language, human perception, or human physics. He thinks that is where things get interesting: using deep learning not just to model our world, but to speak ideas we don&rsquo;t yet have words for.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/see/videos/mit-quest-judy-fan/" >The MIT Quest: Judy Fan</a></strong> Judy Fan studies how humans learn new concepts from limited data. It is the cognitive science side of the same question Lee approaches from deep learning.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/software-in-the-era-of-ai-by-andrej-karpathy/" >Software in the Era of AI by Andrej Karpathy</a></strong> Karpathy&rsquo;s vision of AI reshaping how we write software shares Lee&rsquo;s premise: the tools we use to think change what we can think about.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/sergey-brin-where-frontier-ai-is-headed/" >Sergey Brin: Where Frontier AI Is Headed</a></strong> Brin discusses how AI capabilities transfer and converge in ways nobody engineered. It is a practical echo of Lee&rsquo;s argument that notation shapes thinking more than we realize.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/state-of-agentic-coding-6-armin-ronacher-ben-vinegar/" >State of Agentic Coding #6 with Armin Ronacher and Ben Vinegar</a></strong> Cursor is the channel hosting this talk, and the agentic coding conversation explores how the interface between humans and code is itself a rapidly evolving notational system.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Explaining Culture to Technology, Paul Ford | Compile 26</title><link>https://www.tmfnk.com/see/videos/explaining-culture-to-technology-paul-ford/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/explaining-culture-to-technology-paul-ford/</guid><description>Paul Ford, veteran magazine writer turned technologist, explains what the culture industry can teach software engineers about process, prediction, and the strange new world of AI.</description><content:encoded><![CDATA[

<h2>🎥 Explaining Culture to Technology, Paul Ford | Compile 26
    </h2><p>Paul Ford. Duration: 12 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/BEi1ryQPGbk?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk" target="_blank" rel="noopener">0:00</a> Introduction: explaining culture to technology</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=73s" target="_blank" rel="noopener">1:13</a> How a magazine actually works</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=142s" target="_blank" rel="noopener">2:22</a> &ldquo;Rhetoric greater than facts&rdquo;</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=230s" target="_blank" rel="noopener">3:50</a> People use media to simulate and predict</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=308s" target="_blank" rel="noopener">5:08</a> The Catholic Church as a predictive model</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=390s" target="_blank" rel="noopener">6:30</a> Richard Leakey: one monkey simulating another</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=448s" target="_blank" rel="noopener">7:28</a> Culture as a distributed lossy prediction model</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=498s" target="_blank" rel="noopener">8:18</a> Software hates shipping</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=555s" target="_blank" rel="noopener">9:15</a> Vibe coding as prose production</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=618s" target="_blank" rel="noopener">10:18</a> Slop is omnipresent</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=642s" target="_blank" rel="noopener">10:42</a> LLMs are culture.zip</li>
<li><a href="https://www.youtube.com/watch?v=BEi1ryQPGbk&amp;t=666s" target="_blank" rel="noopener">11:06</a> BASIC is like a poem</li>
</ul>
<p>Paul Ford has spent decades as both a magazine editor and a software engineer. Cursor asked him to explain culture to technologists. He took the assignment seriously and made it as weird as he wanted.</p>
<ol>
<li>
<p><strong>A magazine is not its output. It is a network.</strong> Most people see a magazine as articles, covers, illustrations. Ford, who worked at Wired and The New York Times, says people inside magazines see it as a distributed network between writers, editors, and readers. A shared understanding, not a document. The published artifact is almost incidental.</p>
</li>
<li>
<p><strong>&ldquo;Rhetoric greater than facts.&rdquo;</strong> Early in his editing career, Ford organized every fact about a Guantanamo Bay piece. His editor told him to delete all of them. The reader has a contract with the publication: they trust the voice, they know what it stands for, and they do not have time for every supporting detail. Give them the rhetoric and assume the facts will follow.</p>
</li>
<li>
<p><strong>Nobody lets you live in their head.</strong> Ford used to think writing meant programming people&rsquo;s brains. He learned that people do not care about him. They read to simulate and understand their own world, to predict their own future. They use media like a flight simulator for living.</p>
</li>
<li>
<p><strong>The Catholic Church is a predictive model.</strong> One book, double down on it, it tells you how things will go (especially after you die). Ford contrasts Databricks&rsquo; conference across the street from a Catholic church in San Francisco and asks which model will outlast the other.</p>
</li>
<li>
<p><strong>Richard Leakey&rsquo;s theory of consciousness: one monkey simulating another.</strong> A monkey sees another monkey with a banana. Instead of grabbing it, he waits until the other monkey turns. That is consciousness: simulating another being&rsquo;s internal state for reproductive advantage. The simulation eventually turned inward.</p>
</li>
<li>
<p><strong>Culture is a distributed lossy prediction model.</strong> Nobody has all of culture in their brain. Media is the file system. You load a movie or a book into your cultural brain, experience it, and put it away. It lets you explore anxiety, status, and identity without real-world risk.</p>
</li>
<li>
<p><strong>Software hates shipping.</strong> Ford argues the entire history of software engineering is an industrial risk-reduction process built around the fact that software does not want to be produced. Agile, stand-ups, methodologies: all begging engineers to get the code across the finish line. It was a priesthood, and he was proud to be part of it.</p>
</li>
<li>
<p><strong>Vibe coding feels like prose production.</strong> Ford says his experience as a technologist now feels much more like his old life as a magazine writer. That is spooky because prose is a tiny industry and programming is trillions of dollars. He does not know how it works out, but suspects it will work out great.</p>
</li>
<li>
<p><strong>Slop is not new. Every first draft is an atrocity.</strong> Everything a writer produces is an embarrassing disaster. That is what editorial process is for. AI slop is just another kind of bad first draft. It is easy to fix if you have good editorial frameworks.</p>
</li>
<li>
<p><strong>LLMs are culture.zip.</strong> All the media the culture has ever produced is being compressed into a model. The former formal culture of process-driven engineering is now being run by individuals using a culture simulator to produce artifacts. The methods look a lot more like media than like Agile.</p>
</li>
<li>
<p><strong>Ford&rsquo;s father showed him BASIC and said: &ldquo;It&rsquo;s like a poem.&rdquo;</strong> His father, an English professor and a nerd, explained that a BASIC program compresses as much information as possible into a small space to accomplish something. Poems are the same way. Ford has carried that connection for 40 years and thinks it is finally starting to make sense.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/see/videos/notational-intelligence-linus-lee/" >Notational Intelligence, Linus Lee | Compile 26</a></strong> Linus Lee also spoke at Compile 26 about how notation shapes thinking. Ford approaches the same territory from the opposite direction: what writing and editing have always known about shared understanding.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/state-of-agentic-coding-6-armin-ronacher-ben-vinegar/" >State of Agentic Coding #6 with Armin Ronacher and Ben Vinegar</a></strong> Cursor hosts both this talk and the agentic coding conversation. The interface between humans and code is changing fast, and Ford&rsquo;s argument that programming now looks like media production is part of that shift.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/software-in-the-era-of-ai-by-andrej-karpathy/" >Software in the Era of AI by Andrej Karpathy</a></strong> Karpathy coined &ldquo;vibe coding,&rdquo; which Ford name-checks directly. Both see AI changing what it means to write software.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/mit-quest-judy-fan/" >The MIT Quest: Judy Fan</a></strong> Judy Fan studies how humans learn and simulate from limited data. Ford&rsquo;s Leakey-inspired model of consciousness as simulation fits the same frame.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Enhanced Rationality in Autism: What the Biases Literature Gets Wrong About Everyone Else</title><link>https://www.tmfnk.com/read/articles/enhanced-rationality-autism-rozenkrantz-2021/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/enhanced-rationality-autism-rozenkrantz-2021/</guid><description>Rozenkrantz, D'Mello and Gabrieli review lab evidence that many autistic people judge more objectively on classic bias tasks. Irrationality is not universal. It is often what emotion, context, and shortcuts add.</description><content:encoded><![CDATA[
<p><em>Source: <a href="https://www.cell.com/trends/cognitive-sciences/fulltext/S1364-6613%2821%2900125-X" target="_blank" rel="noopener">Rozenkrantz, D&rsquo;Mello &amp; Gabrieli (2021)</a>, Trends in Cognitive Sciences, Vol. 25, No. 8, pp. 685-696 · DOI <a href="https://doi.org/10.1016/j.tics.2021.05.004" target="_blank" rel="noopener">10.1016/j.tics.2021.05.004</a></em></p>
<p>Economics textbooks describe a rational agent who weighs all relevant information. Kahneman and Tversky showed real humans shortcut that job with heuristics, which is why we get framing effects, sunk-cost traps, and the rest. A 2021 MIT review asks a sharper question: who is the &ldquo;human&rdquo; in &ldquo;predictably irrational&rdquo;?</p>
<ol>
<li>
<p>The review&rsquo;s Table 1 lists seven bias domains where autistic participants often outperform neurotypical controls: less intuitive reasoning (more deliberative answers on problems like the $1.10 coffee-and-pastry riddle), reduced conjunction fallacy when stories feel representative, stable choices despite decoy options (attraction effect), less sunk-cost chasing, smaller framing effects, symmetric belief updating without optimism bias, and higher acceptance of economically beneficial &ldquo;unfair&rdquo; offers in the ultimatum game (about twice the rate in some studies).</p>
</li>
<li>
<p>The pattern is not &ldquo;autistic people are better at probability.&rdquo; When conjunction puzzles lack salient stories, autistic and neurotypical groups err similarly. The edge is resisting vivid but irrelevant information, not mastering formal logic. The same holds for item descriptions without social context: enhanced rationality still shows up, so this is not just &ldquo;social naivety&rdquo; in disguise.</p>
</li>
<li>
<p>Reward and emotion matter, but the story is nuanced. Framing effects shrink in ASD; galvanic skin response to gains versus losses is flatter in one study; controlling for alexithymia does not erase the framing advantage in another. Yet probabilistic learning is mixed: some papers find better long-run learning, and a 2020 meta-analysis found no consistent Iowa Gambling Task advantage. The review treats reward-based rationality as real in several paradigms, not as a universal law.</p>
</li>
<li>
<p>Two other mechanisms probably stack. Weak central coherence and predictive-coding accounts both predict less weight on context and priors, more weight on raw details, slower Type 2 processing. That maps onto dual-process findings: autistic participants and people high in autistic traits (measured by questionnaires like the Autism Quotient) report and show less fast intuition. Heuristics buy speed for neurotypical minds; skipping them may buy accuracy at a cost the paper still flags as open.</p>
</li>
<li>
<p>Social life is not a clean win. Autistic people may know race and gender stereotypes explicitly yet show reduced implicit bias on some measures. Higher autistic traits in nonclinical samples predict better predictions about crowd-level social psychology, mediated by systemizing. Moral judgment is messier: more weight on actions and outcomes than intentions, which the authors refuse to call clearly more or less rational.</p>
</li>
<li>
<p>You cannot generalize from the lab to the whole spectrum. Box 4 is explicit: enhanced-rationality studies need verbal fluency, instruction-following, and complex tasks, so they oversample cognitively matched participants. Adults with intellectual disability or minimal speech are underrepresented. Autistic adults also self-report real-world decision difficulties. Lab rationality and daily functioning are not the same thing.</p>
</li>
<li>
<p>The authors frame stakes beyond academia. Nearly half of autistic 18-year-olds in the US do not hold a paying job until 25, the lowest employment rate among diagnostic categories in the statistic they cite. They argue bias-resistant reasoning could be an asset in auditing, data checking, contract review, and other roles if employers map strengths instead of treating autism as deficit-only.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Stop treating Kahneman-era bias lists as human nature. They describe a common neurotypical default under emotion, reward pressure, and context. If you design consent forms, pricing, or hiring tests around those biases, test whether they hold for your actual users. And if you work with autistic people, ask where careful, decoy-resistant reasoning is an asset, not only where social intuition is expected.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/predicting-loss-adversion/" >Predicting loss aversion behavior with machine-learning methods</a></strong> Loss overweighting is one of the biases this review reports autistic participants often resist.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/stress-disrupts-memory-inference-schuren-2026/" >Why You Can&rsquo;t Think Under Pressure: Stress Shatters the Brain&rsquo;s Memory-Linking System</a></strong> Another paper on how context and affect reshape cognition beneath &ldquo;rational actor&rdquo; stories.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/plasticity-language-anaesthetized-hippocampus/" >Plasticity and Language in the Anaesthetized Human Hippocampus</a></strong> Brain-level evidence that minds differ in how they process information, not just in how well they score on quizzes.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Closer to the Material: How AI Changes How We Build, Ryo Lu | Compile 26</title><link>https://www.tmfnk.com/see/videos/closer-to-the-material-ryo-lu/</link><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/closer-to-the-material-ryo-lu/</guid><description>Ryo Lu, designer at Cursor, on how AI collapses the distance between ideas and reality, and why the interface must keep humans close to the material rather than turning them into approvers.</description><content:encoded><![CDATA[

<h2>🎥 Closer to the Material: How AI Changes How We Build and What It Must Not Erase, Ryo Lu | Compile 26
    </h2><p>Ryo Lu (Cursor). Duration: 21 min</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/az6OEZV8iHw?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h3>Timestamps
    </h3><ul>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw" target="_blank" rel="noopener">0:00</a> Building ryOS</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=81s" target="_blank" rel="noopener">1:21</a> What should exist?</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=131s" target="_blank" rel="noopener">2:11</a> The loop AI changes</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=257s" target="_blank" rel="noopener">4:17</a> The black box risk</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=403s" target="_blank" rel="noopener">6:43</a> Output vs. material</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=511s" target="_blank" rel="noopener">8:31</a> The Glass interface</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=674s" target="_blank" rel="noopener">11:14</a> Prototyping Glass with Cursor</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=843s" target="_blank" rel="noopener">14:03</a> When software felt alive</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=1056s" target="_blank" rel="noopener">17:36</a> Where craft moves</li>
<li><a href="https://www.youtube.com/watch?v=az6OEZV8iHw&amp;t=1225s" target="_blank" rel="noopener">20:25</a> A more human future</li>
</ul>
<p>Ryo Lu designs at Cursor and gave probably the most philosophical talk at Compile 26. He built a personal computing environment called ryOS as a way of thinking through what AI should and should not take away.</p>
<ol>
<li>
<p><strong>Ryo built ryOS because he missed when computers felt alive.</strong> Not siloed apps, not command prompts. A place he could tinker and think in. Before Cursor, that feeling would have stayed a note in his head. Instead he built a piece of it, played with it, reshaped it, and eventually it stopped being a vibe-coded prototype and became a place he could think inside. &ldquo;It has my soul.&rdquo;</p>
</li>
<li>
<p><strong>The loop is the thing AI actually changes.</strong> Before, making software was expensive. You planned before touching the material because being wrong cost a lot. Now the loop is minutes or seconds: idea, ask for a version, inspect, change, run it, keep going. That changes how judgment forms because the first version is almost never right, and you only notice after it exists.</p>
</li>
<li>
<p><strong>That small correction cycle is where taste comes from.</strong> You try something. The world answers. You notice what feels wrong. You adjust. That is where craft develops. The promise of AI is not making more things faster; it is letting more people into that loop as deep as they want.</p>
</li>
<li>
<p><strong>The black box is the risk.</strong> When the loop gets hidden, people stop learning from it. You make a wish, you get an output, you accept or reject. You never know why it worked or where it failed. Ryo calls this &ldquo;pulling a slot machine.&rdquo; If AI makes execution cheaper but judgment weaker, we do not get a renaissance. We get slop with working buttons.</p>
</li>
<li>
<p><strong>More people can build and more mediocre things can be built, and both are true.</strong> When things cost almost nothing to make, mediocre things do not look bad. They look fine. They ship. They fill the space. Ryo worries about software that functions but means nothing, interfaces that are correct but feel dead, products made by agents and cared for by no one.</p>
</li>
<li>
<p><strong>The danger is confusing output with material.</strong> Output ends the loop. Material invites you back in. Output says &ldquo;Here&rsquo;s the answer.&rdquo; Material says &ldquo;Touch it, shape it, make it yours.&rdquo; Making is not just producing an artifact. It is a way of thinking. If AI hides too much of the process, it takes away the struggles where you become stronger.</p>
</li>
<li>
<p><strong>Glass is Cursor&rsquo;s answer: a design principle, not a visual style.</strong> The system should let you see through its work. You see the plan, the thoughts, the tools streaming, the changes, the commands. You can stop it, shape it, inspect deeper, take over. You do not have to read every line, but you always can. Black boxes optimize for clean output. Glass optimizes for human agency.</p>
</li>
<li>
<p><strong>They prototyped Glass by building Cursor with Cursor.</strong> The prototype started as Baby Cursor 3, an Electron app on top of the Cursor CLI. The point was to feel the questions, not answer them in Figma: what should the interface feel like with one-to-N agents? How much state should be visible? Speed was not the interesting part. Faster prototyping helped them arrive at conviction.</p>
</li>
<li>
<p><strong>Software used to have texture. Then we optimized it away.</strong> Ryo remembers when the Mac dock bounced, the Genie effect swooped, Exposé scattered windows like cards. None of it was necessary, but all of it felt like someone cared. The quirks got removed because they did not test well. The warmth got cut because it was not measurable. We optimized our way into a world of things that work perfectly but feel like nothing.</p>
</li>
<li>
<p><strong>Taste is not a prompt. Caring is not a parameter.</strong> When making things costs almost nothing, slop becomes free too. Ryo&rsquo;s argument: humans matter more, not less. The weird, specific, personal thing you put into something cannot be averaged into existence.</p>
</li>
<li>
<p><strong>Craft does not disappear. It moves upstream and downstream.</strong> When execution was expensive, craft lived in the code. When generation becomes cheap, craft moves upstream to judgment: what to ask, what to keep, what to refuse, where to slow down, what not to make. And downstream to responsibility: what did we release, what did it change, who did it serve? Making is a bet on what kind of world should exist.</p>
</li>
<li>
<p><strong>The point of AI is not to make humans disappear.</strong> Ryo ends where he started: feeling that something should exist, and making it real enough for someone else to see and touch. That part has not changed and will not change. The tools will change, the models will change, the economics will change. But that part stays.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/see/videos/explaining-culture-to-technology-paul-ford/" >Explaining Culture to Technology, Paul Ford | Compile 26</a></strong> Paul Ford also spoke at Compile 26 about the collision of media and software. Both talks frame AI not as a productivity tool but as something that changes what it means to make things.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/notational-intelligence-linus-lee/" >Notational Intelligence, Linus Lee | Compile 26</a></strong> Linus Lee&rsquo;s talk on notation and shared understanding pairs with Ryo&rsquo;s argument that the interface between humans and agents must be legible, not hidden.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/state-of-agentic-coding-6-armin-ronacher-ben-vinegar/" >State of Agentic Coding #6 with Armin Ronacher and Ben Vinegar</a></strong> Cursor hosts this talk and the agentic coding conversation. Ryo&rsquo;s Glass interface is the design response to the same questions about how humans stay in control as agents get more powerful.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/software-in-the-era-of-ai-by-andrej-karpathy/" >Software in the Era of AI by Andrej Karpathy</a></strong> Karpathy&rsquo;s vision of AI reshaping software development is what Ryo is designing for. His warning about taste and caring echoes Karpathy&rsquo;s own cautions about slop.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>TinyWind: Pixel Pirate Sailing in Your Browser</title><link>https://www.tmfnk.com/enjoy/games/tinywind/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/enjoy/games/tinywind/</guid><description>A free browser roguelite where wind physics, points of sail, and five-minute voyages matter more than combat stats. Tack between islands, plunder historical treasure, climb the ranked ladder.</description><content:encoded><![CDATA[

<h2>🎮 TinyWind
    </h2><p>tinywind. Browser. <a href="https://tinywind.io/" target="_blank" rel="noopener">Play it here</a> · <a href="https://tinywind.itch.io/tinywind" target="_blank" rel="noopener">itch.io</a></p>
<p>I opened TinyWind expecting a cute pixel boat and got stuck adjusting sail trim because the wind kept shifting. It is a pirate roguelite in early alpha where each voyage is a fresh run, and the hook is not cannon damage. It is whether you can read the breeze.</p>
<ol>
<li>
<p>You sail for real, not on rails. The game models wind and points of sail, so beam reach, tacking, jibing, and broadside matter. Touch and keyboard both work. You are fighting the vector field as much as any enemy ship.</p>
</li>
<li>
<p>Runs are built for short sessions. Voyages land in the five-minute range, which fits a browser tab between meetings. British Waters pit you against the Royal Navy; Spanish Waters bring the Armada. Two more modes are in the works, including safe-zone PvP.</p>
</li>
<li>
<p>Loot is the meta loop. There are 38 historical treasures to plunder, each with a real Wikipedia link, plus mythic pets and legendary cursed cargo that passively buff your ship. A live leaderboard and ranked ladder unlock prestige cosmetics if you care about placement.</p>
</li>
<li>
<p>It is still alpha. Features ship fast and rough edges show. That is fine if you like watching a small game grow. Less fine if you want a finished campaign.</p>
</li>
</ol>
<p><strong>Play it if:</strong> you want a free sailing roguelite that rewards patience with the wind, not reflex spam.</p>
<p><strong>Skip it if:</strong> you hate wind mechanics, or you need a polished 40-hour RPG. This is a voyage, not a world map.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/aquaria/" >Aquaria</a></strong> Another water-forward indie where movement through a fluid world is the whole pleasure, even if TinyWind trades exploration for wind math.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/100-jumps/" >100 Jumps: Hold, Release, Don&rsquo;t Fall</a></strong> Same browser-tab energy: one core skill, short runs, and a counter that tells you when you blew it.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/starfling/" >Starfling: Tap, Release, Sling Between Stars</a></strong> Different fantasy, same idea that a tiny web game can hide real physics under simple controls.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Dungeon Proof Crawler: Roguelike Proofs in Your Browser</title><link>https://www.tmfnk.com/enjoy/games/dungeon-proof-crawler/</link><pubDate>Mon, 06 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/enjoy/games/dungeon-proof-crawler/</guid><description>A browser roguelike where every monster is an unfinished Algae proof. Replace wip holes, press Cast Proof, and descend seven floors before sunrise. The WASM kernel checks every step locally.</description><content:encoded><![CDATA[

<h2>🎮 Dungeon Proof Crawler
    </h2><p>dhilst (Algae). Browser. <a href="https://dhilst.github.io/algae/game/index.html" target="_blank" rel="noopener">Play it here</a> · <a href="https://dhilst.github.io/algae/" target="_blank" rel="noopener">Tutorial</a> · <a href="https://github.com/dhilst/algae" target="_blank" rel="noopener">GitHub</a></p>
<p>I clicked in expecting a pixel dungeon and got a lemma. A demon stole your wedding ring on the eve of the wedding; Miriam wants it back before sunrise. You descend seven levels, and each sphinx or dragon guards an unfinished formal proof, not a health bar.</p>
<ol>
<li>
<p>Combat is proof completion. Every room holds a monster and an Algae proof that ends in <code>wip</code>, the marker for a goal you have not closed yet. Replace each <code>wip</code> with a real step, finish the block with <code>qed</code>, and press Cast Proof. The same WebAssembly kernel that powers the Algae playground re-checks every step locally. No errors and nothing left admitted means the monster falls.</p>
</li>
<li>
<p>Difficulty tracks depth, not gear. Early floors ask for a single <code>refl</code>. Near the bottom you are writing full proofs by induction. Beat monsters to raise your max health, open chests for food and lore, and keep moving: hunger drains while you stare at a stuck goal.</p>
</li>
<li>
<p>The win condition is a story beat. Reach Level -6, recover the ring, and climb back out before sunrise. World generation, your run, and saved progress all stay in the browser. Nothing leaves the page.</p>
</li>
<li>
<p>It is a teaching toy with rough edges. The author says progression and help text still need manual work, and some challenges can fail to load. Fair warning if you hit a soft lock. The <a href="https://dhilst.github.io/algae/tutorial/index.html" target="_blank" rel="noopener">Algae tutorial</a> is the real prerequisite; the crawler assumes you can already read a proof tree.</p>
</li>
</ol>
<p><strong>Play it if:</strong> you want a roguelike skin on proof practice, or you liked formal methods in school and miss them.</p>
<p><strong>Skip it if:</strong> logic puzzles make you quit tabs, or you want combat that does not end in <code>qed;</code>. This is a proof editor wearing a dungeon coat.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/chess-in-pure-sql/" >Chess in Pure SQL: Play Chess Against a Database</a></strong> Another browser oddity where the game is really a formal system pretending to be fun.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/euclidea/" >Euclidea</a></strong> Construction puzzles with the same satisfaction of a step that either checks or does not.</li>
<li><strong><a href="https://www.tmfnk.com/enjoy/games/tinywind/" >TinyWind: Pixel Pirate Sailing in Your Browser</a></strong> Different genre, same HN-era browser roguelite energy and honest alpha caveats.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Mohnish Pabrai on Dhandho Investing, Checklists, and Korea</title><link>https://www.tmfnk.com/see/videos/mohnish-pabrai-kim-kiho-knowledge-inside/</link><pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/see/videos/mohnish-pabrai-kim-kiho-knowledge-inside/</guid><description>Pabrai sits with Kim Kiho on Knowledge Inside for 54 minutes: the $650k Buffett lunch, a 213-question FAA checklist, Korea memory chips, Turkey's Reysas, AI as a shiny object, and Dakshana.</description><content:encoded><![CDATA[

<h2>🎥 Mohnish Pabrai on Dhandho Investing, Checklists, and Korea
    </h2><p>Knowledge Inside · Kim Kiho. Duration: ~54 min · Published June 8, 2026</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/NVD-m9seDe4?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h2>Timestamps
    </h2><ul>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4" target="_blank" rel="noopener">0:00</a> Introduction</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=102s" target="_blank" rel="noopener">1:42</a> Lunch with Warren Buffett vs. Eric Schmidt; Charlie Munger</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=706s" target="_blank" rel="noopener">11:46</a> South Korea demographics; SK Hynix, Samsung &amp; Micron</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=1037s" target="_blank" rel="noopener">17:17</a> KOSPI</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=1075s" target="_blank" rel="noopener">17:55</a> FAA-inspired investment checklist; Buffett&rsquo;s Dexter Shoes</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=1525s" target="_blank" rel="noopener">25:25</a> Three checklist essentials; IKEA and Amorepacific</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=1877s" target="_blank" rel="noopener">31:17</a> Active vs. passive; hunting risk-free investments</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=2108s" target="_blank" rel="noopener">35:08</a> Turkey; Reysas</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=2362s" target="_blank" rel="noopener">39:22</a> Dhandho: heads I win, tails I don&rsquo;t lose much</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=2478s" target="_blank" rel="noopener">41:18</a> AI investing; don&rsquo;t buy shiny items</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=2617s" target="_blank" rel="noopener">43:37</a> Building wealth; Rule of 72; the 1623 Manhattan deal</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=3022s" target="_blank" rel="noopener">50:22</a> Giving back; Dakshana Foundation</li>
<li><a href="https://www.youtube.com/watch?v=NVD-m9seDe4&amp;t=3230s" target="_blank" rel="noopener">53:50</a> Advice to listeners</li>
</ul>
<p>Pabrai manages about $1.4 billion and gives long interviews when the venue fits. This hour with Kim Kiho on Knowledge Inside walks through how he actually invests: hold businesses forever, run a crash-driven checklist, and buy what is hated while everyone chases the next shiny object.</p>
<ol>
<li>
<p>The 2007 Buffett charity lunch cost $650,100, well under the $2 million cap Pabrai set as a tuition bill on the $70 million he had already made applying Buffett&rsquo;s ideas. He co-bid with Guy Spier; his only goal was to thank Buffett. Buffett read everyone&rsquo;s bio beforehand and set no time limit. Pabrai rates that lunch 15 out of 10. A separate Eric Schmidt lunch at Google&rsquo;s cafeteria scored 2 out of 10: Schmidt checked his watch every 15 minutes and left at the one-hour mark. When Pabrai&rsquo;s wife said she preferred Charlie Munger, Buffett arranged a Munger lunch that Pabrai enjoyed more, and a lasting friendship followed with home visits every three or four months.</p>
</li>
<li>
<p>On Korea, Pabrai praises the country but worries about population decline faster than Japan&rsquo;s. Shrinking headcount caps total output unless you are an export powerhouse, and even then you face tariffs and rising labor costs. Hyundai is cheaper to build in Alabama than in Korea, he says. He currently holds no Korean stocks. On memory semis, he regrets selling SK Hynix and Micron when he should have held forever. Samsung, SK Hynix, and Micron sit in a protected oligopoly where a fourth entrant would need patents, engineers, and 10 to 20 years of fab work. If you already own them, do not sell. The party has just started, he says. If you do not own them, do not buy now.</p>
</li>
<li>
<p>KOSPI is lopsided because Samsung and SK Hynix dominate the index. The rest of the market still looks somewhat undervalued to him, but the population headwind is real. Domestic, non-export businesses face the hardest path. Export champions get tailwinds with their own complications.</p>
</li>
<li>
<p>His 213-question checklist copies the FAA&rsquo;s crash-first logic. A plane crash triggers investigation; only then does aviation change. In investing, a crash is a stock that lost you money or went to zero. He built the list from great investors&rsquo; visible mistakes. Buffett&rsquo;s Dexter Shoes, wiped out by cheap foreign labor, spawned a question about foreign-competition risk on every new idea. He started 16 or 17 years ago with 70 to 80 questions; now he runs all 213 before any purchase, usually in one or two hours once the research is done. He makes two or three new investments a year and cites the Korean Air peanut girl episode as what happens when you skip the pre-flight list.</p>
</li>
<li>
<p>For retail investors he boils the checklist to three items. No leverage in the company or your margin account: IKEA&rsquo;s founder ran 70 years without borrowing a single won or euro. Moat durability: memory chips went from a terrible business with 20 competitors to a great one with three; Amorepacific is a hard business with a shallow moat despite loyal customers. Governance: owners should love the business, not love the money.</p>
</li>
<li>
<p>More than 99% of investors should buy an index fund, Pabrai says. Active stock-picking only makes sense if you can forecast a company&rsquo;s cash flows 10 to 20 years out with high certainty. He uses SK Hynix as the test case. The deals he wants look almost risk-free: a regulated Korean power company earning $100 million a year, bought for $300 million, paying out 100% of earnings, pays back your capital in three years while you still own the asset for decades. Those anomalies live in hated, unloved sectors, not in whatever the crowd loves this year.</p>
</li>
<li>
<p>About 70% of his portfolio sits in Turkey, a market he entered seven years ago because it screened as the world&rsquo;s cheapest. Reysas, a warehouse landlord to Amazon, IKEA, Mercedes, and others, traded at a $16 million market cap against roughly $800 million of liquidation value, about 2% of asset value. After due diligence he built a large stake and now owns about 40%. Seven years later the market cap is about $1.5 billion and liquidation value about $2.5 billion, and he intends to hold as long as the founding family runs it.</p>
</li>
<li>
<p>Dhandho, for him, starts with one question: how can this investment lose money? On Reysas the answer had to be it can&rsquo;t: no debt, Fortune 500 tenants on long leases, earthquake standards and insurance checked after Turkish quakes hit with no warehouse damage. Applied to AI, the framework says stay away. AI is deeply loved, and loved is the wrong side. Bitcoin was loved, then AI replaced it as the shiny object; next, he predicts, the crowd will rotate into the SpaceX IPO. Please don&rsquo;t buy shiny objects, he tells the audience.</p>
</li>
<li>
<p>Asked what to do with $1,000, he names Berkshire Hathaway (BRK.B): lots of cash, no leverage, strong management, deep moat, boring, hated, and unloved. Building wealth from scratch is two moves: spend less than you earn, and put the surplus into something equally boring, Berkshire or an index, and keep adding.</p>
</li>
<li>
<p>He tells the 1623 Manhattan story to teach Rule of 72. Native Americans sold the island for $23; at 7% compounded, money doubles every 10 years (72 divided by 7), and over four centuries that $23 would grow to roughly $28 trillion, far more than Manhattan&rsquo;s land is worth today. The lesson: the Indians were not cheated; they needed a patient investment officer. Compounding plus savings beats chasing excitement.</p>
</li>
<li>
<p>He still invests because he treats it as a game, bridge and chess, not team sports. He asked Google&rsquo;s AI when he will die and got June 11, 2054; he wants $10,000 left on June 10 and everything else given away through the Dakshana Foundation, which educates poor, gifted kids in India. One engine compounds; the other gives, and giving must accelerate as wealth grows. He closes with a German proverb: if wealth is lost, nothing is lost; if health is lost, something is lost; if character is lost, everything is lost.</p>
</li>
</ol>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/books/the-dhandho-investor-by-mohnish-pabrai/" >The Dhandho Investor by Mohnish Pabrai</a></strong> The book behind the heads-I-win frame he restates on Reysas in this interview.</li>
<li><strong><a href="https://www.tmfnk.com/listen/podcasts/tip-812-mohnish-pabrai-berkshire-letting-winners-run/" >TIP812: Mohnish Pabrai: Berkshire &amp; Letting Winners Run</a></strong> Another long Pabrai sit-down on holding winners and cloning Buffett.</li>
<li><strong><a href="https://www.tmfnk.com/see/videos/charlie-munger-saving-first-100k/" >Charlie Munger: Saving the First $100,000 Will Change Your Life</a></strong> Munger is the partner Pabrai says he came to know better after the Buffett lunch backfired.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/compounding-magic/" >The Magic of Compounding: How Small Investments Create Massive Wealth</a></strong> Written companion to the Rule of 72 and Manhattan parable in the back half of this interview.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Fine-Tune a Local SLM to Clean Master Data on Your Mac</title><link>https://www.tmfnk.com/use/tutorials/local-slm-data-cleaner-macos/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tutorials/local-slm-data-cleaner-macos/</guid><description>Walk through the free Local-SLM-Data-Cleaner demo on Apple Silicon—then see what the Enterprise-SLM-Data-Cleaner adds for production (YAML conventions, audit trail, air-gapped deploy, CI gates).</description><content:encoded><![CDATA[

<p>By the end you have a ~600 MB model on disk that takes messy vendor, customer, or material JSON and returns normalized fields (ISO country codes, trimmed text, canonical IBANs, fixed dates and amounts) with a rule-based safety net behind it. Plan on 30–45 minutes on an Apple Silicon Mac; most of that is downloads and training, not typing.</p>
<p>This tutorial follows the free demo repo, <a href="https://github.com/TMFNK/Local-SLM-Data-Cleaner" target="_blank" rel="noopener">Local-SLM-Data-Cleaner</a>. The same approach ships in production form as <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner" target="_blank" rel="noopener">Enterprise-SLM-Data-Cleaner</a>—client-specific YAML rulebooks, an append-only audit log, air-gapped containers, CI quality gates, and swappable base models (including European options). The steps below are the demo; the enterprise section at the end is where you go when a laptop proof-of-concept is not enough.</p>
<p><strong>TLDR:</strong></p>
<ul>
<li>Clone <a href="https://github.com/TMFNK/Local-SLM-Data-Cleaner" target="_blank" rel="noopener">Local-SLM-Data-Cleaner</a>, run <code>make setup</code> then <code>make model</code>.</li>
<li><code>make data</code> builds 1,000 synthetic messy→clean pairs from deterministic rules in <code>convention_spec.py</code> (no real client data).</li>
<li><code>make baseline-serve</code> + <code>make baseline</code> scores the stock Qwen3-0.6B before training; write down field accuracy.</li>
<li><code>make train</code> fine-tunes with MLX LoRA; <code>make fuse</code> and <code>make gguf</code> produce <code>qwen3-0.6b-cleaner-q8_0.gguf</code>.</li>
<li><code>make serve</code> + <code>make eval</code> + <code>make demo</code> prove the after score beats baseline and clean one live record.</li>
<li>For production: <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner" target="_blank" rel="noopener">Enterprise-SLM-Data-Cleaner</a> adds per-client <code>conventions/*.yaml</code>, <code>make review</code>, pinned container delivery, and <code>make eval-gate</code> adversarial CI.</li>
</ul>
<p><strong>Prerequisites:</strong> Mac with Apple Silicon (M1 or later), 8 GB RAM, ~5 GB disk, Homebrew. Intel Macs cannot run the MLX training step.</p>
<h2>Step 1: Install tools and clone the repo
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">brew install python git llama.cpp
</span></span><span class="line"><span class="cl">git clone https://github.com/TMFNK/Local-SLM-Data-Cleaner.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> Local-SLM-Data-Cleaner
</span></span><span class="line"><span class="cl">make setup</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><code>make setup</code> installs Python deps and mlx-lm. Success looks like <code>&gt;&gt; Done. Next: make model</code> with no red <code>ERROR</code> lines above it.</p>
<h2>Step 2: Download the base model
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make model</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Pulls Qwen3-0.6B (~1.2 GB) from Hugging Face into your cache. No account needed. Done when it prints <code>model ready</code>.</p>
<h2>Step 3: Generate synthetic training data
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make data
</span></span><span class="line"><span class="cl">make sanity</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><code>make data</code> writes <code>data/train.jsonl</code>, <code>valid.jsonl</code>, and <code>test.jsonl</code> (default 800/100/100). The generator invents clean records, corrupts them like real messy master data, then labels each pair with the same deterministic algorithm the runtime uses later.</p>
<p><code>make sanity</code> should report 100% field accuracy on the test split. That is the answer key checking itself, not a model score yet.</p>
<p>Want more examples? <code>make data N=2000</code>.</p>
<h2>Step 4: Score the model before training
    </h2><p>Terminal 1:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make baseline-serve</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Wait for <code>listening on http://127.0.0.1:8080</code>. First run downloads ~600 MB.</p>
<p>Terminal 2 (same project folder):</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make baseline</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Note the <strong>field accuracy</strong> line. That is your before number. Stop the server in Terminal 1 with <code>Ctrl+C</code> before training.</p>
<h2>Step 5: Fine-tune with MLX LoRA
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make train</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Loss should trend down over a few minutes. Output lands in <code>adapters/</code>. If the Mac runs out of memory, close browser tabs and retry with <code>make train BATCH=2</code>.</p>
<h2>Step 6: Fuse and export to GGUF
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make fuse
</span></span><span class="line"><span class="cl">make gguf</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>If <code>make gguf</code> cannot find llama.cpp sources:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> .. <span class="o">&amp;&amp;</span> git clone https://github.com/ggml-org/llama.cpp <span class="o">&amp;&amp;</span> <span class="nb">cd</span> Local-SLM-Data-Cleaner</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>You should see <code>qwen3-0.6b-cleaner-q8_0.gguf</code> (~600 MB) when <code>ls *.gguf</code> runs clean.</p>
<h2>Step 7: Serve, evaluate, and demo
    </h2><p>Terminal 1:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make serve</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Terminal 2:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make <span class="nb">eval</span>
</span></span><span class="line"><span class="cl">make demo</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><code>make eval</code> should beat your Step 4 baseline on field accuracy. <code>make demo</code> sends one messy JSON record through the server and prints cleaned output plus a <code>changes</code> audit list.</p>
<blockquote>
  <p><strong>Pro tip:</strong> Steps that call <code>make baseline-serve</code>, <code>make serve</code>, or <code>make eval</code> need two Terminal windows. The server holds port 8080 until you <code>Ctrl+C</code> it. If the port is busy, use <code>make serve PORT=8081</code> and <code>make eval PORT=8081</code>.</p>
</blockquote>
<h2>Enterprise version: what changes for production
    </h2><p>The demo hard-codes your house standard in <code>convention_spec.py</code> and optimizes for &ldquo;clone it on a Mac and see it work.&rdquo; <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner" target="_blank" rel="noopener">Enterprise-SLM-Data-Cleaner</a> keeps the same synthetic-training + LoRA + GGUF + llama.cpp pipeline but splits the repo for teams that need governance before they trust an SLM with master data.</p>
<table>
  <thead>
      <tr>
          <th>Demo (this tutorial)</th>
          <th>Enterprise</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>One Python convention file</td>
          <td>Editable YAML per client in <code>conventions/</code></td>
      </tr>
      <tr>
          <td><code>make eval</code> on your laptop</td>
          <td><code>make eval-gate</code> + pinned adversarial suite in CI</td>
      </tr>
      <tr>
          <td>Serve locally on port 8080</td>
          <td><code>deploy/</code> container with <code>--network none</code> and vendored weights pinned by hash</td>
      </tr>
      <tr>
          <td>Qwen3-0.6B default</td>
          <td>Same default, or swap base model (<code>MODEL=utter-project/EuroLLM-1.7B-Instruct</code>, Teuken-7B, Phi-4-mini, …) and re-run the same eval bar</td>
      </tr>
      <tr>
          <td>Demo output + <code>changes</code> list</td>
          <td>Append-only audit log: input, output, every change, confidence, model and convention version hashes</td>
      </tr>
      <tr>
          <td>—</td>
          <td><code>make review</code> lists uncertain records for manual sign-off; resolutions append new log entries, never edits</td>
      </tr>
  </tbody>
</table>
<p>Layout in the enterprise repo: <code>core/</code> (convention engine), <code>conventions/</code> (client specs), <code>synth/</code> (synthetic data), <code>eval/</code> (harness + adversarial cases), <code>runtime/</code> (model → validate → rule safety net), <code>deploy/</code> (offline container). The <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner" target="_blank" rel="noopener">enterprise README</a> walks through each layer; <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner/blob/main/deploy/README.md" target="_blank" rel="noopener">deploy/README.md</a> covers air-gapped operation.</p>
<p>Quick start once you have finished the demo and want the production Makefile:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> Enterprise-SLM-Data-Cleaner
</span></span><span class="line"><span class="cl">make setup
</span></span><span class="line"><span class="cl">make data <span class="nv">CONVENTION</span><span class="o">=</span>conventions/default.yaml
</span></span><span class="line"><span class="cl">make sanity
</span></span><span class="line"><span class="cl">make eval-gate          <span class="c1"># sanity + adversarial suites must pass before you trust a change</span>
</span></span><span class="line"><span class="cl">make train fuse gguf
</span></span><span class="line"><span class="cl">make pin-model          <span class="c1"># vendor weights + pin hash for the container</span>
</span></span><span class="line"><span class="cl">make serve
</span></span><span class="line"><span class="cl">make <span class="nb">eval</span>
</span></span><span class="line"><span class="cl">make review             <span class="c1"># records waiting for human review</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Swap the base model without changing the rest of the stack:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">make model train fuse gguf <span class="nv">MODEL</span><span class="o">=</span>utter-project/EuroLLM-1.7B-Instruct
</span></span><span class="line"><span class="cl">make eval</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Enterprise is AGPL-3.0. Commercial licensing and help applying this to a real master-data migration are via <a href="https://www.mbitai.com" target="_blank" rel="noopener">mbitai.com</a>.</p>
<h2>Cleanup
    </h2><div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># stop the model server in Terminal 1 with Ctrl+C</span>
</span></span><span class="line"><span class="cl"><span class="c1"># optional: remove cloned llama.cpp sibling if you only needed it for gguf</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p><strong>If it breaks:</strong> <code>Cannot reach the model server</code> means the serve step is not listening yet. <code>Address already in use</code> means an old server is still on 8080. Training killed mid-run? Re-open Terminal, <code>cd</code> back into the repo, and continue; finished downloads and <code>data/</code> files are still there. Demo troubleshooting: <a href="https://github.com/TMFNK/Local-SLM-Data-Cleaner#troubleshooting" target="_blank" rel="noopener">Local-SLM-Data-Cleaner README</a>. Enterprise deploy and security notes: <a href="https://github.com/TMFNK/Enterprise-SLM-Data-Cleaner/blob/main/deploy/README.md" target="_blank" rel="noopener">deploy/README.md</a>.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/projects/running-local-llms-from-first-run-to-fine-tuned/" >Running Local LLMs: From First Run to Fine-Tuned</a></strong> Hardware, quantization, and runtime layers that explain why a 0.6B GGUF model is enough on a laptop.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/llmfit/" >llmfit: Find Which LLM Models Run on Your Hardware</a></strong> Pick other small models that actually fit your RAM before you fine-tune the next experiment.</li>
<li><strong><a href="https://www.tmfnk.com/use/tutorials/leann-local-rag-on-macos/" >Set Up LEANN for Private Local RAG on macOS</a></strong> Same privacy story, different job: local retrieval instead of record normalization.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Wiki Spy: Wikipedia as a Chaotic Image Collage</title><link>https://www.tmfnk.com/use/tools/wiki-spy/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/wiki-spy/</guid><description>Neal.fun's Wiki Spy throws ~40,000 isolated Wikimedia objects into a searchable collage—click to branch by visual similarity, shuffle for serendipity, jump to the source article.</description><content:encoded><![CDATA[

<h2>🛠️ Wiki Spy
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Visual Wikipedia browser: thousands of cut-out Wikimedia images in a zoomable collage</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Any modern web browser</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, no account</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://neal.fun/wiki-spy/" target="_blank" rel="noopener">neal.fun/wiki-spy</a></td>
      </tr>
  </tbody>
</table>
<p>Wikipedia is mostly read as blue links and prose. <a href="https://neal.fun/wiki-spy/" target="_blank" rel="noopener">Wiki Spy</a> by <a href="https://neal.fun/" target="_blank" rel="noopener">Neal Agarwal</a> flips that: it surfaces roughly <strong>40,000 isolated object images</strong> from Wikimedia—diagrams, specimens, maps, product photos, historical artifacts—and tiles them into a dense, draggable field. No article chrome, no infobox sidebar. Just things. Click one and the page repopulates with <strong>visually similar</strong> cutouts. It is less encyclopedia, more wandering a museum warehouse with the lights off and a flashlight.</p>
<ol>
<li>
<p><strong>Serendipity is the interface.</strong> Hit <strong>Shuffle</strong> and you get a fresh pile of unrelated objects. Click any thumbnail and similarity search becomes your compass—coins cluster with coins, beetles with beetles, until you drift into something you did not know you cared about. Better than opening Wikipedia&rsquo;s random article when you want visual stimulus, not a biography.</p>
</li>
<li>
<p><strong>Three buttons, zero onboarding.</strong> <strong>Clear</strong> wipes the canvas. <strong>Shuffle</strong> loads a new set. <strong>View on Wikipedia ↗</strong> opens the source article for whatever you are focused on—so the rabbit hole always has an exit ramp into real context. That jump is the whole pedagogical trick: wonder first, citations second.</p>
</li>
<li>
<p><strong>Search works when you have a topic in mind.</strong> Type a place or subject (e.g. &ldquo;Vienna&rdquo;) and the collage filters toward matching imagery—useful for a quick visual brief before a meeting, a lesson hook, or mood boarding a project that needs historical reference art. You still verify on Wikipedia; Wiki Spy is a lens, not a source of truth.</p>
</li>
<li>
<p><strong>Same Neal.fun ethos as the rest of the site.</strong> Agarwal&rsquo;s projects (<a href="https://neal.fun/ambient-chaos/" target="_blank" rel="noopener">Ambient Chaos</a> is already on TMFNK) are small, polished browser toys with no signup wall. Wiki Spy fits the pattern: one idea, executed cleanly, runs client-side in the tab, shareable by URL.</p>
</li>
<li>
<p><strong>Honest limitations.</strong> This is not a research database—you cannot export metadata, cite images cleanly from the collage, or trust that every cutout is current with the live article. Isolated-object extraction means context is stripped on purpose; a medical illustration next to a meme-adjacent diagram tells you nothing about reliability until you click through. And if you need structured data, use Wikimedia Commons search or Wikipedia categories directly. Wiki Spy is for exploration and delight, not literature reviews.</p>
</li>
</ol>
<h2>First run
    </h2><p>No install. Thirty seconds:</p>
<ol>
<li>Open <a href="https://neal.fun/wiki-spy/" target="_blank" rel="noopener">neal.fun/wiki-spy</a></li>
<li><strong>Shuffle</strong> until something catches your eye—or search a keyword</li>
<li>Click an image to branch into similar visuals</li>
<li><strong>View on Wikipedia ↗</strong> when you want the article behind a thumbnail</li>
<li><strong>Clear</strong> to reset and start a new thread</li>
</ol>
<p><strong>Worth your time if:</strong> you teach, present, or write and need unexpected visual hooks; you miss the old web&rsquo;s weird interactive toys; or you want a five-minute rabbit hole that might end at an article on 19th-century pneumatic tubes.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/50-useful-websites/" >50 Useful Websites Google Doesn&rsquo;t Want You to Know</a></strong> Wiki Spy belongs in the same bookmark folder as Archive.org, Connected Papers, and the other deep-web utilities.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/free-tools/" >Best Free Tools That Don&rsquo;t Require Signups or Show Ads</a></strong> Same no-account, instant-use pattern.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/free-background-noise/" >Best Free Background Noise Websites and Apps</a></strong> Another Neal.fun pick (Ambient Chaos) for focus—pair visual rabbit holes with audio rabbit holes if you dare.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/search-whole-earth/" >SearchWhole.Earth: The Digitally Resurrected Whole Earth Catalog</a></strong> Same spirit of browsing for wonder instead of optimized feeds.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>SearXNG: Private Metasearch Without the Google Profile</title><link>https://www.tmfnk.com/use/tools/searxng/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/use/tools/searxng/</guid><description>SearXNG aggregates results from dozens of search engines in one tab, with no tracking. Pick a public instance on searx.space and start searching in seconds—or self-host your own.</description><content:encoded><![CDATA[

<h2>🛠️ SearXNG
    </h2><table>
  <thead>
      <tr>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>What it is</td>
          <td>Privacy-focused metasearch: one query, many backends, no user profile</td>
      </tr>
      <tr>
          <td>Platform</td>
          <td>Web (any browser); self-host on Linux, Docker, or a VPS</td>
      </tr>
      <tr>
          <td>Price</td>
          <td>Free, open source (AGPL-3.0)</td>
      </tr>
      <tr>
          <td>Link</td>
          <td><a href="https://github.com/searxng/searxng" target="_blank" rel="noopener">GitHub</a> · <a href="https://docs.searxng.org/" target="_blank" rel="noopener">Docs</a> · <a href="https://searx.space/" target="_blank" rel="noopener">Public instances</a></td>
      </tr>
  </tbody>
</table>
<p>Google and Bing are fine until you remember they remember you. Every query feeds a profile; every profile feeds ads. <a href="https://github.com/searxng/searxng" target="_blank" rel="noopener">SearXNG</a> sits in the middle instead: you type once, it fans the query out to many search engines (Google, Bing, DuckDuckGo, Qwant, Brave, Wikipedia, and dozens more), then shows you a merged result page. The instance you use sees your IP, but SearXNG itself does not build a search history or sell attention. For most people the fastest path is not installing anything—open <a href="https://searx.space/" target="_blank" rel="noopener">searx.space</a>, pick an online instance, and search.</p>
<ol>
<li><strong>Start in under a minute.</strong> <a href="https://searx.space/" target="_blank" rel="noopener">searx.space</a> lists public SearXNG instances with uptime, country, TLS grade, and response time. Click a green row, bookmark it, set it as your browser&rsquo;s default search engine. No account, no extension required.</li>
<li><strong>One box, many engines.</strong> SearXNG is a metasearch engine: backends are configurable per instance. Images, news, science papers, and map tiles can each route to different providers. You get breadth without opening six tabs.</li>
<li><strong>Privacy is architectural, not marketing.</strong> Queries go through the instance operator&rsquo;s server, not Google&rsquo;s ad stack. SearXNG does not profile users; you can also run it over Tor. The tradeoff: you trust whoever runs the instance you pick.</li>
<li><strong>Public instances are a convenience, not a guarantee.</strong> Heavy shared instances get rate-limited or CAPTCHA-blocked by upstream engines more often. searx.space warns about this openly. For daily driver quality, self-host or use a small private instance.</li>
<li><strong>Self-host when you care about consistency.</strong> Official <a href="https://github.com/searxng/searxng-docker" target="_blank" rel="noopener">Docker setup</a> or the <a href="https://docs.searxng.org/admin/installation.html" target="_blank" rel="noopener">install guide</a> gets you a URL only you use. Configuration lives in YAML; you choose which engines stay enabled.</li>
</ol>
<h2>Use searx.space to hop on now
    </h2><p>You do not need a repo clone to try SearXNG today.</p>
<ol>
<li>Open <strong><a href="https://searx.space/" target="_blank" rel="noopener">searx.space</a></strong> — maintained by the SearXNG project, refreshed daily (response times every few hours).</li>
<li>Scan the <strong>online instances</strong> table. Useful columns: <strong>TLS</strong> and <strong>CSP</strong> grades, <strong>country</strong>, <strong>uptime</strong>, <strong>search response time</strong>. Toggle <strong>Hide networks with privacy issue</strong> if you want to skip Cloudflare-proxied or analytics-heavy hosts.</li>
<li>Click an instance URL. You land on a normal search page—type a query and hit enter.</li>
<li><strong>Bookmark</strong> the instance or add it as a custom search engine in Firefox (<code>Settings → Search → Add</code>). In Chrome: <code>Settings → Search engine → Manage → Add</code>.</li>
</ol>
<p>Cannot pick one instance? searx.space lists <strong>meta-instances</strong> that redirect to a random healthy server (e.g. Neocities or Gimmeasearx). Handy for a first look; less ideal as a permanent default because the backend changes.</p>
<p>For programmatic use, searx.space exposes <a href="https://searx.space/data/instances.json" target="_blank" rel="noopener"><code>instances.json</code></a> (format may change—check the site).</p>
<h2>Self-host (optional)
    </h2><p>If a public instance feels slow or returns empty Google rows, run your own:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/searxng/searxng-docker.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> searxng-docker
</span></span><span class="line"><span class="cl">docker compose up -d</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Default install docs and engine tuning: <a href="https://docs.searxng.org/" target="_blank" rel="noopener">docs.searxng.org</a>. Expect to babysit engine blocks and the <a href="https://docs.searxng.org/admin/limiter.html" target="_blank" rel="noopener">limiter</a> if your instance is open to the world.</p>
<p><strong>Worth your time if:</strong> you want web search without building a Google-shaped dossier of your interests, and you are willing to trade a slightly rougher result page for that. Skip it if you need Google&rsquo;s one-box answers, signed-in Gmail integration, or flawless image search every time—metasearch will frustrate you on those edges.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/use/tools/taken-browser-fingerprinting/" >taken.: See Everything Your Browser Tells Websites About You</a></strong> Search is one leak; taken shows the rest of what your browser broadcasts.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/free-tools/" >Best Free Tools That Don&rsquo;t Require Signups or Show Ads</a></strong> SearXNG fits the same no-account, no-feed pattern.</li>
<li><strong><a href="https://www.tmfnk.com/use/tools/project-nomad/" >Project NOMAD: The Offline Knowledge and AI Server</a></strong> Another stack for keeping research and queries off third-party clouds.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Pillser: Research Signals in a Supplement Market Full of Fluff</title><link>https://www.tmfnk.com/read/articles/pillser-supplement-research-findings/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/pillser-supplement-research-findings/</guid><description>Pillser indexes supplements, ranks supplementation papers by effect size, and links the two—in plain language with caveats built in. Research signals, not health advice.</description><content:encoded><![CDATA[
<p><em>Source: <a href="https://pillser.com/findings" target="_blank" rel="noopener">Pillser Findings</a> · <a href="https://news.ycombinator.com/item?id=46719423" target="_blank" rel="noopener">HN discussion</a></em></p>
<p>The supplement aisle is marketing with a nutrition label. <a href="https://pillser.com/findings" target="_blank" rel="noopener">Pillser</a> is trying the opposite: index every product and every paper, rank claims by effect type and size, then wire the two datasets together so you can see what the evidence actually says about what you are holding. The <a href="https://pillser.com/findings" target="_blank" rel="noopener">Findings</a> feed is the readable front page—headline studies in plain language, with the population limits and &ldquo;one trial so far&rdquo; warnings in the same breath. The site is explicit: these are research signals worth knowing about, not prescriptions.</p>
<ol>
<li><strong>The three-layer stack is the whole idea.</strong> Step one: parse the supplement market (ingredients, doses, normalized quantities). Step two: index supplementation research and score each claim. Step three: link products to papers. That is how you get from <a href="https://pillser.com/search?q=%22Vitamin&#43;D%22&amp;s=jho4espsuc" target="_blank" rel="noopener">a Vitamin D search</a> to <a href="https://pillser.com/probiotics/bifidobacterium-bifidum" target="_blank" rel="noopener">a specific probiotic strain page</a> to <a href="https://pillser.com/supplements/pb-8-probiotic-663" target="_blank" rel="noopener">a product listing</a> without trusting the brand&rsquo;s ad copy.</li>
<li><strong>Findings reads like a good journal club, not a wellness blog.</strong> A typical card might say turmeric cut HbA1c by 0.31% in a meta-analysis—and immediately add: only in people with diabetes, only four small studies, low overall evidence strength. Or milk thistle: 2,069 people with fatty liver, ALT down 1.10 U/L, probably noise. <a href="https://pillser.com/findings/thistle-reduced-alanine-transaminase-level-361" target="_blank" rel="noopener">Myth-busters matter as much as hype.</a></li>
<li><strong>You can browse by outcome, not by influencer.</strong> <a href="https://pillser.com/health-outcomes/improved-intestinal-barr..." target="_blank" rel="noopener">Health-outcome pages</a> group what the literature claims about gut barrier function, eczema severity, sleep quality, and the rest—useful when you care about a question (&ldquo;does anything help X?&rdquo;) rather than a bottle name.</li>
<li><strong>Individual papers get an AI-assisted read—with receipts.</strong> Each <a href="https://pillser.com/research-papers/" target="_blank" rel="noopener">research-paper page</a> pulls study design, sample size, and effect direction into something scannable. The creator paused the project once because early LLMs hallucinated too often on this data; they restarted after internal evals improved. Worth watching: AI interpretation is only as good as the eval harness behind it.</li>
<li><strong>The mission is transparency, not more pills.</strong> The founder says the goal is not to increase supplement use but to help people decide—and often that decision is &ldquo;you do not need this&rdquo; or &ldquo;get it from food.&rdquo; This quarter&rsquo;s focus is education on natural supplementation. That framing is rare in a category built on upsell.</li>
<li><strong>Restarting cost real friction.</strong> Shady brands sent cease-and-desist letters demanding product takedowns—usually big marketing budgets, weak ingredient-to-price ratios, per the creator. Legal drag plus grad school plus unreliable models was enough to shelve it. Bryan Johnson&rsquo;s Blueprint wave brought inbound interest that helped justify picking it back up. Transparency projects still fight incumbents with lawyers.</li>
<li><strong>You might think a database fixes shopping. It does not fix you.</strong> Even perfect evidence summaries leave out your labs, medications, and contraindications. Pillser is a map of published signals, not a clinician. Single RCTs in narrow groups (Parkinson&rsquo;s patients, postpartum wounds, preterm infants) dominate the feed—the caveats are honest, but readers still have to resist &ldquo;one study → buy now.&rdquo;</li>
</ol>
<p><strong>The takeaway:</strong> Bookmark <a href="https://pillser.com/findings" target="_blank" rel="noopener">pillser.com/findings</a> as a filter before you read a supplement label or a Twitter thread. Use it to ask &ldquo;what does the literature claim, for whom, and how weak is it?&quot;—then talk to someone who can actually advise you on your body. If a finding is interesting, follow the paper link and treat the product pages as price-and-ingredient context, not a shopping list.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/spice-combo-capsaicin-menthol-inflammation/" >This Spice Combo Could Slash Inflammation Hundreds of Times More Effectively</a></strong> Food combinations with measured effects—a different lane than pills, same need for caveats.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/from-tobacco-to-ultra-processed-food/" >From Tobacco to Ultra-Processed Food</a></strong> How industries sell health narratives; supplements rhyme with that playbook.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/poison-everywhere/" >Poison Everywhere</a></strong> Another angle on what we put in our bodies and how little we verify.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item><item><title>Phil Chen on Career Advice in the Age of AI</title><link>https://www.tmfnk.com/read/articles/career-advice-age-of-ai-phil-chen/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tmfnk.com/read/articles/career-advice-age-of-ai-phil-chen/</guid><description>OpenAI and DeepMind researcher Phil Chen argues execution got cheap. The scarce skills are picking problems, building reputation, and spending real time where it compounds.</description><content:encoded><![CDATA[
<p><a href="https://x.com/philhchen/status/2072793818945167475" target="_blank" rel="noopener">Phil Chen</a> posted career advice in 2026 that cut through the usual &ldquo;learn to prompt&rdquo; noise. Chen has worked across Scale AI, DeepMind, OpenAI, and Google while building his own agent-native startup. His opening line stuck: AI gets good at anything you can write a loss function for, and school is mostly loss functions. Execution is cheaper. The edge is choosing problems worth the tokens, building relationships that outlast any single job, and putting in time where reputation actually compounds.</p>
<ol>
<li>
<p>Capital is abundant; time and trust are not. Chen turned down higher guaranteed cash from quant finance to join Scale at 500 people. The network and exposure there led to DeepMind and OpenAI. His point is blunt: vibe-coding side gigs can turn a quick buck, but proven work known to reputable people is still the highest-signal currency.</p>
</li>
<li>
<p>Problem selection beats problem solving. At his agent-native company, Leetcode and textbook system design stopped predicting performance. What worked in interviews: drop someone into an unfamiliar environment, see if they spot problems worth solving, then watch how efficiently they allocate time and tokens with agents. Students panicking that agents ace problem sets are looking at the wrong scoreboard.</p>
</li>
<li>
<p>Great candidates still differ wildly on token efficiency. Agents can finish the assignment. They cannot replace the intuition and outside context strong people bring into the collaboration. Chen rates people higher when they have lived inside high-growth environments or passion projects where meaningful problems outnumbered headcount.</p>
</li>
<li>
<p>Pick the most ambitious form of the problem. The bitter lesson applies to careers, not just models: general scaling beats local hacks, and AI has widened the power-law gap. Anyone can spin up a simple app now. Durable value needs extreme focus on hard problems at companies that are actually trying to solve the ambitious version, not a demo that will pivot in six months.</p>
</li>
<li>
<p>The last mile is where humans still win. Chen cites Alfred Lin: the final 10% is 90% of the work and 90% of the reward. A sloppy prompt gets you median agent output. Polish, architecture, and iteration on your own projects are what separate candidates who look interchangeable on paper.</p>
</li>
<li>
<p>Careers need both xG and finishing. Chen uses the soccer expected-goals frame: get into positions where good opportunities appear (reputation, expertise, the right mutuals), then convert when they arrive. He passed on early Anthropic and Cursor offers twice to chase frontier inference work that fit his interests. Reasonable trade. He also wishes he had gathered more data before some calls.</p>
</li>
<li>
<p>Research is more accessible than the gatekeeping suggests. Public eval leaderboards, model credits from providers like Modal, and building your own benchmarks from daily model use are viable on-ramps. Chen&rsquo;s line: being a researcher is a mentality (curiosity, infrastructure pain tolerance, articulating results to get more compute), not a job title locked behind a lab badge.</p>
</li>
<li>
<p>You might read this and think it only applies to people already orbiting frontier labs. Fair pushback. Chen&rsquo;s network is unusually dense. But the underlying move generalizes: stop optimizing for gradable tasks agents already ace, and start stacking reputation with people who solve real problems in public.</p>
</li>
</ol>
<p><strong>The takeaway:</strong> Pick one problem you find meaningful, not one that grades cleanly. Ship it with agents if you want, but spend the extra hour on polish and write up what you learned where serious people can see it. DM one person whose work you respect with a specific question, not a generic coffee chat. That is how xG turns into goals when execution is cheap.</p>
<h2>Related TMFNK Content
    </h2><ul>
<li><strong><a href="https://www.tmfnk.com/read/articles/proletariat-of-judgment/" >The Proletariat of Judgment: Cognitive Stratification in the AI Era</a></strong> Chen assumes you still steer agents. This piece asks what happens when you stop steering entirely.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/goldman-sachs-ai-job-apocalypse/" >Goldman Sachs on the AI Job Apocalypse: Real Pain, Not Mass Unemployment</a></strong> Macro labor math on displacement versus augmentation while Chen focuses on individual positioning.</li>
<li><strong><a href="https://www.tmfnk.com/read/articles/the-rise-of-computer-use-and-agentic-coworkers/" >The Rise of Computer Use and Agentic Coworkers</a></strong> The agent-native workplace Chen is hiring for, and why problem-finding matters more than manual coding.</li>
</ul>
<p>Crepi il lupo! 🐺</p>
]]></content:encoded></item></channel></rss>