<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Programming on AIBussin — AI applications, systems and books</title>
		<link>https://aibussin.com/categories/programming/</link>
		<description>Recent content in Programming on AIBussin — AI applications, systems and books</description>
		<generator>Hugo</generator>
		<language>en-US</language>
		
		
		
		
			<lastBuildDate>Sat, 15 Aug 2026 05:00:00 +0100</lastBuildDate>
		
			<atom:link href="https://aibussin.com/categories/programming/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>01: How to Read This Book</title>
				<link>https://aibussin.com/books/digital-life/01-how-to-read-this-book/</link>
				<pubDate>Fri, 14 Aug 2026 08:30:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/01-how-to-read-this-book/</guid>
				<description>&lt;p&gt;This is a science book, but you do not need to reproduce every experiment to read it. You can simply follow the investigation: watch something strange appear, notice the explanation we reached for, see how the experiment tested it, then ask what survived.&lt;/p&gt;&#xA;&lt;p&gt;If that is all you want from the book, the main text is enough. But every important result sits above a deeper record, and that record is available if you want to inspect it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>How Can Tiny Rules Build Complex Worlds?</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/01-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:20:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/01-chapter/</guid>
				<description>&lt;p&gt;A cellular automaton begins with almost nothing.&lt;/p&gt;&#xA;&lt;p&gt;You need:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a collection of cells,&lt;/li&gt;&#xA;&lt;li&gt;a state for each cell,&lt;/li&gt;&#xA;&lt;li&gt;a neighborhood,&lt;/li&gt;&#xA;&lt;li&gt;and a rule that tells each cell what to become next.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That is enough.&lt;/p&gt;&#xA;&lt;p&gt;There is no central controller.&lt;/p&gt;&#xA;&lt;p&gt;There is no object that knows what the final pattern should look like.&lt;/p&gt;&#xA;&lt;p&gt;There is only local state changing through time.&lt;/p&gt;&#xA;&lt;p&gt;And yet some local rules produce stripes, fronts, oscillators, moving structures, traffic waves, cave systems, self-repairing patterns, and systems rich enough to perform computation.&lt;/p&gt;</description>
			</item>
			<item>
				<title>02: What Would Digital Life Mean?</title>
				<link>https://aibussin.com/books/digital-life/02-what-is-digital-life/</link>
				<pubDate>Fri, 14 Aug 2026 09:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/02-what-is-digital-life/</guid>
				<description>&lt;p&gt;Suppose life were possible in software.&lt;/p&gt;&#xA;&lt;p&gt;What would we actually be looking for?&lt;/p&gt;&#xA;&lt;p&gt;The honest answer is that we do not know yet, and that is the reason for this book.&lt;/p&gt;&#xA;&lt;p&gt;We could certainly build something that looks alive: a graphical creature, an animated agent, a personality-driven assistant. That is not the experiment. The harder question is whether a computational system can produce, through its own operation, properties that justify some of the language we associate with living things.&lt;/p&gt;</description>
			</item>
			<item>
				<title>02: What Would Digital Life Mean?</title>
				<link>https://aibussin.com/books/digital-life/02-what-would-digital-life-mean/</link>
				<pubDate>Fri, 14 Aug 2026 09:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/02-what-would-digital-life-mean/</guid>
				<description>&lt;p&gt;Suppose life were possible in software.&lt;/p&gt;&#xA;&lt;p&gt;What would we actually be looking for?&lt;/p&gt;&#xA;&lt;p&gt;The honest answer is that we do not know yet, and that is the reason for this book.&lt;/p&gt;&#xA;&lt;p&gt;We could certainly build something that looks alive: a graphical creature, an animated agent, a personality-driven assistant. That is not the experiment. The harder question is whether a computational system can produce, through its own operation, properties that justify some of the language we associate with living things.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Build Your First Automaton</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/02-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:21:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/02-chapter/</guid>
				<description>&lt;p&gt;In the previous chapter we reduced a cellular automaton to four things:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;space&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;state&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;neighborhood&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rule&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now we are going to build one.&lt;/p&gt;&#xA;&lt;p&gt;Not a framework.&lt;/p&gt;&#xA;&lt;p&gt;Not a library.&lt;/p&gt;&#xA;&lt;p&gt;One update step.&lt;/p&gt;&#xA;&lt;p&gt;That is enough to expose the whole mechanism.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;start-with-a-one-dimensional-world&#34;&gt;Start with a one-dimensional world&lt;/h2&gt;&#xA;&lt;p&gt;Create a row of cells and turn on the center cell:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; numpy &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; np&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;width &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;41&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;state &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;zeros(width, dtype&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;uint8)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;state[width &lt;span style=&#34;color:#f92672&#34;&gt;//&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(state)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Conceptually:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;....................#....................&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We will use &lt;code&gt;0&lt;/code&gt; for an empty cell and &lt;code&gt;1&lt;/code&gt; for an active cell.&lt;/p&gt;</description>
			</item>
			<item>
				<title>03: Look at This Thing</title>
				<link>https://aibussin.com/books/digital-life/03-look-at-this-thing/</link>
				<pubDate>Fri, 14 Aug 2026 09:30:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/03-look-at-this-thing/</guid>
				<description>&lt;p&gt;Don&amp;rsquo;t read anything yet.&lt;/p&gt;&#xA;&lt;p&gt;Watch this.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://aibussin.com/images/books/digital-life/ch01-lenia-organism.gif&#34;&#xA;&#x9;&#x9;&#x9;alt=&#34;A localized continuous cellular automaton pattern evolving and moving through time.&#34;&gt;&lt;figcaption&gt;&#xA;&#x9;&#x9;&#x9;&lt;p&gt;One state of a continuous cellular automaton evolving through time.&lt;/p&gt;&#xA;&#x9;&#x9;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Something is moving. It appears to have a boundary. Different parts of it seem to behave differently: an edge that ripples, an interior that stays denser, a leading region that seems to pull the rest along. Its shape changes as it travels, and yet some larger organization survives those changes. Watch it for thirty seconds and you will start predicting what it is about to do.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Encode All 256 Elementary Rules</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/03-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:22:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/03-chapter/</guid>
				<description>&lt;p&gt;In the previous chapter we built one rule: a cell becomes active when exactly one of its three neighbors is active. That turned out to be Rule 22, but we treated it as a hand-written function.&lt;/p&gt;&#xA;&lt;p&gt;Now we generalize. Instead of writing one function per rule, we encode every possible elementary rule as a single integer — and get all 256 automata for the price of one simulator.&lt;/p&gt;&#xA;&lt;p&gt;An elementary cellular automaton has only three inputs per cell:&lt;/p&gt;</description>
			</item>
			<item>
				<title>04: Now There Are Two</title>
				<link>https://aibussin.com/books/digital-life/04-now-there-are-two/</link>
				<pubDate>Fri, 14 Aug 2026 10:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/04-now-there-are-two/</guid>
				<description>&lt;p&gt;In the previous chapter an organization survived while nearly everything participating in it was replaced. By the end of the turnover window, only 7 of the original 20,000 agents remained, yet the broader organized network persisted.&lt;/p&gt;&#xA;&lt;p&gt;That established persistence. It did not establish reproduction.&lt;/p&gt;&#xA;&lt;p&gt;Persistence asks whether an organization continues. Reproduction asks whether it produces another organization with a causal descent relation. Nothing in the Physarum experiment tested that second capability.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rule 30 and the Surprise of Complexity</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/04-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:23:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/04-chapter/</guid>
				<description>&lt;p&gt;The previous chapter gave us a simulator that can run any of the 256 elementary rules. Now we pick one and look at it closely. Rule 30 is the standard demonstration of why cellular automata are worth studying.&lt;/p&gt;&#xA;&lt;p&gt;Its transition table contains eight bits — the same encoding as in the previous chapter, repeated here so you can check the simulator line by line:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;111 110 101 100 011 010 001 000&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 0   0   0   1   1   1   1   0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Start from one active cell and repeatedly apply that rule.&lt;/p&gt;</description>
			</item>
			<item>
				<title>05: So We Built the Wrong Thing on Purpose</title>
				<link>https://aibussin.com/books/digital-life/05-so-we-built-the-wrong-thing-on-purpose/</link>
				<pubDate>Fri, 14 Aug 2026 10:30:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/05-so-we-built-the-wrong-thing-on-purpose/</guid>
				<description>&lt;p&gt;The previous chapter ended with a specification: known rules, controlled interventions, one mechanism varied at a time, a history we can follow. That is the laboratory we will eventually need, and building it is most of the work still ahead.&lt;/p&gt;&#xA;&lt;p&gt;Before building it, there is a cheaper question: &lt;strong&gt;are our tests any good?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;That is not an idle worry. The last chapter produced the first positive result in this book — a bounded one, but a real one. Structural recurrence intersected with causal ancestry, and a causal claim survived a test we had not designed to make it pass.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rule 110 and Computation in a Grid</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/05-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:24:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/05-chapter/</guid>
				<description>&lt;p&gt;Rule 110 looks like another one-byte transition table.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;111 110 101 100 011 010 001 000&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 0   1   1   0   1   1   1   0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But its behavior gives us a much deeper idea: a cellular automaton can become a computational medium.&lt;/p&gt;&#xA;&lt;p&gt;The important shift is this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pattern generator&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      -&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;signal system&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      -&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;computation&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Rule 110 is computationally universal — under suitable encodings and initial conditions. Matthew Cook published the universality proof in &lt;em&gt;Complex Systems&lt;/em&gt; in 2004, settling a conjecture Wolfram had made in the mid-1980s: this elementary one-dimensional automaton can emulate universal computation.&lt;/p&gt;</description>
			</item>
			<item>
				<title>06: It Looked Like Flocking</title>
				<link>https://aibussin.com/books/digital-life/06-it-looked-like-flocking/</link>
				<pubDate>Fri, 14 Aug 2026 10:30:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/06-it-looked-like-flocking/</guid>
				<description>&lt;p&gt;The previous chapter ended with a warning: a deliberately simple swarm could look organized, move coherently and preserve a measured regime without giving us anything we were prepared to call digital life.&lt;/p&gt;&#xA;&lt;p&gt;We then went back to Outlier and almost immediately saw structures moving together — not merely outward with the expanding front, but with what looked like stronger coordination among structures sharing recent causal history. The biological noun arrived immediately: &lt;strong&gt;flocking&lt;/strong&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Conway&#39;s Game of Life</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/06-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:25:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/06-chapter/</guid>
				<description>&lt;p&gt;The previous chapter ended on a limit of one dimension: time supplies the second visual axis, but structures cannot move &lt;em&gt;inside&lt;/em&gt; the world. In two dimensions they can. Conway&amp;rsquo;s Game of Life is one of the cleanest examples of intricate two-dimensional behavior emerging from a tiny local rule.&lt;/p&gt;&#xA;&lt;p&gt;John Conway devised it in 1970; Martin Gardner&amp;rsquo;s October 1970 &lt;em&gt;Scientific American&lt;/em&gt; column introduced it to a wide audience and triggered the volunteer zoology of patterns — still lifes, oscillators, spaceships — that made Life the most studied cellular automaton in history.&lt;/p&gt;</description>
			</item>
			<item>
				<title>07: The Digital Crystal</title>
				<link>https://aibussin.com/books/digital-life/07-the-digital-crystal/</link>
				<pubDate>Fri, 14 Aug 2026 11:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/07-the-digital-crystal/</guid>
				<description>&lt;p&gt;Outlier had taken us as far as it could.&lt;/p&gt;&#xA;&lt;p&gt;Nothing in the previous chapters is retracted. Outlier had shown us what computation could support. But by the end of the flocking investigation, its limitation had become unavoidable: Outlier was much better at producing phenomena than at isolating them.&lt;/p&gt;&#xA;&lt;p&gt;Geometry, ancestry, distance, expansion and local environment all emerged together from the same 512-bit rule. We could observe them, trace them and sometimes reconstruct their causal history. What we could not do cleanly was vary one mechanism while holding the others fixed.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Patterns as Data — Oscillators, Spaceships and Gliders</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/07-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:26:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/07-chapter/</guid>
				<description>&lt;p&gt;Once we can run Conway&amp;rsquo;s Game of Life, the next step is not to add more graphics.&lt;/p&gt;&#xA;&lt;p&gt;It is to make the patterns themselves inspectable.&lt;/p&gt;&#xA;&lt;p&gt;A blinker is not interesting because somebody named it.&lt;/p&gt;&#xA;&lt;p&gt;It is interesting because it returns to the same state after two generations — a testable dynamical property, not an aesthetic judgment. Throughout this chapter, &amp;ldquo;interesting&amp;rdquo; always cashes out into something executable: a period, a displacement, a fingerprint match.&lt;/p&gt;</description>
			</item>
			<item>
				<title>08: The Crystal Gets a Past</title>
				<link>https://aibussin.com/books/digital-life/08-the-crystal-gets-a-past/</link>
				<pubDate>Fri, 14 Aug 2026 11:30:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/08-the-crystal-gets-a-past/</guid>
				<description>&lt;p&gt;At the end of the last chapter the Digital Crystal could tell us something about the world that formed it. Hide the forcing process, show only the final shape, and the family of that process could be recovered well above chance. Then we asked a harder question.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What happened first?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;We took exactly the same environmental values and rearranged them in time. Smooth. Bursting. Periodic. Alternating. Random. The final morphology could not reliably tell them apart.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Beyond Conway — Life-like and Multi-State Rules</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/08-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:27:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/08-chapter/</guid>
				<description>&lt;p&gt;The previous chapter ended on a causal direction: the rule produces the structures, and only then do we give the structures names. Change the rule and the names change with it.&lt;/p&gt;&#xA;&lt;p&gt;That matters because Conway&amp;rsquo;s Game of Life is famous enough that it can accidentally become the definition of cellular automata.&lt;/p&gt;&#xA;&lt;p&gt;It is not.&lt;/p&gt;&#xA;&lt;p&gt;Life is one point in a much larger design space.&lt;/p&gt;&#xA;&lt;p&gt;Keep the same two-dimensional grid and the same eight-cell Moore neighborhood, then change only the birth and survival counts.&lt;/p&gt;</description>
			</item>
			<item>
				<title>09: Can Experience Change the Material?</title>
				<link>https://aibussin.com/books/digital-life/09-can-experience-change-the-material/</link>
				<pubDate>Fri, 14 Aug 2026 12:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/09-can-experience-change-the-material/</guid>
				<description>&lt;p&gt;At the end of the last chapter the Digital Crystal had a past with real consequences and nowhere inside itself to keep it.&lt;/p&gt;&#xA;&lt;p&gt;A checkpoint could continue it exactly, but the checkpoint belonged to us. An event log could reconstruct how it formed, but the growth rule never read the log. A single received bit could redirect a later trajectory, and two matched pulse histories produced measurably different futures — yet the tested morphology readouts did not recover which history had occurred.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Add Randomness Without Losing the Model</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/09-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:34:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/09-chapter/</guid>
				<description>&lt;p&gt;So far every transition in the book has been deterministic.&lt;/p&gt;&#xA;&lt;p&gt;Given the same state, the next state is fixed.&lt;/p&gt;&#xA;&lt;p&gt;That makes deterministic automata unusually easy to debug: if we preserve the initial condition and rule, we preserve the trajectory.&lt;/p&gt;&#xA;&lt;p&gt;But many useful models need another ingredient.&lt;/p&gt;&#xA;&lt;p&gt;A tree may ignite.&lt;/p&gt;&#xA;&lt;p&gt;An organism may reproduce.&lt;/p&gt;&#xA;&lt;p&gt;A driver may hesitate.&lt;/p&gt;&#xA;&lt;p&gt;A material defect may appear.&lt;/p&gt;&#xA;&lt;p&gt;The local rule can still be precise even when the outcome is probabilistic.&lt;/p&gt;</description>
			</item>
			<item>
				<title>10: What Survives Material Loss?</title>
				<link>https://aibussin.com/books/digital-life/10-what-survives-material-loss/</link>
				<pubDate>Fri, 14 Aug 2026 14:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/10-what-survives-material-loss/</guid>
				<description>&lt;p&gt;The last chapter ended with a mechanism and a constraint. Experience could write a persistent local change into the material of the crystal, and that change could bias what got built nearby — but only while it remained inside the moving causal aperture.&lt;/p&gt;&#xA;&lt;p&gt;Growth advanced outward, the aperture advanced with it, and material left behind stayed perfectly preserved and perfectly irrelevant. Every attempt to fix that was an attempt to keep the trace near the surface.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Build a Forest Fire Simulation</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/10-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:36:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/10-chapter/</guid>
				<description>&lt;p&gt;The previous chapter put probability into the rule. A forest fire is almost an ideal first exercise for using it.&lt;/p&gt;&#xA;&lt;p&gt;The visible states are obvious:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0 = empty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1 = tree&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2 = burning&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The interactions are local.&lt;/p&gt;&#xA;&lt;p&gt;And small changes in fuel density or ignition assumptions can produce very different global outcomes.&lt;/p&gt;&#xA;&lt;p&gt;This is not intended as a high-fidelity wildfire model.&lt;/p&gt;&#xA;&lt;p&gt;It is a deliberately simplified &lt;strong&gt;spread model&lt;/strong&gt; designed to isolate one mechanism:&lt;/p&gt;</description>
			</item>
			<item>
				<title>11: What Does It Cost to Stay?</title>
				<link>https://aibussin.com/books/digital-life/11-what-does-it-cost-to-stay/</link>
				<pubDate>Fri, 14 Aug 2026 16:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/11-what-does-it-cost-to-stay/</guid>
				<description>&lt;p&gt;The last chapter ended with an impressive number and a suspicion about it. Under its exact-count experiment, roughly &lt;code&gt;0.94–0.96&lt;/code&gt; reoccupation events were observed per loss event, and more than ninety-three percent of distinct lost locations returned at least once within the finite run. Among the returns we observed, the typical delay was only a step or two — and all of it happened through the ordinary growth rule encountering ordinary empty sites.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Simulate Traffic with Rule 184</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/11-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:38:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/11-chapter/</guid>
				<description>&lt;p&gt;The forest fire consumed its fuel. Rule 184 is the opposite case: a conserved quantity that moves. It is also a clean example of going from an abstract rule table to a model with a concrete interpretation.&lt;/p&gt;&#xA;&lt;p&gt;Use a one-dimensional ring road:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1 = car&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0 = empty road&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A car moves one cell to the right when the destination is empty.&lt;/p&gt;&#xA;&lt;p&gt;That is enough to produce free flow, queues and a macroscopic density-flow relationship.&lt;/p&gt;</description>
			</item>
			<item>
				<title>12: Is There Actually One Thing Here?</title>
				<link>https://aibussin.com/books/digital-life/12-is-there-actually-one-thing-here/</link>
				<pubDate>Fri, 14 Aug 2026 18:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/12-is-there-actually-one-thing-here/</guid>
				<description>&lt;p&gt;The last chapter ended with a suspicion about a word.&lt;/p&gt;&#xA;&lt;p&gt;We have been saying &lt;em&gt;the crystal&lt;/em&gt; comfortably since &lt;em&gt;The Digital Crystal&lt;/em&gt;, and the noun has been doing quiet work ever since. We kept using it after material became impermanent. We kept using it after large material turnover appeared beneath the visible state. We kept using it after computational opportunity was shown to strongly constrain its scale, and after no tested budget produced a stationary population.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Diffusion as Local Exchange</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/12-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:40:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/12-chapter/</guid>
				<description>&lt;p&gt;Until now most cells have stored discrete state:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0 / 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;empty / tree / fire&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;road / car&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now let each cell store a continuous quantity.&lt;/p&gt;&#xA;&lt;p&gt;For diffusion:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;state[y, x] = concentration&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The local transition is no longer birth, death or movement.&lt;/p&gt;&#xA;&lt;p&gt;It is local exchange.&lt;/p&gt;&#xA;&lt;p&gt;This steps outside the strict finite-state definition — a deliberate extension, flagged as such, that the book will keep developing through reaction-diffusion, Lenia, and learned automata.&lt;/p&gt;</description>
			</item>
			<item>
				<title>13: What Does One Attachment Cause?</title>
				<link>https://aibussin.com/books/digital-life/13-what-does-one-attachment-cause/</link>
				<pubDate>Fri, 14 Aug 2026 20:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/13-what-does-one-attachment-cause/</guid>
				<description>&lt;p&gt;The last chapter took away the body&amp;rsquo;s privilege.&lt;/p&gt;&#xA;&lt;p&gt;Two supplied spatial boundaries failed to earn causal privilege. Comparable same-side localization appeared at both tested radial cuts, but under a local update rule and an eight-update horizon that was not evidence of an individual hiding inside either one.&lt;/p&gt;&#xA;&lt;p&gt;So stop drawing the object first.&lt;/p&gt;&#xA;&lt;p&gt;Start with an event.&lt;/p&gt;&#xA;&lt;p&gt;One event.&lt;/p&gt;&#xA;&lt;p&gt;What does it cause?&lt;/p&gt;&#xA;&lt;p&gt;That question turns out to conceal several different causal claims.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Reaction-Diffusion and Pattern Formation</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/13-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:42:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/13-chapter/</guid>
				<description>&lt;p&gt;Diffusion smooths differences.&lt;/p&gt;&#xA;&lt;p&gt;Reaction can amplify them.&lt;/p&gt;&#xA;&lt;p&gt;Put the two processes together and a nearly uniform field can develop persistent spots, stripes and fronts.&lt;/p&gt;&#xA;&lt;p&gt;We will use a discrete Gray-Scott reaction-diffusion simulation because it gives us a compact bridge from local cellular updates to continuous pattern-forming dynamics. The model originates with Gray and Scott&amp;rsquo;s autocatalytic chemistry; John Pearson&amp;rsquo;s 1993 &lt;em&gt;Science&lt;/em&gt; paper showed that finite-amplitude perturbations of it produce a surprising variety of spatiotemporal patterns — which is exactly the experiment this chapter runs.&lt;/p&gt;</description>
			</item>
			<item>
				<title>14: Can Finite Computation Couple Distant Events?</title>
				<link>https://aibussin.com/books/digital-life/14-can-finite-computation-couple-distant-events/</link>
				<pubDate>Fri, 14 Aug 2026 22:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/14-can-finite-computation-couple-distant-events/</guid>
				<description>&lt;p&gt;The last chapter ended with a causal difference it could measure but could not explain.&lt;/p&gt;&#xA;&lt;p&gt;Under the corrected intervention, cumulative construction outside the measured local region was lower in both FORCE-derived branches than in PREVENT.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RETAINED far-field difference&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;−0.318    [−0.583, −0.068]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TRANSIENT far-field difference&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;−0.177    [−0.362, −0.029]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Both intervals lie below zero.&lt;/p&gt;&#xA;&lt;p&gt;So the far-field difference is no longer merely a suggestive discrepancy. It is established under that finite-budget protocol.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Build a Predator-Prey Ecosystem</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/14-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:44:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/14-chapter/</guid>
				<description>&lt;p&gt;Gray-Scott, like the forest fire, transforms each cell in place.&lt;/p&gt;&#xA;&lt;p&gt;Rule 184 moves occupancy, but in one constrained direction.&lt;/p&gt;&#xA;&lt;p&gt;An ecosystem adds a harder problem:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;organisms move&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;organisms reproduce&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;predators consume prey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;several organisms may want one destination&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now local intentions can conflict.&lt;/p&gt;&#xA;&lt;p&gt;That means update semantics become part of the model.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;separate-visible-kind-from-internal-state&#34;&gt;Separate visible kind from internal state&lt;/h2&gt;&#xA;&lt;p&gt;Start with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0 = empty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1 = prey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2 = predator&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; numpy &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; np&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;EMPTY &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PREY &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PREDATOR &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kind &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;zeros(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dtype&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;uint8,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A richer model may need predator energy, age or reproduction state.&lt;/p&gt;</description>
			</item>
			<item>
				<title>15: Can the Past Redirect the Future?</title>
				<link>https://aibussin.com/books/digital-life/15-can-the-past-redirect-the-future/</link>
				<pubDate>Fri, 14 Aug 2026 23:30:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/15-can-the-past-redirect-the-future/</guid>
				<description>&lt;p&gt;The last two chapters have narrowed the question to one local event.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;em&gt;What Does One Attachment Cause?&lt;/em&gt; chapter forced a single attachment and found an immediate causal effect consistent with the local rule&amp;rsquo;s mechanical prediction. A positive transient cumulative consequence was not established, while the late transient accumulation rate became practically consistent with zero under the frozen criterion.&lt;/p&gt;&#xA;&lt;p&gt;The previous chapter then showed that finite computation can redistribute evaluation opportunity outside the one-step reach of the local rule, change how the perturbation is expressed, and gate whether affected opportunities receive evaluation at all — while resolving no meaningful change in mean twelve-step consequence at the declared ±0.15 scale.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Generate Caves from Noise</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/15-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:46:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/15-chapter/</guid>
				<description>&lt;p&gt;A cave generator can be built from a mechanism we already understand:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;random initial cells&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;count nearby walls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apply local smoothing rule&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;repeat a few times&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;stop and use the result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Unlike a forest-fire simulation, we are not trying to model an indefinitely evolving world.&lt;/p&gt;&#xA;&lt;p&gt;Here the cellular automaton is a &lt;strong&gt;construction process&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The smoothing rule below belongs to a documented family: roguelike developers call the classic form the 4-5 rule — a tile becomes a wall if its 3×3 neighborhood (counting itself) holds at least 5 walls — usually run from ~45% initial fill for about five iterations. This chapter uses a stricter one-threshold variant; the Research section traces the lineage and the parameter consequences.&lt;/p&gt;</description>
			</item>
			<item>
				<title>16: We Found an Individual. Then We Didn&#39;t.</title>
				<link>https://aibussin.com/books/digital-life/16-we-found-an-individual-then-we-didnt/</link>
				<pubDate>Sat, 15 Aug 2026 01:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/16-we-found-an-individual-then-we-didnt/</guid>
				<description>&lt;p&gt;The &lt;em&gt;Is There Actually One Thing Here?&lt;/em&gt; chapter asked whether visible geometry marked a privileged boundary, and failed twice to establish one.&lt;/p&gt;&#xA;&lt;p&gt;Its candidate regions were defined primarily by geometry.&lt;/p&gt;&#xA;&lt;p&gt;That left open a stronger possibility: perhaps a boundary that is unremarkable as shape could still be privileged causally.&lt;/p&gt;&#xA;&lt;p&gt;Since then the book has been replacing geometric intuition with causal tests.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;What Does One Attachment Cause?&lt;/em&gt; measured the consequence of one local event.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Grow Terrain from Local Height Rules</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/16-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:48:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/16-chapter/</guid>
				<description>&lt;p&gt;Binary caves ask:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wall or floor?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Terrain needs richer state.&lt;/p&gt;&#xA;&lt;p&gt;Let each cell store a height:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0.0 = low&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1.0 = high&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now local rules can smooth, raise, erode and classify terrain.&lt;/p&gt;&#xA;&lt;p&gt;The challenge is not creating a pretty array.&lt;/p&gt;&#xA;&lt;p&gt;It is creating a process whose output we can explain and control.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;start-with-a-height-field&#34;&gt;Start with a height field&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; numpy &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; np&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;random_heightmap&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rows&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;120&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cols&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;160&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    seed&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;42&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rng &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;random&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;default_rng(seed)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; rng&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;random(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (rows, cols)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Raw independent noise contains variation but little large-scale geography.&lt;/p&gt;</description>
			</item>
			<item>
				<title>17: How to Fail Correctly</title>
				<link>https://aibussin.com/books/digital-life/17-how-to-fail-correctly/</link>
				<pubDate>Sat, 15 Aug 2026 03:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/17-how-to-fail-correctly/</guid>
				<description>&lt;p&gt;The most dangerous result in this book was not a noisy one.&lt;/p&gt;&#xA;&lt;p&gt;It was one of the cleanest.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;measurement            ✓    M = 0.4402&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            CI [0.419, 0.461]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;precision              ✓    MDE80 = 0.0268&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            against a +0.15 threshold&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;implementation         ✓    corrected transient intervention&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            known global channels removed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;predeclaration         ✓    regions selected blind to outcome&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            threshold frozen&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fresh reproduction     ✓    selected regions scored 0.4436&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            in an independent matched-null run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;individuation          ✕    not established&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The two numbers come from different runs. V1 measured raw causal containment on seed &lt;code&gt;20260916&lt;/code&gt;. V2 regenerated the selected regions on fresh seed &lt;code&gt;20260917&lt;/code&gt;, reproduced the raw score at &lt;code&gt;0.4436&lt;/code&gt;, and then asked the stronger question: did those regions exceed same-checkpoint matched controls?&lt;/p&gt;</description>
			</item>
			<item>
				<title>Generate Textures with Local Rules</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/17-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:50:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/17-chapter/</guid>
				<description>&lt;p&gt;Cellular automata do not need to represent a literal physical system.&lt;/p&gt;&#xA;&lt;p&gt;They can also be used as visual machines.&lt;/p&gt;&#xA;&lt;p&gt;The same ingredients we have used throughout the book:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;local state&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;neighborhood perception&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;shared update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;repetition&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;can generate masks, growth patterns, surface variation and animation.&lt;/p&gt;&#xA;&lt;p&gt;The evaluation question changes.&lt;/p&gt;&#xA;&lt;p&gt;Instead of asking:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is this physically accurate?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;we ask:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Does this local process produce useful, controllable visual structure?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That still demands more than &amp;ldquo;it looks interesting&amp;rdquo; — and this chapter&amp;rsquo;s metrics section holds it to that standard.&lt;/p&gt;</description>
			</item>
			<item>
				<title>18: What Is Digital Life?</title>
				<link>https://aibussin.com/books/digital-life/18-what-is-digital-life/</link>
				<pubDate>Sat, 15 Aug 2026 05:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/digital-life/18-what-is-digital-life/</guid>
				<description>&lt;p&gt;The previous chapter ended with a list of what survived the tests. Now we can ask what those results add up to.&lt;/p&gt;&#xA;&lt;p&gt;The results are experimental. The pattern they suggest is an inference.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-wrong-way-to-finish&#34;&gt;The Wrong Way to Finish&lt;/h2&gt;&#xA;&lt;p&gt;There is an ending available that would undo everything.&lt;/p&gt;&#xA;&lt;p&gt;The Digital Crystal grows and loses material. It replaces most of what it loses. Its material turns over while its process continues. Experimentally written hidden state can change how it responds to the same perturbation at the same visible geometry. A local event has real consequences, and finite computational constraints can reroute how those consequences are expressed. Regions of it retain their own causal influence and resist influence from outside. Earlier in the book, the Outlier system produced reproduction-like organization that survived a causal ancestry test.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Measure a Cellular Automaton</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/18-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:50:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/18-chapter/</guid>
				<description>&lt;p&gt;Up to this point we have mostly &lt;strong&gt;looked at&lt;/strong&gt; cellular automata.&lt;/p&gt;&#xA;&lt;p&gt;That is useful.&lt;/p&gt;&#xA;&lt;p&gt;It is also limiting. Part II closed by asking how we tell which worlds are dynamically interesting, and looking cannot answer that at scale.&lt;/p&gt;&#xA;&lt;p&gt;A human can inspect a handful of spacetime diagrams.&lt;/p&gt;&#xA;&lt;p&gt;We cannot reliably inspect:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;256 elementary rules&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;× several initial conditions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;× several widths&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;× hundreds of generations&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;× repeated stochastic runs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;by eye.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Activity, Density and Change</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/19-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:51:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/19-chapter/</guid>
				<description>&lt;p&gt;A cellular automaton can look busy while doing very little that persists.&lt;/p&gt;&#xA;&lt;p&gt;It can also look visually quiet while preserving a small moving structure for hundreds of generations.&lt;/p&gt;&#xA;&lt;p&gt;So we need to separate several properties that are easy to confuse:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;occupancy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;temporal change&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;spatial variation&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;persistence&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The first three are owned by the previous chapter — &lt;code&gt;density&lt;/code&gt;, &lt;code&gt;change_rate&lt;/code&gt;/&lt;code&gt;change_curve&lt;/code&gt; (our activity observable), and &lt;code&gt;spatial_variation&lt;/code&gt; — and are reused here without redefinition. This chapter adds what they cannot see: whether change persists, where it happens, and how runs end.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Entropy and Information</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/20-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:52:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/20-chapter/</guid>
				<description>&lt;p&gt;A row with almost all zeros is highly predictable.&lt;/p&gt;&#xA;&lt;p&gt;A row containing a balanced mixture of zeros and ones is less predictable.&lt;/p&gt;&#xA;&lt;p&gt;Shannon entropy gives us a precise way to measure that uncertainty — defined by Claude Shannon in 1948 as the expected surprise of a distribution, measured here in bits (base 2).&lt;/p&gt;&#xA;&lt;p&gt;This chapter formally owns what Chapter 3 previewed: the preview &lt;code&gt;binary_entropy&lt;/code&gt; becomes the definition below, with the base convention, edge cases, and limitations stated properly.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Periodicity and Attractors</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/21-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:53:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/21-chapter/</guid>
				<description>&lt;p&gt;Many cellular automata eventually repeat.&lt;/p&gt;&#xA;&lt;p&gt;A fixed point repeats every generation.&lt;/p&gt;&#xA;&lt;p&gt;An oscillator repeats after several generations.&lt;/p&gt;&#xA;&lt;p&gt;On a finite grid, deterministic cellular automata must eventually revisit a previous state because only finitely many states exist.&lt;/p&gt;&#xA;&lt;p&gt;That makes cycle detection a fundamental measurement: where entropy asked how uncertain a state is, recurrence asks whether the dynamics ever come back.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;hash-each-state&#34;&gt;Hash each state&lt;/h2&gt;&#xA;&lt;p&gt;For binary arrays we can store the bytes:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Sensitivity to Initial Conditions</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/22-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:54:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/22-chapter/</guid>
				<description>&lt;p&gt;Change one cell.&lt;/p&gt;&#xA;&lt;p&gt;Then run the same rule twice.&lt;/p&gt;&#xA;&lt;p&gt;If the two futures remain almost identical, the rule is insensitive to that perturbation.&lt;/p&gt;&#xA;&lt;p&gt;If the difference spreads, the rule amplifies local uncertainty.&lt;/p&gt;&#xA;&lt;p&gt;That is one of the cleanest experiments we can perform on a cellular automaton.&lt;/p&gt;&#xA;&lt;p&gt;One language note up front: this chapter says &amp;ldquo;sensitive&amp;rdquo; and &amp;ldquo;irregular,&amp;rdquo; never &amp;ldquo;chaotic&amp;rdquo; in the formal dynamical-systems sense. Whether any cellular automaton earns that stronger word is a classification question for the next chapter, which owns the class vocabulary.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Classify Rule Behavior</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/23-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:55:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/23-chapter/</guid>
				<description>&lt;p&gt;We now have six kinds of measurement. The literature already offers a coarser tool for organizing rules: four broad behavioral classes.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Class I   -&amp;gt; settles to homogeneous behavior&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Class II  -&amp;gt; settles to simple stable or periodic structures&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Class III -&amp;gt; irregular, apparently random behavior&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Class IV  -&amp;gt; persistent local structures and complex interactions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These labels are useful vocabulary — phenomenological shorthand from Wolfram&amp;rsquo;s 1980s survey, not formal dynamical-systems theorems. &amp;ldquo;Class III&amp;rdquo; here means &lt;em&gt;Wolfram-class&lt;/em&gt; irregularity, not proven chaos in the mathematical sense; the book has called Rule 30 &amp;ldquo;irregular&amp;rdquo; until now for exactly this reason, and this chapter does not upgrade that word.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Search All 256 Elementary Rules</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/24-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:56:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/24-chapter/</guid>
				<description>&lt;p&gt;Elementary cellular automata give us a rare luxury.&lt;/p&gt;&#xA;&lt;p&gt;The complete rule space is tiny.&lt;/p&gt;&#xA;&lt;p&gt;There are only:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;256 rules&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So we do not need sampling, intuition or famous examples.&lt;/p&gt;&#xA;&lt;p&gt;We can evaluate every rule.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;build-an-experiment-runner&#34;&gt;Build an experiment runner&lt;/h2&gt;&#xA;&lt;p&gt;Reuse the owned helpers with their real signatures — Chapter 18&amp;rsquo;s runner (rule number, width, generations, seed, single-or-random start) and Chapter 19&amp;rsquo;s fingerprint:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scan_rules&lt;/span&gt;(width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;201&lt;/span&gt;, generations&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    records &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; rule &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;256&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        history &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; run_rule(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            rule,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;width,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            generations&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;generations,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        record &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; fingerprint(history)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        record[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rule&amp;#34;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; rule&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        record[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mean_entropy&amp;#34;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; float(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            entropy_curve(history)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;mean()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        record[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;compression_ratio&amp;#34;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; compression_ratio(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            history&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        record&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;update(recurrence_metrics(history))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        records&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(record)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; records&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The hard part is no longer execution.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Search Larger Rule Spaces</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/25-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:57:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/25-chapter/</guid>
				<description>&lt;p&gt;The 256 elementary rules are small enough to enumerate.&lt;/p&gt;&#xA;&lt;p&gt;Most interesting cellular-automata design spaces are not.&lt;/p&gt;&#xA;&lt;p&gt;Add more states, a larger neighborhood, continuous parameters, or several channels and exhaustive search quickly becomes impossible.&lt;/p&gt;&#xA;&lt;p&gt;So we need search strategies.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;why-the-rule-space-explodes&#34;&gt;Why the rule space explodes&lt;/h2&gt;&#xA;&lt;p&gt;For &lt;code&gt;k&lt;/code&gt; possible cell states and a neighborhood containing &lt;code&gt;n&lt;/code&gt; cells, there are:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;k^n possible neighborhood configurations&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A deterministic rule chooses one of &lt;code&gt;k&lt;/code&gt; outputs for every configuration, giving:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Evolve Rules for Desired Behavior</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/26-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:58:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/26-chapter/</guid>
				<description>&lt;p&gt;Once we can represent a rule, mutate it and measure its behavior, we can evolve cellular automata.&lt;/p&gt;&#xA;&lt;p&gt;The key idea is simple:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;population of rules&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;simulate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;measure&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;select&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mutate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;repeat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This chapter builds that loop without hiding it behind an optimization framework. &amp;ldquo;Evolution&amp;rdquo; here is algorithmic — genomes, mutation, selection over rule bits — not a biological claim. The genotype is eight bits; the phenotype is the measured trajectory.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cellular Automata as Computation</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/27-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 18:59:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/27-chapter/</guid>
				<description>&lt;p&gt;A cellular automaton is a state machine distributed across space.&lt;/p&gt;&#xA;&lt;p&gt;Each cell reads local information, applies the same transition rule, and writes a new state.&lt;/p&gt;&#xA;&lt;p&gt;That is computation in the thin sense: deterministic state transformation. Every automaton in this book computes, in that sense, every step it runs.&lt;/p&gt;&#xA;&lt;p&gt;The deeper question — and the one this chapter formally owns — is whether local patterns can carry, transform and combine information in a way that supports &lt;em&gt;general&lt;/em&gt; computation. Chapter 5 gave the first exposure through Rule 110&amp;rsquo;s gliders; here universality becomes a precise comparative property rather than an impressive example.&lt;/p&gt;</description>
			</item>
			<item>
				<title>From Discrete Cells to Continuous State</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/28-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 19:43:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/28-chapter/</guid>
				<description>&lt;p&gt;So far most of our cellular automata have used a small set of states:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0 or 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;empty / prey / predator&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ready / firing / refractory&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That makes rules easy to inspect.&lt;/p&gt;&#xA;&lt;p&gt;But it also forces every update to make a hard categorical decision.&lt;/p&gt;&#xA;&lt;p&gt;What happens if a cell can instead hold &lt;strong&gt;any value between 0 and 1&lt;/strong&gt;?&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0.0 -------------------------- 1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now a cell can represent intensity, density, concentration, activation or some abstract amount of local material.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Neighborhoods as Convolution Kernels</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/29-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 19:45:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/29-chapter/</guid>
				<description>&lt;p&gt;A neighborhood does not have to be a list of nearby coordinates.&lt;/p&gt;&#xA;&lt;p&gt;It can be a &lt;strong&gt;spatial weighting function&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;That lets us say:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cells near this radius matter a lot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cells closer in matter less&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cells farther away do not matter at all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The standard programming tool for applying that same weighted neighborhood everywhere is convolution.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;start-with-a-small-kernel&#34;&gt;Start with a small kernel&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; numpy &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; np&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kernel &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;array([&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.6&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.1&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Normalize it:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Growth Functions</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/30-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 19:48:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/30-chapter/</guid>
				<description>&lt;p&gt;We now have two pieces:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;continuous state&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;weighted neighborhood&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But a neighborhood value does not tell us what should happen next.&lt;/p&gt;&#xA;&lt;p&gt;We need a response curve.&lt;/p&gt;&#xA;&lt;p&gt;In Lenia-style systems that curve is usually called a &lt;strong&gt;growth function&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It converts neighborhood potential into local growth or decay. This generalizes Chapter 28&amp;rsquo;s &lt;code&gt;growth_function&lt;/code&gt;: same Gaussian-bump shape, now with explicit &lt;code&gt;mu&lt;/code&gt; (preferred density) and &lt;code&gt;sigma&lt;/code&gt; (tolerance) parameters instead of fixed constants.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Build Lenia From First Principles</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/31-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 19:51:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/31-chapter/</guid>
				<description>&lt;p&gt;We now have every conceptual component needed for a minimal Lenia implementation:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;continuous state&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;radial kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;convolution&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;smooth growth function&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;small time step&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bounded update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This chapter assembles them into one runnable system — one historically important system, due to Bert Wang-Chak Chan (&amp;ldquo;Lenia: Biology of Artificial Life,&amp;rdquo; Complex Systems 28(3), 2019): not generic continuous CA, but Lenia specifically. The framing for this part so far:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Ch28–30&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;= components&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Ch31&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;= one historically important system built from those components&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;fidelity-statement&#34;&gt;Fidelity statement&lt;/h2&gt;&#xA;&lt;p&gt;The engine below implements the canonical Lenia update exactly — state plus timestep-scaled growth of the convolved field, clipped to [0, 1] — with the exponential growth mapping from Chan&amp;rsquo;s paper. It differs from full Lenia in scope, stated here so later comparisons use the same baseline:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Discover Your First Lenia Organisms</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/32-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 19:54:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/32-chapter/</guid>
				<description>&lt;p&gt;Running Lenia is easy.&lt;/p&gt;&#xA;&lt;p&gt;Finding persistent, localized, non-trivial structures is the hard part.&lt;/p&gt;&#xA;&lt;p&gt;This chapter turns that problem into a repeatable search pipeline. It follows Chan&amp;rsquo;s discovery playbook structurally — random soup generation, survival filtering, parameter tweaking, and, crucially, human judgment for what counts as interesting — while automating the parts that do not need eyes.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;define-what-counts-as-a-candidate&#34;&gt;Define what counts as a candidate&lt;/h2&gt;&#xA;&lt;p&gt;We should not start with the vague objective:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Search Lenia Parameter Space</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/33-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 19:57:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/33-chapter/</guid>
				<description>&lt;p&gt;A Lenia pattern is not defined by its initial state alone.&lt;/p&gt;&#xA;&lt;p&gt;It also lives inside a particular dynamical world.&lt;/p&gt;&#xA;&lt;p&gt;Change the kernel or growth function slightly and the same seed may:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;die&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;explode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;freeze&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oscillate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;move&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;split&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;stabilize into a different morphology&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So discovery has two coupled search spaces:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;initial condition&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      +&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;world parameters&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;define-parameter-ranges&#34;&gt;Define parameter ranges&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PARAM_RANGES &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;radius&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ring_center&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#ae81ff&#34;&gt;0.25&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.75&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ring_width&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#ae81ff&#34;&gt;0.05&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.25&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mu&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#ae81ff&#34;&gt;0.05&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.30&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sigma&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#ae81ff&#34;&gt;0.01&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.08&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dt&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#ae81ff&#34;&gt;0.03&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.20&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These ranges are experimental choices.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Multi-Kernel and Multi-Channel Lenia</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/34-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/34-chapter/</guid>
				<description>&lt;p&gt;Our Lenia implementation has one scalar field:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;A(x, y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and one kernel:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;K&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That is enough for rich behavior.&lt;/p&gt;&#xA;&lt;p&gt;But it also forces every local process to share the same spatial scale and the same state variable.&lt;/p&gt;&#xA;&lt;p&gt;A richer model can use multiple channels:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;A0(x, y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;A1(x, y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;A2(x, y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and multiple kernels linking them.&lt;/p&gt;&#xA;&lt;p&gt;This chapter builds a pedagogical multi-channel formulation in Lenia&amp;rsquo;s spirit — a connection graph with per-edge kernels and growth parameters. Canonical multi-kernel, multi-channel Lenia is Chan&amp;rsquo;s &amp;ldquo;Expanded Universe&amp;rdquo; (ALIFE 2020) direction; the book&amp;rsquo;s version is simpler and says so, keeping the graph inspectable rather than matching the canonical matrix formulation.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Damage, Robustness and Persistence</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/35-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:03:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/35-chapter/</guid>
				<description>&lt;p&gt;A pattern that survives in perfect conditions is only the beginning.&lt;/p&gt;&#xA;&lt;p&gt;A stronger artificial-life question is:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What happens when the pattern is disturbed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;We can turn that into an experiment.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;define-damage-explicitly&#34;&gt;Define damage explicitly&lt;/h2&gt;&#xA;&lt;p&gt;Start with a rectangular ablation:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;damage_rectangle&lt;/span&gt;(state, y0, y1, x0, x1):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    damaged &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; state&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;copy()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    damaged[&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;, y0:y1, x0:x1] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; damaged&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For a single-channel state:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;damaged &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; damage_rectangle(state, &lt;span style=&#34;color:#ae81ff&#34;&gt;55&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;70&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;55&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;70&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For multi-channel state, the ellipsis damages all channels in the same spatial region.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Flow-Lenia and Mass-Conserving Artificial Life</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/36-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:06:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/36-chapter/</guid>
				<description>&lt;p&gt;Ordinary Lenia updates local state by adding growth:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;A(t + dt) = clip(A(t) + dt × G(U))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That means state can be created in one region and destroyed in another.&lt;/p&gt;&#xA;&lt;p&gt;For many artificial-life experiments that is perfectly acceptable.&lt;/p&gt;&#xA;&lt;p&gt;But it leaves a major question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What changes if local structure must reorganize &lt;strong&gt;existing mass&lt;/strong&gt; instead of creating or deleting it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Flow-Lenia — Plantec et al. (2023), &amp;ldquo;Flow-Lenia: Towards open-ended evolution in cellular automata through mass conservation and parameter localization&amp;rdquo; — explores exactly that direction through two ideas: reformulating the update around transport so mass is conserved, and embedding rule parameters as local fields rather than global constants. This chapter presents both ideas with small pedagogical models, honestly labeled as stepping stones rather than reproductions.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Make the Automaton Differentiable</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/37-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:31:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/37-chapter/</guid>
				<description>&lt;p&gt;So far every rule in this book has been chosen by us.&lt;/p&gt;&#xA;&lt;p&gt;Even Lenia still asks us to decide the neighborhood kernel, the growth function and the parameters that connect them.&lt;/p&gt;&#xA;&lt;p&gt;What if we stop designing the local rule directly?&lt;/p&gt;&#xA;&lt;p&gt;What if we define only the &lt;strong&gt;goal&lt;/strong&gt;, then let gradient descent discover a local update rule that achieves it? (Designed here, learned starting now — Chapter 36&amp;rsquo;s bridge sentence becomes this chapter&amp;rsquo;s premise.)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Learn the Local Update Rule</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/38-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:32:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/38-chapter/</guid>
				<description>&lt;p&gt;A neural cellular automaton does not need a large neural network.&lt;/p&gt;&#xA;&lt;p&gt;It needs a &lt;strong&gt;small local network applied everywhere&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;That distinction matters.&lt;/p&gt;&#xA;&lt;p&gt;The capability of the system comes less from the size of one cell&amp;rsquo;s computation and more from the repeated interaction of many cells over time. (Not &amp;ldquo;intelligence&amp;rdquo; — computational capacity through recurrence, in the book&amp;rsquo;s established vocabulary.)&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;perception-first&#34;&gt;Perception first&lt;/h2&gt;&#xA;&lt;p&gt;Each cell needs information about itself and nearby cells.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hidden Cell Channels and Local Memory</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/39-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:34:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/39-chapter/</guid>
				<description>&lt;p&gt;A visible pixel is not enough state for a cell that must also coordinate growth.&lt;/p&gt;&#xA;&lt;p&gt;So give every cell a vector.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[R, G, B, alpha, h1, h2, ... h12]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The first channels can be rendered. The rest are private internal state. (Chapter 37 deferred hidden-channel ownership here; this chapter takes it.)&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CHANNELS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VISIBLE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;state &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; torch&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;zeros(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, CHANNELS, &lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;, device&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;DEVICE)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The hidden channels have no labels. We do not tell the model that channel 8 means &amp;ldquo;distance from the center&amp;rdquo; or channel 11 means &amp;ldquo;grow east&amp;rdquo;. If useful internal signals exist, training must discover them.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Grow a Target From One Seed</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/40-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:35:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/40-chapter/</guid>
				<description>&lt;p&gt;Now we can pose the central morphogenesis problem:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Start from one cell and learn local rules that construct a target pattern.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Note what this chapter is not: it is not asynchronous scheduling (that is the next chapter), nor persistence or regeneration training (later chapters own those objectives). One objective — growth to target — trained and honestly evaluated.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prepare-a-target&#34;&gt;Prepare a target&lt;/h2&gt;&#xA;&lt;p&gt;Assume an RGBA image has been loaded into a tensor:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Randomize the Update Schedule</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/41-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:36:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/41-chapter/</guid>
				<description>&lt;p&gt;Most cellular automata in this book have used synchronous updates:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;all cells observe state_t&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;all cells update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;state_t+1 appears&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Neural cellular automata are typically trained with randomized update schedules: there is no global clock, and cells cannot rely on exact phase relationships. The aim is robustness to timing, which we will measure rather than assume.&lt;/p&gt;&#xA;&lt;h2 id=&#34;stochastic-firing&#34;&gt;Stochastic firing&lt;/h2&gt;&#xA;&lt;p&gt;Instead of applying every predicted update, sample a binary mask:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;stochastic_update&lt;/span&gt;(x, dx, fire_rate&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mask &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        torch&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rand(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            x&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;shape[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, x&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;shape[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;], x&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;shape[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            device&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;x&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;device,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; fire_rate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; dx &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; mask&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Half the cells update on average.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Train for Persistence</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/42-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:37:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/42-chapter/</guid>
				<description>&lt;p&gt;Growing a target once is not enough.&lt;/p&gt;&#xA;&lt;p&gt;A useful self-organizing system should continue to satisfy its objective after it arrives.&lt;/p&gt;&#xA;&lt;p&gt;That means the target should behave more like an &lt;strong&gt;attractor&lt;/strong&gt; than a timestamped frame. Operationally: low loss sustained over an extended interval past the growth horizon — not exact state invariance, not biological homeostasis.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-failure-mode&#34;&gt;The failure mode&lt;/h2&gt;&#xA;&lt;p&gt;Suppose training always evaluates at step 64.&lt;/p&gt;&#xA;&lt;p&gt;The model can learn:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;seed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;target at step 64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;overshoot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;disintegrate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The loss never sees the failure after step 64.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Regenerate After Damage</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/43-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:38:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/43-chapter/</guid>
				<description>&lt;p&gt;Persistence asks whether the organism can remain near its target.&lt;/p&gt;&#xA;&lt;p&gt;Regeneration asks a different question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;after part of the state is destroyed, can local rules reconstruct the missing structure?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is a much stronger test.&lt;/p&gt;&#xA;&lt;h2 id=&#34;damage-the-state-not-just-the-image&#34;&gt;Damage the state, not just the image&lt;/h2&gt;&#xA;&lt;p&gt;If we erase only visible RGBA channels but leave hidden channels untouched, the model may retain a perfect invisible blueprint.&lt;/p&gt;&#xA;&lt;p&gt;A harder test removes &lt;strong&gt;all channels&lt;/strong&gt; inside the damaged region.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Test Generalization Beyond Training</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/44-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:39:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/44-chapter/</guid>
				<description>&lt;p&gt;A model can look robust while still depending on the exact conditions used during training.&lt;/p&gt;&#xA;&lt;p&gt;So after growth, persistence and regeneration, we need a harder question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;what happens when the world changes?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;build-a-generalization-matrix&#34;&gt;Build a generalization matrix&lt;/h2&gt;&#xA;&lt;p&gt;Vary dimensions independently:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;canvas size&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;seed position&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;update rate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rollout length&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;damage geometry&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;damage severity&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;noise level&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;boundary conditions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then evaluate combinations that were not used during training. The table at the end of this chapter is executable scaffolding, not a report: every row specifies how to measure, and the verdicts get filled in by running, starting from one held-out axis at a time rather than all shifts at once.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Neural Cellular Automata for Pathfinding</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/45-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:37:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/45-chapter/</guid>
				<description>&lt;p&gt;Until now our neural cellular automata have learned to &lt;strong&gt;make and maintain shapes&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Now we will ask them to compute something.&lt;/p&gt;&#xA;&lt;p&gt;Given:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;walls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;finish&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;can a shared local update rule discover a path?&lt;/p&gt;&#xA;&lt;p&gt;This is an unusually good task for an NCA because classical pathfinding already has a local interpretation — and because recent work (Earle et al., 2023) has shown both hand-coded and learned BFS/DFS inside the NCA framework, with generalization tested on harder distributions. That paper is this chapter&amp;rsquo;s running reference: it shows the task is learnable in that setup and sets the evaluation standard.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Learn to Solve Mazes</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/46-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:38:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/46-chapter/</guid>
				<description>&lt;p&gt;A pathfinding NCA becomes interesting only when the training problem itself is disciplined.&lt;/p&gt;&#xA;&lt;p&gt;If every maze has the same size, wall density and corridor style, the model may learn the dataset more than the algorithm.&lt;/p&gt;&#xA;&lt;p&gt;So this chapter builds the training system around &lt;strong&gt;procedural variation&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;generate-mazes-as-data&#34;&gt;Generate mazes as data&lt;/h2&gt;&#xA;&lt;p&gt;Start with binary occupancy:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0 = open&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1 = wall&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;One simple generator begins with random walls. It does not reject disconnected examples; the BFS teacher below marks unreachable cells with a mask instead.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Generalize to Harder and Larger Mazes</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/47-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:39:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/47-chapter/</guid>
				<description>&lt;p&gt;Training accuracy answers the easiest question:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Can the model solve problems drawn from the training distribution?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The more interesting question is:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Did the local rule learn a reusable computation?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This chapter turns that into an explicit evaluation protocol.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;hold-out-dimensions-of-difficulty&#34;&gt;Hold out dimensions of difficulty&lt;/h2&gt;&#xA;&lt;p&gt;Instead of one validation set, create several test families.&lt;/p&gt;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;A: 32×32, familiar wall density&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;B: 48×48, familiar wall density&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C: 64×64, familiar wall density&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;D: 32×32, denser obstacles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;E: 32×32, longer required paths&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;F: different procedural maze generator&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;G: narrow bottlenecks and many dead ends&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The point is not to maximize one aggregate score.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Inspect Hidden-State Propagation</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/48-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:40:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/48-chapter/</guid>
				<description>&lt;p&gt;A neural cellular automaton can solve a maze while most of its computation remains invisible.&lt;/p&gt;&#xA;&lt;p&gt;The visible output might be one distance channel.&lt;/p&gt;&#xA;&lt;p&gt;The internal state may contain eleven hidden channels (5–15 in the maze layout) evolving underneath it.&lt;/p&gt;&#xA;&lt;p&gt;This chapter asks:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;what is moving through those hidden channels while the answer is being computed?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;capture-the-entire-state-trajectory&#34;&gt;Capture the entire state trajectory&lt;/h2&gt;&#xA;&lt;p&gt;Instead of saving only the final output — &lt;code&gt;rollout_frozen&lt;/code&gt; plus per-step recording, same clamped execution, now with a trace:&lt;/p&gt;</description>
			</item>
			<item>
				<title>What Did the Neural CA Actually Learn?</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/49-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:41:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/49-chapter/</guid>
				<description>&lt;p&gt;Visualization gives us hypotheses.&lt;/p&gt;&#xA;&lt;p&gt;Intervention gives us evidence.&lt;/p&gt;&#xA;&lt;p&gt;If we suspect a hidden channel carries useful information, the next question is simple:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;what happens if we remove it?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This chapter turns NCA interpretability into controlled experimentation.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;establish-the-behavioral-baseline&#34;&gt;Establish the behavioral baseline&lt;/h2&gt;&#xA;&lt;p&gt;Before touching the model, record its normal performance — with a defined suite, not an anecdote:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;score_maze&lt;/span&gt;(final, walls, start, goal):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dist &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; final[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;detach()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;cpu()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;numpy()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    optimal_dist &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; bfs_distance(walls, goal)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isfinite(optimal_dist[start]):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;unreachable&amp;#34;&lt;/span&gt;, int(np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;all(dist &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.05&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; descend_path(dist, start, goal, walls)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; path[&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; goal:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;unsolved&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    excess &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; len(path) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; int(optimal_dist[start])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;solved&amp;#34;&lt;/span&gt;, excess)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;evaluate_suite&lt;/span&gt;(model, mazes, steps&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;128&lt;/span&gt;, runner&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    run &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; runner &lt;span style=&#34;color:#f92672&#34;&gt;or&lt;/span&gt; rollout_frozen&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    solved &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; optimal &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; unreachable_ok &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    excess, unreachable &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [], &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; walls, start, goal &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; mazes:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        state &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; make_state(walls, start, goal)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        frozen &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; state&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;clone()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        final &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; run(model, state, steps, frozen)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        kind, value &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; score_maze(final, walls, start, goal)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; kind &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;unreachable&amp;#34;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            unreachable &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            unreachable_ok &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; value&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; kind &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;solved&amp;#34;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            solved &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            optimal &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; int(value &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            excess&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(value)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    n &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; len(mazes) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; unreachable&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;valid_path_rate&amp;#34;&lt;/span&gt;: solved &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; max(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, n),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;optimal_path_rate&amp;#34;&lt;/span&gt;: optimal &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; max(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, n),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mean_excess&amp;#34;&lt;/span&gt;: float(np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;mean(excess)) &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; excess &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; float(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nan&amp;#34;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;unreachable_accuracy&amp;#34;&lt;/span&gt;: unreachable_ok &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; max(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, unreachable),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(Verified: executes end to end on test mazes; an untrained stub scores zero throughout — the harness measures rather than flatters.)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Profile Before You Optimize</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/50-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:52:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/50-chapter/</guid>
				<description>&lt;p&gt;By now we have built dozens of automata.&lt;/p&gt;&#xA;&lt;p&gt;The natural temptation is to make them faster.&lt;/p&gt;&#xA;&lt;p&gt;The wrong first question is:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Which optimization trick should I use?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The right first question is:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Where is the time actually going?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Performance work begins with measurement, and with the doctrine Part VI starts from:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Optimize the verified implementation, not the first implementation that happens to render something plausible.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Running this book&amp;rsquo;s own earlier code turned up undefined helpers, wrong signatures and a misaligned FFT, all inside chapters that produced plausible figures. Speed means nothing until equivalence is established.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Vectorize the Update Loop</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/51-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:53:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/51-chapter/</guid>
				<description>&lt;p&gt;A cellular automaton is local.&lt;/p&gt;&#xA;&lt;p&gt;That does &lt;strong&gt;not&lt;/strong&gt; mean we should update it cell by cell in Python.&lt;/p&gt;&#xA;&lt;p&gt;For dense grids, the same local rule is applied everywhere. That regularity is exactly what array programming is good at.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;start-with-the-obvious-implementation&#34;&gt;Start with the obvious implementation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;life_step_slow&lt;/span&gt;(grid):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    height, width &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; grid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;shape&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    next_grid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;zeros_like(grid)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; y &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(height):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(width):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            total &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; dy &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; dx &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; dx &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;and&lt;/span&gt; dy &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#66d9ef&#34;&gt;continue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    total &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; grid[(y &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; dy) &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; height, (x &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; dx) &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; width]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            alive &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; grid[y, x] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            next_grid[y, x] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                total &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;or&lt;/span&gt; (alive &lt;span style=&#34;color:#f92672&#34;&gt;and&lt;/span&gt; total &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; next_grid&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is useful because it states the mechanism clearly.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Run Cellular Automata on the GPU</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/52-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:54:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/52-chapter/</guid>
				<description>&lt;p&gt;Once the update is expressed as tensor operations, moving to a GPU becomes straightforward.&lt;/p&gt;&#xA;&lt;p&gt;But a GPU is not automatically faster.&lt;/p&gt;&#xA;&lt;p&gt;It wins when there is enough parallel work to amortize transfer and launch overhead.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;a-tensor-implementation-of-life&#34;&gt;A tensor implementation of Life&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; torch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; torch.nn.functional &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; F&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LIFE_KERNEL &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; torch&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;tensor(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [[&lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     [&lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     [&lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;view(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;life_step&lt;/span&gt;(x):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    padded &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; F&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pad(x, (&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), mode&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;circular&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    neighbors &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; F&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;conv2d(padded, LIFE_KERNEL&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;to(x&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;device))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    alive &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    born &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; neighbors &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    survive &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; alive &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt; (neighbors &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; (born &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; survive)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;float()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Two things matter here beyond the convolution. First, this is the third &lt;code&gt;life_step&lt;/code&gt; in the book (after Chapters 6 and 51) — same B3/S23 rule, new backend, bridged explicitly rather than silently redefined. Second, the padding mode is load-bearing: plain &lt;code&gt;padding=1&lt;/code&gt; zero-pads, which silently changes periodic boundaries into dead ones. Circular padding preserves the torus semantics every roll-based helper in this book assumes — verified bit-identical against the NumPy version on 20 random grids, where the zero-padded variant mismatched all 20 at the edges.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Use FFTs for Large Neighborhoods</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/53-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:55:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/53-chapter/</guid>
				<description>&lt;p&gt;Small local neighborhoods are cheap to evaluate directly.&lt;/p&gt;&#xA;&lt;p&gt;Large smooth kernels are different.&lt;/p&gt;&#xA;&lt;p&gt;Lenia taught us that a neighborhood may cover dozens of cells in every direction. At that scale, direct convolution can become expensive.&lt;/p&gt;&#xA;&lt;p&gt;The Fourier transform gives us another route — provided the kernel is centered correctly, which is where the FFT bug this book had to fix lived.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;convolution-becomes-multiplication&#34;&gt;Convolution becomes multiplication&lt;/h2&gt;&#xA;&lt;p&gt;For periodic domains:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;convolution in space&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ↕&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;multiplication in frequency&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So instead of sliding a large kernel over every location, we can transform both arrays, multiply them, and transform back.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Build a Reusable Cellular Automata Engine</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/54-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:56:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/54-chapter/</guid>
				<description>&lt;p&gt;Across this book we repeatedly rebuilt the same pieces:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;state&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;neighborhood&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rule&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;step loop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;measurements&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rendering&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That repetition was useful while learning.&lt;/p&gt;&#xA;&lt;p&gt;Now it is time to turn those concepts into interfaces.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;keep-the-engine-small&#34;&gt;Keep the engine small&lt;/h2&gt;&#xA;&lt;p&gt;A useful engine does not need to know what Conway&amp;rsquo;s Life, Lenia or an NCA is.&lt;/p&gt;&#xA;&lt;p&gt;It only needs to orchestrate state transitions.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; dataclasses &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; dataclass&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; typing &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Callable, Any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@dataclass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Automaton&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    state: Any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    step_fn: Callable[[Any], Any]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;step&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;state &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;step_fn(self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;state)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;state&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;(self, steps):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; _ &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(steps):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;step()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;state&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That is intentionally boring.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Make Experiments Reproducible</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/55-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:57:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/55-chapter/</guid>
				<description>&lt;p&gt;By this stage the book contains many systems whose behavior depends on parameters, seeds and implementation choices.&lt;/p&gt;&#xA;&lt;p&gt;If we cannot reconstruct a run, we cannot really compare it.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;treat-configuration-as-data&#34;&gt;Treat configuration as data&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; dataclasses &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; dataclass, asdict&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@dataclass&lt;/span&gt;(frozen&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ExperimentConfig&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    model: str&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    width: int&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    height: int&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    steps: int&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    seed: int&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    backend: str&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dtype: str&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    params: dict &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then extend with model-specific parameters rather than hiding them in notebook cells.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Run Parameter Sweeps and Benchmarks</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/56-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:58:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/56-chapter/</guid>
				<description>&lt;p&gt;Once experiments are reproducible, we can stop treating parameters as one-off choices and start mapping behavior systematically.&lt;/p&gt;&#xA;&lt;p&gt;A parameter sweep is not merely a convenience.&lt;/p&gt;&#xA;&lt;p&gt;It is a way to turn a model into a measurable landscape.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;build-a-grid-of-experiments&#34;&gt;Build a grid of experiments&lt;/h2&gt;&#xA;&lt;p&gt;Sweep over rules and seeds with owned machinery — Chapter 18&amp;rsquo;s runner and Chapter 19&amp;rsquo;s fingerprint, reused exactly:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; itertools &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; product&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sweep_rules&lt;/span&gt;(rules, seeds, width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;201&lt;/span&gt;, generations&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    records &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; rule, seed &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; product(rules, seeds):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        history &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; run_rule(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            rule,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;width,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            generations&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;generations,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            seed&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;seed,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            initial&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;random&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        records&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rule&amp;#34;&lt;/span&gt;: rule,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;seed&amp;#34;&lt;/span&gt;: seed,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;**&lt;/span&gt;fingerprint(history),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; records&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Notice the seed axis.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Generate Figures and Animations</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/57-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 20:59:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/57-chapter/</guid>
				<description>&lt;p&gt;Cellular automata are visual systems.&lt;/p&gt;&#xA;&lt;p&gt;That makes figures and animations unusually important.&lt;/p&gt;&#xA;&lt;p&gt;But a useful image is not merely a screenshot. It should be a reproducible output of an experiment.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;save-figures-from-data-not-from-memory&#34;&gt;Save figures from data, not from memory&lt;/h2&gt;&#xA;&lt;p&gt;Suppose an experiment has produced a spacetime history:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;history &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;stack(states)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A figure generator should accept that result explicitly:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; matplotlib.pyplot &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; plt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;save_spacetime&lt;/span&gt;(history, path):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    fig, ax &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;subplots(figsize&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ax&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;imshow(history, interpolation&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nearest&amp;#34;&lt;/span&gt;, aspect&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;auto&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ax&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set_xlabel(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cell&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ax&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set_ylabel(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;time&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    fig&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;tight_layout()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    fig&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;savefig(path, dpi&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;180&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;close(fig)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(Verified headless: PNG written with labeled axes from recorded arrays.)&lt;/p&gt;</description>
			</item>
			<item>
				<title>Build a Cellular Automata Laboratory</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/58-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 21:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/58-chapter/</guid>
				<description>&lt;p&gt;We now have enough pieces to stop thinking in terms of isolated scripts.&lt;/p&gt;&#xA;&lt;p&gt;A useful cellular-automata laboratory should let us define, run, measure, replay and visualize experiments across many kinds of automata without hiding the mechanisms we spent the whole book learning.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-laboratory-is-not-the-model&#34;&gt;The laboratory is not the model&lt;/h2&gt;&#xA;&lt;p&gt;Keep these concerns separate:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;model definition&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;execution backend&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;experiment configuration&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;metrics&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;artifacts&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;analysis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A rule should not know where its PNG is saved.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Capstone — Discover, Measure and Explain a New System</title>
				<link>https://aibussin.com/books/cellular-automata-from-first-principles/59-chapter/</link>
				<pubDate>Mon, 10 Aug 2026 21:01:00 +0100</pubDate>
				<guid>https://aibussin.com/books/cellular-automata-from-first-principles/59-chapter/</guid>
				<description>&lt;p&gt;The previous chapter built the laboratory. This one uses it on a single problem.&lt;/p&gt;&#xA;&lt;p&gt;The book began with one tiny rule applied to one tiny neighborhood.&lt;/p&gt;&#xA;&lt;p&gt;We end with a different question:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Can we discover a cellular system, characterize its behavior, test its robustness and explain what we actually know about it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That is the capstone. It uses the ideas rather than listing them: every stage below reuses owned machinery — Lenia configs and kernels (Ch31), discovery scoring (Ch32), outcome classes (Ch33), the measurement stack (Ch18–22), perturbation discipline (Ch35), search strategy (Ch24–25), and experiment records (Ch55).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 08: Is Your Agent Spending the Same Compute on Every Task? Build Adaptive Agents That Escalate Only When Needed</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/08-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/08-chapter/</guid>
				<description>Build adaptive agent runtimes that start cheap, measure uncertainty and failure, and escalate selectively into deeper reasoning, more samples, search, stronger models or specialist review only when the evidence justifies it.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 26: Why Did the Agent Fail? Build an Incident Forensics Pipeline</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/26-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/26-chapter/</guid>
				<description>A practical incident-forensics workflow for advanced agents: reconstruct the run, find the earliest divergence, distinguish root cause from downstream symptoms, measure blast radius, and prove that a remediation would have prevented the incident.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 27: How Reliable Does an Agent Need to Be? Define SLOs and Error Budgets</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/27-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/27-chapter/</guid>
				<description>A practical reliability framework for advanced agents: define verified-success SLOs, false-success ceilings, UNKNOWN budgets, latency and cost targets, then use error-budget burn to decide when to ship capability and when to stop and harden the system.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 28: Where Should You Spend the Next Engineering Hour? Prioritize Reliability by Risk and Expected Return</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/28-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/28-chapter/</guid>
				<description>A practical framework for deciding where to spend the next engineering hour in an advanced-agent system: rank remediation by expected reduction in verified reliability loss, severity, recurrence, blast radius, confidence and implementation cost.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 29: When Should an Agent Stop and Ask a Human? Design Authority Boundaries and Escalation</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/29-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/29-chapter/</guid>
				<description>A practical architecture for agent authority boundaries: decide what an agent may do autonomously, when it must escalate, what evidence a human reviewer needs, and how to avoid turning human approval into rubber-stamping.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 30: Is This Task Outside Your Agent’s Competence? Build Competence Envelopes and OOD Detection</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/30-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/30-chapter/</guid>
				<description>A practical framework for competence envelopes in production agents: distinguish uncertainty from lack of validated competence, detect out-of-distribution tasks, contract authority when evidence is weak, and expand autonomy only through measured evidence.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 31: How Can an Agent Learn New Capabilities Without Expanding Its Own Authority? Use Sandboxed Capability Acquisition</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/31-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/31-chapter/</guid>
				<description>A practical architecture for sandboxed capability acquisition: let agents explore tasks outside their validated competence envelope, accumulate externally verified evidence, and propose capability expansion without ever granting themselves production authority.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 32: Which Capabilities Are Actually Worth Building? Design a Capability Portfolio</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/32-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/32-chapter/</guid>
				<description>A practical framework for deciding which agent capabilities are worth acquiring: rank missing capabilities by user value, verifier availability, reliability risk, acquisition cost, maintenance burden, and the quality of human or deterministic alternatives.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 33: Which Shared Components Actually Unlock More Capability? Build a Capability Dependency Graph</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/33-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/33-chapter/</guid>
				<description>A practical capability-dependency architecture for advanced agents: identify shared primitives that unlock many capabilities, quantify leverage, expose correlated-failure hotspots, and invest in platform components without creating hidden systemic risk.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 34: Where Should This Task Actually Run? Build Capability-Aware Placement Across Models, Providers and Resource Pools</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/34-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/34-chapter/</guid>
				<description>A practical placement architecture for advanced agents: route work across local and frontier models, providers, regions, GPUs, browser pools and specialist runtimes using demonstrated competence, verifier availability, policy constraints, health, cost and latency rather than model prestige.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 35: How Do You Move a Running Agent Between Workers Without Losing Meaning? Build Portable Execution State and Safe Handoff</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/35-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/35-chapter/</guid>
				<description>A practical architecture for portable agent execution state: checkpoint long-running runs, transfer ownership safely across workers and providers, preserve evidence and authority, and reject migrations that cannot be proven compatible.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 36: Is Your Agent Acting on Stale State? Build Temporal Consistency, Freshness Budgets and Conflict Detection</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/36-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/36-chapter/</guid>
				<description>A practical architecture for keeping long-running agents from acting on stale assumptions: classify state by freshness, track version vectors, detect conflicts, revalidate before consequential actions, and force replanning when the world has changed underneath the run.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 37: Is Your Agent Still Solving the Right Task? Build Intent Versioning, Supersession and Cancellation</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/37-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/37-chapter/</guid>
				<description>A production architecture for intent versioning, supersession and cancellation in long-running agents: stop obsolete work, preserve committed effects, reconcile partial actions, and prevent stale goals from retaining authority.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 38: A Plan Is Not a Commitment — Model Goals, Commitments and Executable Work</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/38-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/38-chapter/</guid>
				<description>A practical architecture for separating goals, plans, commitments, tasks and actions in long-running agents so replanning, cancellation, handoff and external obligations remain correct.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 39: How Do You Make an Agent Survive for Days? Build Durable Long-Running Workflows</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/39-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/39-chapter/</guid>
				<description>A practical architecture for long-running agents: keep workflow state durable while treating models and workers as disposable, with explicit waits, retries, timers, human approvals, checkpoints, commitments, cancellation and replay.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 40: Your Agent Changed the World. What Happens When Step Two Fails? Build Transactions, Compensation and Reconciliation</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/40-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/40-chapter/</guid>
				<description>A practical architecture for agent workflows that span systems without a global transaction: classify side effects, prepare carefully, commit with identity, verify externally, compensate when possible, reconcile ambiguity, and never pretend rollback is free.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 41: What Should Your Agent Trust? Build Explicit Security and Trust Boundaries</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/41-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/41-chapter/</guid>
				<description>A practical security architecture for production agents: separate data from authority, classify trust, scope credentials and capabilities, preserve provenance, isolate generated code, resist prompt injection, and keep security-critical decisions outside model control.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 42: How Do Multiple Agents Coordinate Without Becoming a Distributed Argument?</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/42-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/42-chapter/</guid>
				<description>A practical architecture for multi-agent coordination: explicit ownership, delegation, contracts, commitment transfer, shared intent, evidence provenance, conflict handling, deadlock prevention, and independent verification instead of agents merely chatting until they agree.</description>
			</item>
			<item>
				<title>Advanced Agents From First Principles 43: Who Controls the Agent? Build an Explicit Agent Control Plane</title>
				<link>https://aibussin.com/books/advanced-agents-from-first-principles/43-chapter/</link>
				<pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://aibussin.com/books/advanced-agents-from-first-principles/43-chapter/</guid>
				<description>A production-agent architecture that separates control-plane policy from execution-plane reasoning: intent, competence, authority, placement, budgets, reliability, releases, security and escalation remain enforceable outside the model.</description>
			</item>
			<item>
				<title>What Does a Preference Know About the Future?</title>
				<link>https://aibussin.com/post/future/</link>
				<pubDate>Fri, 10 Jul 2026 11:32:58 +0100</pubDate>
				<guid>https://aibussin.com/post/future/</guid>
				<description>&lt;h2 id=&#34;we-trained-a-model-on-editorial-choices-to-see-whether-it-learned-what-happened-next&#34;&gt;We Trained a Model on Editorial Choices to See Whether It Learned What Happened Next&lt;/h2&gt;&#xA;&lt;p&gt;Most preference-learning systems use a choice to change the future.&lt;/p&gt;&#xA;&lt;p&gt;A model produces two responses. A human selects one. The chosen response becomes positive evidence, the rejected response becomes negative evidence, and training makes outputs resembling the chosen response more likely.&lt;/p&gt;&#xA;&lt;p&gt;The preference acts as an instruction:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Produce more things like this.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I wanted to know whether the same choice could also function as evidence.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Preference Was Only the Beginning</title>
				<link>https://aibussin.com/post/preferences/</link>
				<pubDate>Tue, 07 Jul 2026 00:00:00 +0100</pubDate>
				<guid>https://aibussin.com/post/preferences/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;A preference is not only a label on what just happened. When the decision belongs to a continuing trajectory, it can also be evidence about what happens next.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Most preference-learning systems stop at the choice.&lt;/p&gt;&#xA;&lt;p&gt;A model produces two responses. A human selects one. The chosen response becomes positive evidence, the rejected response becomes negative evidence, and the training system moves on.&lt;/p&gt;&#xA;&lt;p&gt;The work itself usually continues.&lt;/p&gt;&#xA;&lt;p&gt;The selected answer may later be revised, partially retained, contradicted or abandoned. The rejected alternative may reveal a constraint that remains active long after the immediate decision. The preference is therefore not necessarily the outcome. It may be an event inside a longer trajectory.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Codex Manager: Building a Prompt-State Runtime for Hackathon-Grade Code Optimization</title>
				<link>https://aibussin.com/post/codex/</link>
				<pubDate>Sat, 16 May 2026 20:15:59 +0100</pubDate>
				<guid>https://aibussin.com/post/codex/</guid>
				<description>&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;Codex Manager uses AI to generate code as an artifact, then tests that artifact, diagnoses what happened, and repairs the prompt state that produced it. The code is not the thing being optimized directly. The prompt state is.&lt;/p&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://huggingface.co/humanitys-last-hackathon?utm_source=chatgpt.com&#34;&gt;Humanity’s Last Hackathon&lt;/a&gt; framed the challenge as a test of &lt;strong&gt;context, not code&lt;/strong&gt;: the task was hard enough that the real question was not whether someone could hand-write one clever kernel, but whether they could build a system that used AI effectively under changing constraints.&lt;/p&gt;</description>
			</item>
			<item>
				<title>AI as an Amplifier, Not a Utility</title>
				<link>https://aibussin.com/post/electricity/</link>
				<pubDate>Mon, 11 May 2026 10:43:01 +0100</pubDate>
				<guid>https://aibussin.com/post/electricity/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;AI turns language into an interface for implementation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;1-the-builders-world&#34;&gt;&lt;strong&gt;1. The Builder’s World&lt;/strong&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There is a version of AI people talk about.&lt;/p&gt;&#xA;&lt;p&gt;And then there is the version you discover when you actually use it consistently.&lt;/p&gt;&#xA;&lt;p&gt;They are not the same thing.&lt;/p&gt;&#xA;&lt;p&gt;AI’s real value is not doing old work faster.&lt;/p&gt;&#xA;&lt;p&gt;It is this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;AI collapses the distance between an idea and a working system.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That is the part I think people are still missing.&lt;/p&gt;</description>
			</item>
			<item>
				<title>SQLite: the small database that packs a big punch</title>
				<link>https://aibussin.com/post/sqlite/</link>
				<pubDate>Thu, 20 Feb 2025 07:54:29 +0000</pubDate>
				<guid>https://aibussin.com/post/sqlite/</guid>
				<description>&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.sqlite.org/index.html&#34;&gt;SQLite&lt;/a&gt; is one of the most widely used database engines in the world, powering everything from mobile applications (Android, iOS) to browsers (Google Chrome, Mozilla Firefox), IoT devices, and even gaming consoles. Unlike traditional client-server databases (e.g., MySQL, PostgreSQL), SQLite is an embedded, serverless database that stores data in a single file, making it easy to manage and deploy.&lt;/p&gt;&#xA;&lt;p&gt;Python developers frequently choose SQLite for its inherent simplicity and portability, leveraging the built-in sqlite3 module for effortless database integration.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Debugging Jupyter Notebooks in VS Code</title>
				<link>https://aibussin.com/post/debugging/</link>
				<pubDate>Tue, 11 Feb 2025 11:48:38 +0000</pubDate>
				<guid>https://aibussin.com/post/debugging/</guid>
				<description>&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://code.visualstudio.com/&#34;&gt;Visual Studio Code&lt;/a&gt; is the most popular editor for development.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://jupyter.org/&#34;&gt;Jupyter Notebooks&lt;/a&gt; is the most widely used way to share, demonstrate and develop code in modern AI development.&lt;/p&gt;&#xA;&lt;p&gt;Debugging code is not just used when you have a bug. After you have written any substantial piece of code I suggest  stepping through it in the debugger if possible. This can help improve you understanding and the quality of the code you have written&lt;/p&gt;</description>
			</item>
			<item>
				<title>Project 6: Validator</title>
				<link>https://aibussin.com/post/validator/</link>
				<pubDate>Thu, 28 Apr 2016 23:45:48 +0100</pubDate>
				<guid>https://aibussin.com/post/validator/</guid>
				<description>&lt;p&gt;A validation tool for excel files. Sometimes you need to export data from one system for loading into another. For instance&#xA;you may export a report from a derivatives trading system for information for a collateral management system.&lt;/p&gt;&#xA;&lt;p&gt;This Excel macro file validates input files to make sure that they are in a specific format.&#xA;The input file can be in any format that excel can load. The workbook will load the file and check for errors in place.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Project 5: Dictator</title>
				<link>https://aibussin.com/post/dictator/</link>
				<pubDate>Mon, 28 Mar 2016 23:45:48 +0100</pubDate>
				<guid>https://aibussin.com/post/dictator/</guid>
				<description>&lt;p&gt;Google have just released their speech API. One really cool feature is the ability to transcribe voice in real time.&#xA;Two years ago I built an app with this idea in mind. At that at the time I could no make it work. Now it is time to resurrect that app.&#xA;This post will cover the recording section of that application.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Project 4: Meth</title>
				<link>https://aibussin.com/post/meth/</link>
				<pubDate>Tue, 08 Mar 2016 20:46:38 +0000</pubDate>
				<guid>https://aibussin.com/post/meth/</guid>
				<description>&lt;p&gt;This is another simple android application. It does one thing&#xA;It keeps your phone awake.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Project 3: Site Shot</title>
				<link>https://aibussin.com/post/site_shot/</link>
				<pubDate>Wed, 03 Feb 2016 20:46:38 +0000</pubDate>
				<guid>https://aibussin.com/post/site_shot/</guid>
				<description>&lt;p&gt;This is a really simple android application. It does one thing&#xA;It takes a photo of a web site and allows you to share the photo.&lt;/p&gt;</description>
			</item>
			<item>
				<title>An android SharedPreferences wrapper class</title>
				<link>https://aibussin.com/post/android_settings/</link>
				<pubDate>Sun, 31 Jan 2016 00:08:26 +0000</pubDate>
				<guid>https://aibussin.com/post/android_settings/</guid>
				<description>&lt;p&gt;This is a wrapper around the Android &lt;a href=&#34;http://developer.android.com/reference/android/content/SharedPreferences.html&#34; title=&#34;SharedPreferences&#34;&gt;SharedPreferences&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;It adds a few useful extensions&lt;/p&gt;</description>
			</item>
			<item>
				<title>Project 2: File Explorer for android</title>
				<link>https://aibussin.com/post/fileexplorer/</link>
				<pubDate>Sat, 30 Jan 2016 00:13:56 +0000</pubDate>
				<guid>https://aibussin.com/post/fileexplorer/</guid>
				<description>&lt;p&gt;In this project I am building a file explorer library for android.&#xA;As I was working on &lt;a href=&#34;https://github.com/ernan/catcher&#34; title=&#34;Catcher&#34;&gt;catcher&lt;/a&gt; it became obvious I would need a file picker&#xA;and explorer solution. So I did a bit of looking on the web.&#xA;I found three interesting projects that nearly did what I wanted. I put a few of them together to come up with a hybrid solution.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Project 1: Catcher</title>
				<link>https://aibussin.com/post/catcher/</link>
				<pubDate>Mon, 25 Jan 2016 22:06:44 +0000</pubDate>
				<guid>https://aibussin.com/post/catcher/</guid>
				<description>&lt;p&gt;This is an android application to transfer files from your phone to somewhere else. I will be built as a PC solution but&#xA;can be used for a server solution also.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
