<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Kron&#39;s</title>
    <link>/blog/</link>
    <description>Recent content on Kron&#39;s</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>Blog Owner (CC BY 4.0)</copyright>
    <lastBuildDate>Fri, 26 Dec 2025 22:00:00 +0000</lastBuildDate>
    <atom:link href="/blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>A Radical Minimalism Manifesto</title>
      <link>/blog/posts/radical-minimalism-manifesto/</link>
      <pubDate>Fri, 26 Dec 2025 22:00:00 +0000</pubDate>
      <guid>/blog/posts/radical-minimalism-manifesto/</guid>
      <description>The Manifesto Creation is a commodity.&#xA;Adding has become cheap. Gradually, over decades, complexifying became commoditized. GPT adds. Interns add. Everyone adds. Features multiply. Options accumulate. Abstractions layer upon abstractions.&#xA;What makes complexity survive is subtraction.&#xA;Removing the nonessential. The nonuniform. The almost-right. The thing that seemed clever yesterday.&#xA;It is the minimal designs that are at the heart of perfection.&#xA;The Japanese call it hikizan no bigaku—the beauty of subtraction.</description>
      <content:encoded><![CDATA[<h2 id="the-manifesto">The Manifesto</h2>
<p>Creation is a commodity.</p>
<p>Adding has become cheap. Gradually, over decades, complexifying became commoditized. GPT adds. Interns add. Everyone adds. Features multiply. Options accumulate. Abstractions layer upon abstractions.</p>
<p>What makes complexity <em>survive</em> is subtraction.</p>
<p>Removing the nonessential. The nonuniform. The almost-right. The thing that seemed clever yesterday.</p>
<p>It is the minimal designs that are at the heart of perfection.</p>
<p>The Japanese call it hikizan no bigaku—the beauty of subtraction. Not minimalism as aesthetic choice. Minimalism as the only path to durability.</p>
<hr>
<h2 id="deliberations">Deliberations</h2>
<h3 id="why-now">Why Now?</h3>
<p>The cost of creation has collapsed. Code generation, content generation, design generation—all approaching zero marginal cost. When adding is free, addition loses meaning. The bottleneck shifts.</p>
<p>The new scarcity: judgment about what to remove.</p>
<h3 id="the-subtraction-neglect-problem">The Subtraction Neglect Problem</h3>
<p>Researchers at University of Virginia (Adams et al., 2021) <a href="https://www.nature.com/articles/s41586-021-03380-y">[1]</a> ran experiments. They asked people to improve things—writing, Lego structures, travel itineraries, soup recipes. Across domains, participants defaulted to adding. Subtracting wasn't considered until explicitly prompted.</p>
<p>&quot;People systematically overlook subtractive changes... even when subtracting is more efficient.&quot;</p>
<p>We are wired to add. Evolution favored acquisition. Our instincts betray us in an age of abundance.</p>
<h3 id="the-diogenes-test">The Diogenes Test</h3>
<p>Diogenes of Sinope <a href="https://plato.stanford.edu/entries/diogenes-sinope/">[2]</a>, 4th century BC. Lived in a clay jar. Owned a cloak, a walking stick, a cup. One day he saw a boy drink water from cupped hands. Diogenes threw away his cup.</p>
<p>&quot;He has outdone me in simplicity.&quot;</p>
<p>This is the test: can someone outdo you in simplicity while achieving the same result? If yes, you haven't finished editing.</p>
<h3 id="japanese-concepts">Japanese Concepts</h3>
<p><strong>Hikizan no Bigaku</strong> <a href="https://japanbite.com/blogs/news/subtracting-to-add-beauty-the-art-of-simplicity-in-japan">[3]</a> — The beauty of subtraction. Rooted in Zen Buddhism. The appreciation for removing the unnecessary to reveal essence.</p>
<p><strong>Mu</strong> — Nothingness. Not void, but the removal of what doesn't belong. By letting go of excess, we find clarity.</p>
<p><strong>Ma</strong> — The space between. Negative space. The pause in music. The emptiness that defines form. In Japanese design, ma is not absence—it is presence of another kind.</p>
<p><strong>Kanso</strong> — Elimination of clutter. What remains should be essential, should age well, should be repairable.</p>
<h3 id="the-saint-exupéry-standard">The Saint-Exupéry Standard</h3>
<p>Antoine de Saint-Exupéry, aviator and author, 1939:</p>
<p>&quot;Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.&quot;</p>
<p>He was writing about aircraft design. Every gram matters when you're crossing oceans. The principle generalizes.</p>
<h3 id="mies-van-der-rohe">Mies van der Rohe</h3>
<p>&quot;Less is more.&quot;</p>
<p>Three words that defined 20th century architecture. Mies didn't mean aesthetic minimalism. He meant: arrange the necessary components such that each serves multiple purposes. Reduce until you can't reduce further without losing function.</p>
<h3 id="dieter-rams">Dieter Rams</h3>
<p>Ten principles of good design <a href="https://www.vitsoe.com/us/about/good-design">[4]</a>. Two are relevant:</p>
<ul>
<li>Good design is as little design as possible</li>
<li>Good design is unobtrusive</li>
</ul>
<p>Rams influenced Japanese designers. Japanese aesthetics influenced Rams. The feedback loop produced objects that last decades.</p>
<hr>
<h2 id="the-practice">The Practice</h2>
<p>The amateur adds until it works.
The master removes until it breaks.</p>
<p>Code that lasts: edited ruthlessly.
Design that endures: stripped to skeleton.
Ideas that spread: compressed to essence.</p>
<p>Your value isn't what you create.
It's what survives your editing.</p>
<hr>
<h2 id="working-principles">Working Principles</h2>
<ol>
<li>
<p><strong>Subtract before you add</strong> — When facing a problem, first ask: what can I remove?</p>
</li>
<li>
<p><strong>If you can't remove it, you don't understand it</strong> — Inability to simplify reveals incomplete understanding.</p>
</li>
<li>
<p><strong>The pause says more than the words</strong> — Ma. Negative space. What you leave out defines what remains.</p>
</li>
<li>
<p><strong>Own nothing that owns you</strong> — Diogenes. Possessions become obligations.</p>
</li>
<li>
<p><strong>Perfection = nothing left to take away</strong> — Saint-Exupéry's test. Apply to code, design, writing, life.</p>
</li>
<li>
<p><strong>Complexity that survives has been edited</strong> — The filter matters more than the source.</p>
</li>
</ol>
<hr>
<p><em>Working version. December 2025.</em></p>
<p><em>Creation is commodity. Curation is the work.</em></p>
<h2 id="references">References</h2>
<p>[1] <a href="https://www.nature.com/articles/s41586-021-03380-y">https://www.nature.com/articles/s41586-021-03380-y</a></p>
<p>[2] <a href="https://plato.stanford.edu/entries/diogenes-sinope/">https://plato.stanford.edu/entries/diogenes-sinope/</a></p>
<p>[3] <a href="https://japanbite.com/blogs/news/subtracting-to-add-beauty-the-art-of-simplicity-in-japan">https://japanbite.com/blogs/news/subtracting-to-add-beauty-the-art-of-simplicity-in-japan</a></p>
<p>[4] <a href="https://www.vitsoe.com/us/about/good-design">https://www.vitsoe.com/us/about/good-design</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Speeding Up Rust Compilation</title>
      <link>/blog/posts/speeding-up-rust-compilation/</link>
      <pubDate>Sun, 21 Dec 2025 12:00:00 +0000</pubDate>
      <guid>/blog/posts/speeding-up-rust-compilation/</guid>
      <description>Rust compile times are slow. Here&#39;s why and what you can do about it.&#xA;The Problem Rust compilation has two bottlenecks:&#xA;Frontend (rustc): parsing, macro expansion, type checking, borrow checking Backend (LLVM): optimization, code generation If cargo check is slow, your bottleneck is the frontend. If cargo check is fast but cargo build is slow, it&#39;s the backend.&#xA;Backend Fixes Cranelift Cranelift is an alternative code generator built for the Wasmtime WebAssembly runtime.</description>
      <content:encoded><![CDATA[<p>Rust compile times are slow. Here's why and what you can do about it.</p>
<h2 id="the-problem">The Problem</h2>
<p>Rust compilation has two bottlenecks:</p>
<ol>
<li><strong>Frontend</strong> (rustc): parsing, macro expansion, type checking, borrow checking</li>
<li><strong>Backend</strong> (LLVM): optimization, code generation</li>
</ol>
<p>If <code>cargo check</code> is slow, your bottleneck is the frontend. If <code>cargo check</code> is
fast but <code>cargo build</code> is slow, it's the backend.</p>
<h2 id="backend-fixes">Backend Fixes</h2>
<h3 id="cranelift">Cranelift</h3>
<p>Cranelift is an alternative code generator built for the Wasmtime WebAssembly
runtime. It prioritizes compile speed over output quality - perfect for dev
builds.</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">rustup component add rustc-codegen-cranelift-preview
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nv">CARGO_PROFILE_DEV_CODEGEN_BACKEND</span><span class="o">=</span>cranelift cargo build</span></span></code></pre></div><p>Expect ~2x faster codegen with slower runtime performance.</p>
<h3 id="mold-linker">mold Linker</h3>
<p>The default linker is slow. mold is a drop-in replacement optimized for speed.</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">sudo apt install mold clang</span></span></code></pre></div>




<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="ln">1</span><span class="cl"><span class="c"># .cargo/config.toml</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p">[</span><span class="nx">target</span><span class="p">.</span><span class="nx">x86_64-unknown-linux-gnu</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nx">linker</span> <span class="p">=</span> <span class="s2">&#34;clang&#34;</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="nx">rustflags</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;-C&#34;</span><span class="p">,</span> <span class="s2">&#34;link-arg=-fuse-ld=mold&#34;</span><span class="p">]</span></span></span></code></pre></div><p>Linking goes 2-5x faster.</p>
<h3 id="sccache">sccache</h3>
<p>Caches compiler outputs. Helps with rebuilds and CI.</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">cargo install sccache</span></span></code></pre></div>




<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="ln">1</span><span class="cl"><span class="c"># .cargo/config.toml</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p">[</span><span class="nx">build</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nx">rustc-wrapper</span> <span class="p">=</span> <span class="s2">&#34;sccache&#34;</span></span></span></code></pre></div><p>The cache lives on disk by default. The OS page cache keeps hot entries in RAM
automatically - no need for tmpfs unless you're seeing disk I/O bottlenecks.</p>
<h3 id="aggressive-dev-profile">Aggressive Dev Profile</h3>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c"># Cargo.toml</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="p">[</span><span class="nx">profile</span><span class="p">.</span><span class="nx">dev</span><span class="p">]</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nx">opt-level</span> <span class="p">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="nx">debug</span> <span class="p">=</span> <span class="kc">false</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="nx">codegen-units</span> <span class="p">=</span> <span class="mi">256</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="nx">incremental</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="p">[</span><span class="nx">profile</span><span class="p">.</span><span class="nx">dev</span><span class="p">.</span><span class="nx">package</span><span class="p">.</span><span class="s2">&#34;*&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="nx">opt-level</span> <span class="p">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="nx">codegen-units</span> <span class="p">=</span> <span class="mi">256</span></span></span></code></pre></div><p>More codegen units = more parallelism = faster builds (but worse code).</p>
<h2 id="frontend-fixes">Frontend Fixes</h2>
<p>Bad news: there's no quick fix for frontend speed.</p>
<p>The Rust compiler team is working on parallel frontend compilation, but it's
years away from matching Go's speed. The borrow checker, complex generics, and
procedural macros all take time.</p>
<p>What helps:</p>
<ul>
<li>Fewer dependencies (less to parse)</li>
<li>Fewer proc macros (serde, tokio macros are expensive)</li>
<li>Smaller crates (better parallelism)</li>
<li><code>cargo check</code> instead of <code>cargo build</code> when possible</li>
</ul>
<h2 id="why-go-is-faster">Why Go is Faster</h2>
<p>Go was designed from day one for fast compilation:</p>
<ul>
<li>Simple grammar (no lifetimes, no generics originally)</li>
<li>File-level parallelism (not crate-level)</li>
<li>Custom compiler built for speed (not LLVM)</li>
<li>No borrow checker</li>
</ul>
<p>Rust chose safety and zero-cost abstractions over compile speed. That's a
fundamental design tradeoff, not a bug to fix.</p>
<h2 id="complete-setup">Complete Setup</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c"># Cargo.toml</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="p">[</span><span class="nx">profile</span><span class="p">.</span><span class="nx">dev</span><span class="p">]</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="nx">opt-level</span> <span class="p">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="nx">debug</span> <span class="p">=</span> <span class="kc">false</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="nx">codegen-units</span> <span class="p">=</span> <span class="mi">256</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="nx">incremental</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="p">[</span><span class="nx">profile</span><span class="p">.</span><span class="nx">dev</span><span class="p">.</span><span class="nx">package</span><span class="p">.</span><span class="s2">&#34;*&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="nx">opt-level</span> <span class="p">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="nx">codegen-units</span> <span class="p">=</span> <span class="mi">256</span></span></span></code></pre></div>




<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="ln">1</span><span class="cl"><span class="c"># .cargo/config.toml</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="p">[</span><span class="nx">target</span><span class="p">.</span><span class="nx">x86_64-unknown-linux-gnu</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="nx">linker</span> <span class="p">=</span> <span class="s2">&#34;clang&#34;</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="nx">rustflags</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;-C&#34;</span><span class="p">,</span> <span class="s2">&#34;link-arg=-fuse-ld=mold&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="p">[</span><span class="nx">build</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="nx">rustc-wrapper</span> <span class="p">=</span> <span class="s2">&#34;sccache&#34;</span></span></span></code></pre></div>




<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># Install tools</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">sudo apt install mold clang
</span></span><span class="line"><span class="ln">3</span><span class="cl">cargo install sccache
</span></span><span class="line"><span class="ln">4</span><span class="cl">rustup component add rustc-codegen-cranelift-preview</span></span></code></pre></div><h2 id="reality-check">Reality Check</h2>
<p>Even with all optimizations, Rust won't match Go's compile speed. But you can
get 2-4x faster dev builds, which makes iteration less painful.</p>
<p>Ship with LLVM. Iterate with cranelift + sccache + mold.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Building a Blog with AI</title>
      <link>/blog/posts/how-i-built-this-lightning-fast-blog/</link>
      <pubDate>Mon, 15 Sep 2025 20:52:00 +0000</pubDate>
      <guid>/blog/posts/how-i-built-this-lightning-fast-blog/</guid>
      <description>I wanted a simple blog. I asked Claude to build it.&#xA;First attempt: Bear Blog. It looked minimal. Claude researched it and found a full Django application hiding behind the clean facade—PostgreSQL, Redis, multi-tenant routing, user management. The simple frontend was a lie.&#xA;Insight. Multi-tenancy belongs at infrastructure level. GitHub Pages already handles domains and hosting. Why rebuild it?&#xA;Claude found Hugo with Bear Cub theme. Static generation. Same aesthetic. No runtime.</description>
      <content:encoded><![CDATA[<p>I wanted a simple blog. I asked Claude to build it.</p>
<p>First attempt: Bear Blog. It looked minimal. Claude researched it and found a full Django application hiding behind the clean facade—PostgreSQL, Redis, multi-tenant routing, user management. The simple frontend was a lie.</p>
<p><strong>Insight.</strong> Multi-tenancy belongs at infrastructure level. GitHub Pages already handles domains and hosting. Why rebuild it?</p>
<p>Claude found Hugo with Bear Cub theme. Static generation. Same aesthetic. No runtime. We forked the theme as gopher-blog and customized it.</p>
<h2 id="the-stack">The Stack</h2>
<ul>
<li>Hugo generates static HTML</li>
<li>gopher-blog theme (forked from Bear Cub <a href="https://github.com/clente/hugo-bearcub">[1]</a>)</li>
<li>Markdown files in git</li>
<li>Claude for research, debugging, content</li>
</ul>
<h2 id="how-it-works">How It Works</h2>
<p>I describe what I want. Claude writes the code, fixes bugs, deploys. When something breaks, I paste the error. Claude fixes it.</p>
<p>The blog builds in milliseconds. No database. No server. No security updates.</p>





<pre tabindex="0"><code>hugo new site .
git submodule add &lt;theme-repo&gt; themes/gopher-blog
make deploy</code></pre><h2 id="why-this-matters">Why This Matters</h2>
<p>AI can build functional software from conversation. Not perfectly—I guide, review, correct. But the iteration speed is different. Ideas become code in minutes.</p>
<p>This blog exists because Claude built it. The words, the theme, the deployment—all from conversation.</p>
<h2 id="references">References</h2>
<p>[1] <a href="https://github.com/clente/hugo-bearcub">https://github.com/clente/hugo-bearcub</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Hello World</title>
      <link>/blog/posts/hello-world/</link>
      <pubDate>Mon, 15 Sep 2025 20:49:35 +0000</pubDate>
      <guid>/blog/posts/hello-world/</guid>
      <description>This is Kron&#39;s, a blog built with Hugo and the gopher-blog [1] theme.&#xA;What. Static HTML. No JavaScript. No trackers. Pages load in milliseconds.&#xA;Why. The web has become slow and cluttered. This makes it possible to focus on the important easily.&#xA;How. Hugo generates static files. gopher-blog (forked from Bear Cub [2]) provides the minimal layout. Content lives in markdown.&#xA;That&#39;s it.&#xA;References [1] https://github.com/kronael/gopher-blog&#xA;[2] https://github.com/clente/hugo-bearcub</description>
      <content:encoded><![CDATA[<p>This is Kron's, a blog built with Hugo and the gopher-blog <a href="https://github.com/kronael/gopher-blog">[1]</a> theme.</p>
<p><strong>What.</strong> Static HTML. No JavaScript. No trackers. Pages load in milliseconds.</p>
<p><strong>Why.</strong> The web has become slow and cluttered. This makes it possible to focus on the important easily.</p>
<p><strong>How.</strong> Hugo generates static files. gopher-blog (forked from Bear Cub <a href="https://github.com/clente/hugo-bearcub">[2]</a>) provides the minimal layout. Content lives in markdown.</p>
<p>That's it.</p>
<h2 id="references">References</h2>
<p>[1] <a href="https://github.com/kronael/gopher-blog">https://github.com/kronael/gopher-blog</a></p>
<p>[2] <a href="https://github.com/clente/hugo-bearcub">https://github.com/clente/hugo-bearcub</a></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
