<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Nirmal Utwani]]></title><description><![CDATA[Nirmal Utwani]]></description><link>https://nirmalutwani.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Pbnt!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fnirmalutwani.substack.com%2Fimg%2Fsubstack.png</url><title>Nirmal Utwani</title><link>https://nirmalutwani.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 06 Jul 2026 03:17:49 GMT</lastBuildDate><atom:link href="https://nirmalutwani.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Nirmal Utwani]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[nirmalutwani@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[nirmalutwani@substack.com]]></itunes:email><itunes:name><![CDATA[Nirmal Utwani]]></itunes:name></itunes:owner><itunes:author><![CDATA[Nirmal Utwani]]></itunes:author><googleplay:owner><![CDATA[nirmalutwani@substack.com]]></googleplay:owner><googleplay:email><![CDATA[nirmalutwani@substack.com]]></googleplay:email><googleplay:author><![CDATA[Nirmal Utwani]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[James Wilkinson, and the math under every AI model]]></title><description><![CDATA[How to tell if a bad answer is the algorithm's fault or the input problem's?]]></description><link>https://nirmalutwani.substack.com/p/james-wilkinson-and-the-math-under</link><guid isPermaLink="false">https://nirmalutwani.substack.com/p/james-wilkinson-and-the-math-under</guid><dc:creator><![CDATA[Nirmal Utwani]]></dc:creator><pubDate>Sat, 27 Jun 2026 18:18:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ksMH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ksMH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ksMH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png 424w, https://substackcdn.com/image/fetch/$s_!ksMH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png 848w, https://substackcdn.com/image/fetch/$s_!ksMH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png 1272w, https://substackcdn.com/image/fetch/$s_!ksMH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ksMH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png" width="1456" height="852" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:852,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91889,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nirmalutwani.substack.com/i/203864950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ksMH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png 424w, https://substackcdn.com/image/fetch/$s_!ksMH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png 848w, https://substackcdn.com/image/fetch/$s_!ksMH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png 1272w, https://substackcdn.com/image/fetch/$s_!ksMH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F530a9a57-652b-42a9-90a9-8ef7a324161d_1680x983.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The entire AI data centers&#8217; compute resources are all trying to fight over getting more <strong>FLOPs</strong> (Floating Point Operations). Creating a big model is trillions times trillions of FLOPs, run for multiple weeks. But people didn&#8217;t trust the results of FLOPs not so long ago. There was a lot of doubt that floating-point arithmetic could happen correctly. There&#8217;s some rounding that happens, and the worry was that all the rounding would lead to a really big error and the answers would be wrong.</p><p>It was Wilkinson, who got the Turing Award in 1970, who changed that. He helped introduce a new way to measure the answer and check if we can trust it. Forward errors are hard to compute in general because you need the right answer and then do the subtraction, but backward errors are much easier to compute. It&#8217;s how much you have to nudge the inputs to make your answer exactly right. Instead of thinking if the result answered the question perfectly, think what question did the result answer, and for very well-designed algorithms the answer is very, very little, 10 to the minus 16 or something very small.</p><p>This became the gold standard on how to measure how good algorithms are. Backward errors are always in reason; they stay about the size of the rounding. But errors can still get big, and that&#8217;s because of finicky inputs, not just because of algorithms. A finicky input blows up the error no matter what algorithm you use or what machine it runs on. How finicky the input is is called the condition number. So it comes together like this:</p><p><strong>forward error &#8776; condition number &#215; backward error</strong></p><p><strong>TLDR</strong>: he helped build confidence in algorithms that do floating-point arithmetic, which is the foundation of everything in the AI world today.</p><p>Code, a runnable demo, and the full writeup: <a href="http://github.com/nirmal91/turing-award-series">Github project</a></p>]]></content:encoded></item><item><title><![CDATA[The AI Winter Started With a Math Proof: Marvin Minsky and the XOR Problem]]></title><description><![CDATA[Week 04 of the Turing Award Series &#8212; how proving what single-layer networks can't do led to everything they can]]></description><link>https://nirmalutwani.substack.com/p/the-ai-winter-started-with-a-math</link><guid isPermaLink="false">https://nirmalutwani.substack.com/p/the-ai-winter-started-with-a-math</guid><dc:creator><![CDATA[Nirmal Utwani]]></dc:creator><pubDate>Thu, 11 Jun 2026 05:23:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wEWD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wEWD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wEWD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wEWD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wEWD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wEWD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wEWD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg" width="1280" height="702" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:702,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56302,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nirmalutwani.substack.com/i/201552219?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wEWD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wEWD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wEWD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wEWD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0a9035a-7188-4d67-beae-1645f1a1d2d1_1280x702.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Week 04 of my learning series on Turing Award winners: Marvin Minsky.</p><p>Marvin Minsky, along with John McCarthy, was hugely pivotal in starting AI as a field. They organized the Dartmouth conference in 1956, got the best minds in the room, named the discipline of AI, and then went off and built the two institutions that shaped everything after: Minsky at MIT, McCarthy at Stanford.</p><p>The MIT AI Lab is still running today as CSAIL.</p><div><hr></div><h2><strong>My Take</strong></h2><p>The first highlight is moving from flat lists of rules to structured knowledge. Before his frames paper, AI systems stored knowledge as giant if-then rule lists, which doesn&#8217;t scale well. Minsky&#8217;s intuition was that this is very different than how humans think. When you see a chair, your brain doesn&#8217;t rederive what a chair is from scratch every time. It has a mental template made up of four legs, a back, a seat, some material, and you fill in the details. He called that idea of structure &#8220;frames&#8221;: structured objects with named slots and defaults. This is how most programming languages work today in terms of classes and objects.</p><p>The second, and the more important one, is his book on perceptrons and their limitations. Rosenblatt&#8217;s single-layer network was the hot AI thing in 1958, and there was a lot of optimism that you could scale this infinitely and solve intelligence. Minsky was the party pooper and proved mathematically that regardless of data size or compute, a single layer isn&#8217;t enough for a computer to understand even a basic operation like XOR. This did play a big role in the first AI winter: funding dried up, research stalled, the whole neural network agenda lost momentum for nearly a decade. Minsky, to his credit, also explicitly said that multi-layer networks wouldn&#8217;t have this problem and pushed researchers towards training them. Backpropagation for multi-layer networks arrived in 1986, which was a big unlock, followed by deep learning. The AI era we know today: H100 clusters, hyperscalers, Mag-7, all training the next frontier models. All of it traces back to Minsky pushing the world towards multi-layer networks.</p><div><hr></div><h2><strong>What He Actually Did</strong></h2><p>Marvin Minsky won the Turing Award in 1969 &#8220;for his central role in creating the science of artificial intelligence.&#8221;</p><p>Two contributions stand out:</p><h3><strong>1. Frames &#8212; Structured Knowledge (1974)</strong></h3><p>Before Minsky&#8217;s frames paper, AI systems stored knowledge as giant if-then rule lists. If you wanted a computer to understand what a chair is, you&#8217;d write hundreds of rules: &#8220;if object has four legs AND has a back AND has a seat, then object is chair.&#8221;</p><p>It doesn&#8217;t scale. The rules explode combinatorially.</p><p>Minsky&#8217;s insight: humans don&#8217;t work that way. When you see a chair, your brain doesn&#8217;t rederive what a chair is from scratch. It has a mental template. Four legs. A back. A seat. Some material. Default values. You fill in the details.</p><p>He called this structure &#8220;frames&#8221;: objects with named slots and defaults.</p><pre><code><code>Frame: CHAIR
  slots:
    legs: 4 (default)
    back: yes (default)
    seat: yes (required)
    material: wood (default)</code></code></pre><p>This became the foundation of object-oriented programming. Classes with properties. Inheritance. Defaults. It&#8217;s how Python, Java, JavaScript work today.</p><h3><strong>2. Perceptrons &#8212; The Limitation That Pushed AI Forward (1969)</strong></h3><p>In 1958, Frank Rosenblatt built a learning machine called the perceptron. You showed it examples &#8212; this input means yes, that input means no &#8212; and it adjusted its internal numbers (weights) until it got them right.</p><p>It had a mathematical guarantee: if a pattern can be separated by a straight line, the perceptron will find the weights.</p><p>The problem was the fine print: &#8220;if a pattern can be separated by a straight line.&#8221;</p><p><strong>The XOR Problem</strong></p><p>XOR is a simple logic function:</p><pre><code><code>0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0</code></code></pre><p>Plot these four points on a grid. The 1s sit at diagonal corners <code>(0,1)</code> and <code>(1,0)</code>. The 0s sit at the other diagonal corners <code>(0,0)</code> and <code>(1,1)</code>.</p><p>No straight line can separate them. Try it. Every line you draw leaves at least one point on the wrong side.</p><p>A perceptron computes the sign of a linear function: <code>w1&#183;x1 + w2&#183;x2 + b</code>. The decision boundary is a straight line. Since XOR isn&#8217;t linearly separable, no perceptron can learn it &#8212; ever, no matter how many training rounds you run.</p><p><strong>Minsky&#8217;s Proof</strong></p><p>Minsky and Papert spent years in the 1960s mapping out exactly which patterns fail. Their 1969 book proved it rigorously.</p><p>For XOR, the constraints are:</p><pre><code><code>(0,1) &#8594; 1:   w2 + b &#8805; 0       &#8594;   w2 &#8805; -b
(1,0) &#8594; 1:   w1 + b &#8805; 0       &#8594;   w1 &#8805; -b
(0,0) &#8594; 0:   b &lt; 0             &#8594;   b &lt; 0
(1,1) &#8594; 0:   w1 + w2 + b &lt; 0</code></code></pre><p>From <code>b &lt; 0</code>, say <code>b = -1</code>. Then <code>w1 &#8805; 1</code> and <code>w2 &#8805; 1</code>.<br>But then <code>w1 + w2 + b &#8805; 1 + 1 - 1 = 1 &gt; 0</code>, so <code>(1,1)</code> fires &#8212; contradicting the fourth constraint.</p><p>No values of <code>w1</code>, <code>w2</code>, <code>b</code> satisfy all four constraints simultaneously. The system is inconsistent.</p><p>This is not a computational problem. It is a proof. Single-layer networks cannot solve XOR, period.</p><p><strong>The First AI Winter</strong></p><p>The book effectively ended the first era of neural network optimism. Funding dried up. Research stalled. The whole neural network agenda lost momentum for nearly a decade. People remember this as &#8220;Minsky killed neural networks.&#8221; But that&#8217;s not the full story.</p><p><strong>What Minsky Actually Said</strong></p><p>The book acknowledged explicitly that adding hidden layers broke the representational limits. Multi-layer networks could solve XOR. The problem was that no training algorithm existed for multi-layer networks in 1969.</p><p>The perceptron learning rule applies only to the output layer. Updating hidden layer weights requires knowing how each hidden neuron contributes to the output error, which requires propagating the error signal backward through the network.</p><p>That algorithm &#8212; backpropagation &#8212; arrived in 1986.</p><p><strong>The Two-Layer Solution</strong></p><p>With two layers, XOR is solvable. The hidden layer learns two intermediate features (OR and NAND) and reshapes the problem into one the output layer can handle with a single line.</p><p>Here&#8217;s the geometry:</p><pre><code><code>Hidden neuron h1 (computes OR):</code> 
    (0,0) &#8594; h1=0
    (0,1) &#8594; h1=1
    (1,0) &#8594; h1=1
    (1,1) &#8594; h1=1
Hidden neuron h2 (computes NAND):
    (0,0) &#8594; h2=1
    (0,1) &#8594; h2=1
    (1,0) &#8594; h2=1
    (1,1) &#8594; h2=0
New feature space (h1, h2):
    (0,0) &#8594; (0, 1)
    (0,1) &#8594; (1, 1)
    (1,0) &#8594; (1, 1)
    (1,1) &#8594; (1, 0)</code></pre><p>In this new space, XOR <em>is</em> linearly separable. The output neuron computes AND of h1 and h2. Done.</p><p>The hidden layer didn&#8217;t learn XOR directly. It learned two simpler features and created a transformed space where the XOR points ARE linearly separable.</p><p>Minsky&#8217;s proof said: you cannot do this with one layer. He was right. Two layers is the minimum.</p><div><hr></div><h2><strong>Where This Led</strong></h2><p><strong>Backpropagation (1986):</strong> Rumelhart, Hinton, and Williams popularized the algorithm for training multi-layer networks. Gradient descent through a network of sigmoid units. Automatic differentiation. The training method Minsky said was missing.</p><p><strong>Deep Learning (2006+):</strong> Stacking many hidden layers. GPUs, large datasets, architectural improvements (ReLU, dropout, batch normalization). GPT, DALL-E, AlphaFold, every major neural network today.</p><p><strong>Universal Approximation Theorem (1989):</strong> Proved that any continuous function can be approximated arbitrarily closely by a single hidden layer of sufficient width. The Minsky-Papert limitation applies only to single-layer networks.</p><p>All of it traces back to Minsky proving what single-layer networks can&#8217;t do. The proof defined the problem space. Backpropagation solved it.</p><div><hr></div><h2><strong>The Code</strong></h2><p>I built a perceptron simulator that shows the XOR failure:</p><pre><code><code>Perceptron on AND (converged in 6 epochs):
 0 0 &#8594; 0  (expected 0)  ok
 1 1 &#8594; 1  (expected 1)  ok
LEARNED

Perceptron on XOR (1000 epochs, never converges):
  0 0 &#8594; 1  (expected 0)  WRONG
  0 1 &#8594; 1  (expected 1)  ok
  1 0 &#8594; 0  (expected 1)  WRONG
  1 1 &#8594; 0  (expected 0)  ok
FAILED  (accuracy 50% &#8212; best any single-layer net can do)

Two-layer net on XOR (10000 epochs, backprop):
  0 0 &#8594; 0  (expected 0)  ok
  0 1 &#8594; 1  (expected 1)  ok
  1 0 &#8594; 1  (expected 1)  ok
  1 1 &#8594; 0  (expected 0)  ok
LEARNED</code> </code></pre><p>With <code>--verbose</code>, you see the weights update, the hidden layer learn OR and NAND, and the output layer combine them.</p><p>Full code and worked example on GitHub: <a href="https://github.com/nirmal91/turing-award-series/tree/main/04-marvin-minsky-1969">github.com/nirmal91/turing-award-series</a></p><div><hr></div><h2><strong>Why This Matters</strong></h2><p>Minsky didn&#8217;t kill neural networks. He defined their limits precisely, mathematically, with a proof.</p><p>That precision is what made progress possible.</p><p>Before the Perceptrons book, researchers made expansive claims about what single-layer networks could eventually learn. There was no formal framework for asking: what can&#8217;t a perceptron learn, and why?</p><p>After the book, the question was answered. Single-layer networks have a geometric limitation. Add a hidden layer. Learn intermediate features. Transform the space.</p><p>When backpropagation arrived in 1986, it gave researchers exactly what the Minsky-Papert proof said was missing. Every modern neural network is, in a sense, the answer to their 1969 theorem.</p><p>The H100 clusters training frontier models today. The hyperscalers. The Mag-7. All running multi-layer networks that solve problems Minsky proved single-layer networks cannot.</p><p>He was the party pooper who proved the old approach wouldn&#8217;t scale. And in doing so, he pointed to exactly what would.</p><div><hr></div><p><em>This is Week 04 of the Turing Award Series. New entry every week. All code is on <a href="https://github.com/nirmal91/turing-award-series">GitHub</a>.</em></p><p><strong>&#8592; Previous:</strong> Week 03 &#8212; When Bits Flip and Everything Breaks (Richard Hamming)</p>]]></content:encoded></item><item><title><![CDATA[When Bits Flip and Everything Breaks: Richard Hamming's Self-Correcting Code]]></title><description><![CDATA[Week 03 of the Turing Award Series &#8212; how one frustrated mathematician made data repair itself]]></description><link>https://nirmalutwani.substack.com/p/when-bits-flip-and-everything-breaks</link><guid isPermaLink="false">https://nirmalutwani.substack.com/p/when-bits-flip-and-everything-breaks</guid><dc:creator><![CDATA[Nirmal Utwani]]></dc:creator><pubDate>Thu, 11 Jun 2026 05:04:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zXSk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zXSk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zXSk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zXSk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zXSk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zXSk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zXSk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg" width="1280" height="698" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:698,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:67863,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nirmalutwani.substack.com/i/201551677?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zXSk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zXSk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zXSk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zXSk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8db11c15-3067-43df-8985-956255b14582_1280x698.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Week 03 of my learning series on Turing Award winners: Richard Hamming.</p><p>Richard Hamming, a mathematician, was trying to do what all of us do today. Submit a bunch of jobs Friday evening, expect the machine to keep running all weekend, and have stuff ready Monday morning.</p><p>It wasn&#8217;t as smooth for him. He&#8217;d come back with nothing done, because random bits were flipping mid-run, corrupting the computation and stopping it cold.</p><div><hr></div><h2><strong>My Take</strong></h2><p>He decided the data could carry enough extra information to fix itself. A few extra bits added to whatever you&#8217;re transmitting is all it takes, and if a bit flips in transit, those bits tell you exactly which one flipped so you can fix it without retransmitting or restarting. This is now the foundation of everything we do. Think about RAM, SSDs, hard disks, QR codes, even deep space telemetry. Most error-correcting codes today trace back to this one 1950 paper.</p><p>Bit flipping happens way more than you&#8217;d expect. RAM is the worst case. Google published a study showing a typical server sees one to two bit flips a day in memory, and a data center has hundreds of thousands of machines with bits flipping constantly. Without error correction, servers silently compute the wrong answers. It would feel like the servers are hallucinating and giving you wrong answers.</p><p>The Mag-7, the hyperscalers, the H100 clusters training the next frontier model, they all run on hardware that self-corrects at the bit level, all because of Hamming&#8217;s work in 1950.</p><div><hr></div><h2><strong>What He Actually Did</strong></h2><p>Richard Hamming won the Turing Award in 1968 &#8220;for his work on numerical methods, automatic coding systems, and error-detecting and error-correcting codes.&#8221;</p><p>The error-correcting code is what changed everything.</p><p><strong>The Problem</strong></p><p>In the 1940s, computers at Bell Labs ran on punched cards and electromechanical relays. They were unreliable. Bits would flip. A calculation that ran overnight would finish with a wrong answer, and you&#8217;d have no idea where the error crept in.</p><p>Hamming worked weekdays. The machine ran his jobs on nights and weekends. Every error cost him a full week of waiting.</p><p>He spent his weekends furious about this.</p><p><strong>The Insight</strong></p><p>Before Hamming, error detection existed. A single parity bit appended to a byte can tell you that <em>some</em> bit flipped, but not which one. To correct an error you need to know its location.</p><p>Hamming&#8217;s idea: add a few extra bits whose values are determined by the data bits. These &#8220;parity bits&#8221; are placed at specific positions so that any single flipped bit disturbs a unique combination of them.</p><p>The receiver checks all the parity bits and computes a number called the <strong>syndrome</strong>.</p><p>If the syndrome is zero, no error.</p><p>If it&#8217;s nonzero, the syndrome is literally the position of the bad bit. Flip it back. Done.</p><p><strong>How It Works &#8212; Hamming(7,4)</strong></p><p>4 data bits become 7 bits total. Three parity bits buy you full single-error correction.</p><p>Here&#8217;s the actual process:</p><p><strong>Step 1:</strong> You have data to send: <code>1011</code></p><p><strong>Step 2:</strong> Positions that are powers of 2 get parity bits. Everything else gets data.</p><pre><code><code>position:  1    2    3    4    5    6    7
type:     p1   p2   d1   p4   d2   d3   d4
bit:       ?    ?    1    ?    0    1    1

</code></code></pre><p><strong>Step 3:</strong> Each parity bit covers specific positions based on binary representation.</p><ul><li><p>p1 (pos 1): covers positions 1, 3, 5, 7</p></li><li><p>p2 (pos 2): covers positions 2, 3, 6, 7</p></li><li><p>p4 (pos 4): covers positions 4, 5, 6, 7</p></li></ul><p>Each parity bit is set so its group XORs to zero:</p><pre><code><code>p1: 1 XOR 0 XOR 1 = 0  &#8594;  p1 = 0
p2: 1 XOR 1 XOR 1 = 1  &#8594;  p2 = 1
p4: 0 XOR 1 XOR 1 = 0  &#8594;  p4 = 0</code></code></pre><p>Final codeword: <code>0110011</code></p><p><strong>Step 4:</strong> Transmit it. A bit flips. Position 5 changes from <code>0</code> to <code>1</code>.</p><pre><code><code>sent:      0  1  1  0  0  1  1
received:  0  1  1  0  1  1  1
                       &#8593;
                   bit flipped</code></code></pre><p></p><p><strong>Step 5:</strong> Receiver recomputes all three groups:</p><pre><code><code>p1 checks 1,3,5,7:   0 XOR 1 XOR 1 XOR 1 = 1  &#10007;  broken
p2 checks 2,3,6,7:   1 XOR 1 XOR 1 XOR 1 = 0  &#10003;  fine
p4 checks 4,5,6,7:   0 XOR 1 XOR 1 XOR 1 = 1  &#10007;  broken</code></code></pre><p>Stack the results: <code>p4=1, p2=0, p1=1</code> &#8594; binary <code>101</code> &#8594; <strong>5</strong></p><p>The syndrome points directly to position 5. Flip it back. Extract data: <code>1011</code> &#10003;</p><p>No retransmit. No restart. The data fixed itself.</p><div><hr></div><h2><strong>Where You See This Today</strong></h2><p><strong>ECC Memory:</strong> Every server in every data center. RAM modules have extra chips that store Hamming parity bits. When a cosmic ray flips a bit, the memory controller computes the syndrome and corrects it silently.</p><p><strong>QR Codes:</strong> Reed-Solomon error correction, a descendant of Hamming codes. You can scratch off 30% of a QR code and it still scans.</p><p><strong>Hard Disks and SSDs:</strong> Every sector has error-correcting codes. Bits rot. Controllers fix them.</p><p><strong>Deep Space:</strong> Voyager uses Reed-Solomon codes over GF(2&#8312;). It&#8217;s 15 billion miles away and still sending data through a 20-watt transmitter. Error correction makes that possible.</p><p><strong>5G and Wi-Fi 6:</strong> LDPC codes (low-density parity-check), which trace their lineage to Hamming&#8217;s insight.</p><p>All of them use the same core idea: extra bits, placed carefully, that locate errors algebraically.</p><div><hr></div><h2><strong>The Code</strong></h2><p>I built a full Hamming(7,4) codec:</p><ul><li><p>Encode any ASCII string into Hamming codewords</p></li><li><p>Inject single-bit errors at random positions</p></li><li><p>Auto-correct every injected error, no retransmit needed</p></li></ul><pre><code><code>&gt; Hello world
  encoded: 11 bytes &#8594; 154 transmitted bits
  injected error: char 2 (hi nibble) bit 3
  injected error: char 5 (lo nibble) bit 6
  injected error: char 9 (hi nibble) bit 1
  recovered: "Hello world"  (3 error(s) auto-corrected)
  result: perfect match</code></code></pre><p></p><p>With <code>--verbose</code>, each decode step shows the syndrome computation:</p><pre><code><code>char 2:
    syndrome bits: s1=1 s2=1 s4=0  &#8594;  3
    error at position 3, flipping
    decoded: hi=[1,1,0,0] lo=[0,0,0,0]  byte=0x6C</code></code></pre><p>The syndrome is a binary number that names the bad position directly. That&#8217;s the invention.</p><p>Full code and worked example on GitHub: <a href="https://github.com/nirmal91/turing-award-series/tree/main/03-richard-hamming-1968">github.com/nirmal91/turing-award-series</a></p><div><hr></div><h2><strong>Why This Matters</strong></h2><p>Before Hamming, a flipped bit meant failure. Retransmit. Restart. Hope it doesn&#8217;t happen again.</p><p>After Hamming, a flipped bit is a number. Find it. Fix it. Move on.</p><p>That shift &#8212; from detection to correction, from &#8220;something&#8217;s wrong&#8221; to &#8220;position 5 is wrong&#8221; &#8212; is what made reliable computing possible.</p><p>RAM flips bits constantly. Cosmic rays. Alpha particles from chip packaging. Just random quantum noise. Without error correction, servers would hallucinate. Databases would corrupt. Training runs would diverge.</p><p>Hamming didn&#8217;t just build a better parity check. He proved that data could carry the instructions for its own repair. That the mathematics of geometry &#8212; Hamming distance, spheres on hypercubes &#8212; could locate errors in real hardware.</p><p>Every H100 in every cluster training the next frontier model has ECC memory correcting bit flips in real time. Every QR code you scan has Reed-Solomon correction letting you read it through scratches and smudges.</p><p>Hamming got mad at a machine that wasted his weekends. He wrote the mathematics to make it stop. And we&#8217;ve been building on that mathematics for 75 years.</p><div><hr></div><p><em>This is Week 03 of the Turing Award Series. New entry every week. All code is on <a href="https://github.com/nirmal91/turing-award-series">GitHub</a>.</em></p><p><strong>&#8592; Previous:</strong> <a href="https://claude.ai/epitaxy/session_01Wx1fCoy5JpEgk9KePiLeVJ#REPLACE-WITH-WEEK-02-URL">Week 02 &#8212; When Changing a Computer Meant Rewiring It (Maurice Wilkes)</a></p>]]></content:encoded></item><item><title><![CDATA[When Changing a Computer Meant Rewiring It: Maurice Wilkes and the Control Store]]></title><description><![CDATA[Week 02 of the Turing Award Series &#8212; how microprogramming turned hardware problems into software problems]]></description><link>https://nirmalutwani.substack.com/p/when-changing-a-computer-meant-rewiring</link><guid isPermaLink="false">https://nirmalutwani.substack.com/p/when-changing-a-computer-meant-rewiring</guid><dc:creator><![CDATA[Nirmal Utwani]]></dc:creator><pubDate>Thu, 11 Jun 2026 04:54:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AK3m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AK3m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AK3m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AK3m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AK3m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AK3m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AK3m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg" width="1280" height="698" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:698,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99523,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nirmalutwani.substack.com/i/201551174?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AK3m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AK3m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AK3m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AK3m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896fbae-f554-4eac-9f53-fa0c1a8a8452_1280x698.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Week 02 of my learning series on Turing Award winners: Maurice Wilkes.</p><p>Before Wilkes, if you wanted to change how a computer worked, you changed the hardware. He made it a software problem instead.</p><div><hr></div><h2><strong>My Take</strong></h2><p>Every small change required rewiring. New chips, new gates, because instructions were hardcoded into the silicon. If you wanted to add one, or fix one, you weren&#8217;t updating code. You were rebuilding the machine.</p><p>Wilkes changed that in 1951 with microprogramming. Instead of hardcoding operations into hardware, he introduced a recipe book stored in ROM (read only memory), called a control store. If you wanted to change how the underlying hardware behaves, don&#8217;t touch transistors and just change the recipe. That was a massive shift in reusability and portability.</p><p>Almost all progress over the last 70 years has been about adding more of these abstractions, each one building on the last. BIOS, operating systems, applications. All follow the same pattern. I have always dreaded on-prem compared to cloud because it seems painful to slowly push updates, bulk things, etc. Having to actually change hardware seems like 100x more complex, which was the norm before Wilkes. The thing we take for granted, that you can change behavior without touching the machine, started here.</p><div><hr></div><h2><strong>What He Actually Did</strong></h2><p>Maurice Wilkes won the Turing Award in 1967. The citation focused on EDSAC, the first stored-program computer he built in 1949. But the idea that changed everything came two years later.</p><p><strong>Microprogramming (1951)</strong></p><p>Before this, every instruction a computer understood was wired directly into its hardware. The circuits for &#8220;add two numbers&#8221; were physical relays and vacuum tubes, soldered in a fixed arrangement.</p><p>If you wanted to add a new instruction, you had to redesign the circuitry.</p><p>IBM hit this wall. They&#8217;d committed the chip design before realizing they&#8217;d left out useful instructions. Too late to fix without building a new machine.</p><p>Wilkes&#8217;s idea: instead of wiring instruction logic into hardware, write it down in a small read-only memory called a <em>control store</em>.</p><p>Each machine instruction&#8217;s behavior is encoded as a sequence of microinstructions in ROM. Nothing is hardwired. To add a new instruction, you add new entries to that memory. No hardware change required.</p><p><strong>Here&#8217;s what that looked like:</strong></p><p>Before Wilkes, to execute <code>ADD</code>, the control unit would:</p><ol><li><p>Route PC to memory &#8212; fixed gate path</p></li><li><p>Latch memory output into IR &#8212; fixed path</p></li><li><p>Increment PC &#8212; hardwired circuit</p></li><li><p>Decode opcode &#8212; fixed logic activating the ADD signal</p></li><li><p>Route memory to ALU &#8212; fixed wire</p></li><li><p>Route accumulator to ALU &#8212; fixed wire</p></li><li><p>Assert ALU = ADD &#8212; activates adder</p></li><li><p>Write result back &#8212; fixed feedback path</p></li></ol><p>Every step permanently etched into hardware.</p><p>After Wilkes, the same ADD is just two microinstructions in ROM:</p><pre><code><code>&#956;16: MDR &#8592; MEM[MAR]       ; load the value
&#956;17: A   &#8592; A + MDR        ; add it to accumulator</code> </code></pre><p>The hardware is generic. The specific behavior lives in ROM entries. To add <code>ADD_TWICE</code> that adds memory to A twice, write two new ROM entries. No hardware change.</p><p><strong>Why This Mattered:</strong></p><p>IBM could build a cheap slow machine and an expensive fast machine that ran the same programs. Like a Toyota and a Ferrari that both respond to the same steering wheel. Each had different hardware underneath, but the same instructions on top, each implemented in its own microcode.</p><p>That was the IBM System/360 in 1964, and it changed the industry. Eight models spanning a 50:1 performance range, all running the same software. Only possible because of microprogramming.</p><p>Modern Intel and AMD chips still work this way. When Intel patched the Spectre vulnerability in 2018, they didn&#8217;t ship new hardware. They pushed a microcode update. Changed the behavior by rewriting control store entries, not replacing chips.</p><div><hr></div><h2><strong>The Code</strong></h2><p>I built a microprogrammed CPU simulator that mirrors Wilkes&#8217;s 1951 architecture. It has:</p><ul><li><p>An assembler that turns assembly into machine code</p></li><li><p>A control store (68-word ROM) holding microprograms</p></li><li><p>16 machine instructions, each implemented as microcode</p></li></ul><p>Run it in a REPL:</p><pre><code><code>&gt; LOADI 10
&gt; STORE 200
&gt; LOADI 25
&gt; ADD 200
&gt; HALT

&gt;
  5 instructions  (26 &#956;cycles)
  A=35  B=0  PC=5</code></code></pre><p></p><p>With <code>--verbose</code>, you see the microinstruction trace. The ADD instruction expands into six microinstructions, each controlling the data path for one clock cycle:</p><pre><code><code>[  3] PC=3  ADD 200
  &#956;00: MAR&#8592;PC          [MAR: 200 &#8594; 3]

  &#956;01: MDR&#8592;MEM[MAR]    [MDR&#8592;12488]

  &#956;02: IR&#8592;MDR          [IR: 24576 &#8594; 12488]

  &#956;03: PC&#8592;PC+1  &#8594;DISPATCH  [PC: 3 &#8594; 4]

  &#956;16: MDR&#8592;MEM[MAR]    [MDR&#8592;10]

  &#956;17: A&#8592;A+MDR  &#8594;FETCH [A: 25 &#8594; 35]</code></code></pre><p>That&#8217;s the Wilkes layer. One machine instruction becomes many microinstructions.</p><p>Full code and explanation on GitHub: <a href="https://github.com/nirmal91/turing-award-series/tree/main/02-maurice-wilkes-1967">github.com/nirmal91/turing-award-series</a></p><div><hr></div><h2><strong>Why This Matters</strong></h2><p>Every abstraction we have today traces back to this moment.</p><p>Wilkes proved you could separate what a computer does from how it does it. The behavior lives in data, not silicon. Change the data, change the behavior.</p><p>BIOS does this. Operating systems do this. Virtual machines do this. Cloud infrastructure does this. Docker containers, Kubernetes, serverless &#8212; all variations on the same theme: define behavior as configuration, not hardware.</p><p>We take it for granted now. Push an update, behavior changes. No rewiring. No new chips.</p><p>But someone had to prove you could do that. Someone had to be first.</p><p>That person was Maurice Wilkes, in 1951, with a control store and a microprogram.</p><p>The abstraction layers have been stacking ever since.</p><div><hr></div><p><em>This is Week 02 of the Turing Award Series. New entry every week. All code is on <a href="https://github.com/nirmal91/turing-award-series">GitHub</a>.</em></p><p><strong>Previous:</strong> Week 01 &#8212; The First Compiler (Alan Jay Perlis)</p>]]></content:encoded></item><item><title><![CDATA[The First Compiler: How Alan Jay Perlis Made Programming Human]]></title><description><![CDATA[Week 01 of the Turing Award Series &#8212; when computers stopped speaking only in numbers, and why that matters for how we code today]]></description><link>https://nirmalutwani.substack.com/p/the-first-compiler-how-alan-jay-perlis</link><guid isPermaLink="false">https://nirmalutwani.substack.com/p/the-first-compiler-how-alan-jay-perlis</guid><dc:creator><![CDATA[Nirmal Utwani]]></dc:creator><pubDate>Thu, 11 Jun 2026 04:46:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SQYs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SQYs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SQYs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SQYs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SQYs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SQYs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SQYs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg" width="1280" height="714" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:714,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57849,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nirmalutwani.substack.com/i/201548396?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SQYs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SQYs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SQYs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SQYs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1096700a-c9b1-404f-9083-5ec49dfd2c43_1280x714.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>I miss learning for the sake of learning. Going into rabbit holes. Reading research papers has always been aspirational for me but hard to be consistent with.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://nirmalutwani.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>What&#8217;s different now is that the barrier to actually grokking hard concepts is so much lower. You can take a dense 1960s systems paper, work through it with an LLM, and come out the other side genuinely understanding it. You can customize the learning based on your skills, your experience, your knowledge.</p><p>So I&#8217;m starting a series on Turing Award winners and other CS papers I find interesting.</p><h3><strong>How This Works</strong></h3><p>Most of it will be AI generated: the code, the write-ups, the structure. But every entry has one section written by me. Writing is how I think. It&#8217;s what validates my understanding.</p><p>This is that section.</p><div><hr></div><h2><strong>My Take</strong></h2><p>We&#8217;ve gone through tons of advancements in computer languages over the years, but at the heart of everything, computers have always understood it the exact same way. We have built abstractions on top, like Scala, Javascript, Python and, most recently, English as a new programming language, but deep, deep down inside, computers have always looked at zeros and ones, or things to do operations to manipulate an actual bit on a disk or something. That has never changed.</p><p>What makes Alan Jay Perlis&#8217;s work stand out is that he was the first to say humans don&#8217;t have to do the hard work of translating things into how computers understand them. You should be able to write a simple mathematical equation or formula, and the compiler will do the translation. Not everyone has to understand and write machine code. He was the first to invent something humans could write in instead of having to write machine code.</p><p>The other thing he did really well was try to get all of the best computer science minds in the world to come to a common way of thinking about languages and compilers. That&#8217;s what allowed developers to be so easily able to move around, and the concepts remain similar across all programming languages. It&#8217;s because of what Alan Jay Perlis did, and now, because all the languages are so similar, LLMs have been able to understand those languages really, really well. That&#8217;s why we can program in English today.</p><div><hr></div><h2><strong>What He Actually Did</strong></h2><p>Alan Jay Perlis won the first Turing Award in 1966 &#8220;for his influence in the area of advanced programming techniques and compiler construction.&#8221;</p><p>Two things stand out:</p><p><strong>1. IT &#8212; The Internal Translator (1955&#8211;56)</strong></p><p>Before Perlis, programmers wrote machine code by hand. Every instruction was a string of numbers. If you wanted to compute <code>x = (a + b) * c</code>, you&#8217;d write something like:</p><pre><code><code>65  0100  0011</code></code></pre><p><code>15  0101  0012</code></p><p><code>19  0102  0013</code></p><p><code>24  0103  0014</code></p><p>Each line is one instruction. The numbers mean: clear the accumulator, load a value, add another value, multiply, store the result. The last four digits of each instruction told the computer where on the spinning drum to find the next instruction. If you got it wrong, the machine waited a full rotation. Programming wasn&#8217;t just logic. It was a timing puzzle.</p><p>Perlis built a translator. You typed normal math. The compiler figured out the machine code. That was IT. It was the first compiler that actually worked.</p><p>People didn&#8217;t think you could do this automatically. They thought machine code needed human cleverness. Perlis proved them wrong.</p><p><strong>2. ALGOL 60 &#8212; The Language That Taught Every Language</strong></p><p>In 1958 Perlis chaired a meeting in Zurich with mathematicians and computer scientists from America and Europe. The goal: agree on one language that would work everywhere.</p><p>That language became ALGOL 60.</p><p>ALGOL 60 introduced:</p><ul><li><p>Block structure (variables that stay inside their <code>{ }</code>)</p></li><li><p>Recursion (functions calling themselves)</p></li><li><p>Formal syntax (the first language defined by a grammar, not prose)</p></li><li><p>Type declarations (variables had declared types)</p></li></ul><p>Every language since borrowed these ideas. Python, Java, C, Go, Rust &#8212; they all descend from ALGOL 60.</p><p>This is why modern programming languages look so similar to each other. This is why LLMs trained on code can understand them so well. This is why we can now write code in English and have it work.</p><p>The foundation was laid in 1960.</p><div><hr></div><h2><strong>The Code</strong></h2><p>I built a mini compiler that mirrors what IT did: take text, turn it into tokens, build an abstract syntax tree, compile to bytecode, execute.</p><p>It&#8217;s 200 lines of Python. No external dependencies. You can run it in a REPL and see it work:</p><pre><code><code>&gt; x = 3</code></code></pre><p><code>&gt; y = x * (2 + 4)</code></p><p><code>&gt; y</code></p><p><code>18</code></p><p>Or you can run <code>python compiler.py --verbose</code> and watch it turn your expression into stack bytecode, instruction by instruction.</p><p>The full code and explanation are on GitHub: <a href="https://github.com/nirmal91/turing-award-series/tree/main/01-alan-perlis-1966">github.com/nirmal91/turing-award-series</a></p><div><hr></div><h2><strong>Why This Matters</strong></h2><p>We take compilers for granted now. Type some Python, hit run, it works. But someone had to be first. Someone had to prove you could do this automatically. That programming didn&#8217;t have to be hand-translating human thought into machine numbers.</p><p>That person was Alan Jay Perlis.</p><p>And because he got the best minds to agree on a common structure for languages, every language since has been learnable if you know one. The abstractions stack. The concepts transfer.</p><p>That&#8217;s why, 70 years later, we can hand an LLM a piece of Python and a piece of Go and it understands both. The grammar is shared. The ideas trace back to the same meeting in Zurich.</p><p>Perlis built the foundation we still code on.</p><div><hr></div><p><em>This is Week 01 of the Turing Award Series. New entry every week. All code is on <a href="https://github.com/nirmal91/turing-award-series">GitHub</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://nirmalutwani.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>