<?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[lcamtuf’s thing]]></title><description><![CDATA[geek culture, algorithms, electronic circuit design, and chainsaw safety tips]]></description><link>https://blog.coredump.cx</link><image><url>https://substackcdn.com/image/fetch/$s_!WvGP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png</url><title>lcamtuf’s thing</title><link>https://blog.coredump.cx</link></image><generator>Substack</generator><lastBuildDate>Wed, 19 Aug 2026 21:27:11 GMT</lastBuildDate><atom:link href="https://blog.coredump.cx/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[lcamtuf]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[lcamtuf@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[lcamtuf@substack.com]]></itunes:email><itunes:name><![CDATA[lcamtuf]]></itunes:name></itunes:owner><itunes:author><![CDATA[lcamtuf]]></itunes:author><googleplay:owner><![CDATA[lcamtuf@substack.com]]></googleplay:owner><googleplay:email><![CDATA[lcamtuf@substack.com]]></googleplay:email><googleplay:author><![CDATA[lcamtuf]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Meta: 7,000]]></title><description><![CDATA[Although I try to keep navel-gazing to a minimum, I&#8217;m happy to report that this publication has crossed 7,000 email subscribers (plus an unknown number of RSS weirdos).]]></description><link>https://blog.coredump.cx/p/meta-7000</link><guid isPermaLink="false">https://blog.coredump.cx/p/meta-7000</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Tue, 04 Aug 2026 18:41:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PMgY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Although I try to keep navel-gazing to a minimum, I&#8217;m happy to report that this publication has crossed 7,000 email subscribers (plus an unknown number of RSS weirdos). I write to challenge myself and I try to stay clear of current events, so I&#8217;m delighted that so many of you still find this publication worth your time.</p><p>But another reason I wanted to write this post is that it increasingly feels like a party at the end of the internet.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PMgY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PMgY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg 424w, https://substackcdn.com/image/fetch/$s_!PMgY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg 848w, https://substackcdn.com/image/fetch/$s_!PMgY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!PMgY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PMgY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg" width="1024" height="386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:386,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:344066,&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://lcamtuf.substack.com/i/208415798?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.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_!PMgY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg 424w, https://substackcdn.com/image/fetch/$s_!PMgY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg 848w, https://substackcdn.com/image/fetch/$s_!PMgY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!PMgY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20513b17-9f71-4c37-8904-788b09e53d6a_1024x386.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 aria-hidden="true" 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><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>In the olden days, a nerdy site like this would have three sources of traffic: web search, hobby forums, and the aggregators of tech news. It goes without saying that organic web search traffic has been under siege from SEO spam for decades; it&#8217;s now a lost cause because of spammers&#8217; ability to generate LLM content on any topic nearly for free. But the final blow comes from Google itself: the company is now in the business of stopping its users from visiting other websites; with pre-digested answers to all of life&#8217;s questions, there&#8217;s just no reason to leave.</p><p>As for independent forums, most of them have been subsumed by Reddit and Stack Exchange; both have grown insular and hostile to external links. Finally, when it comes to aggregators, the leading source of traffic to this blog used to be Hacker News, but I had no truly &#8220;breakout&#8221; HN stories for about a year. I don&#8217;t think this is because of a shift in focus, tone, or quality for this blog. It&#8217;s just that HN itself has shifted gears; the site is dominated by <a href="https://lcamtuf.substack.com/p/how-much-of-hn-is-ai">AI press releases and op-eds</a>, and now has fewer readers who cherish learning and experimentation in any other domain.</p><p>All this makes Substack more valuable than before: as the old internet withers away, it&#8217;s one of the few non-algorithmic yet low-friction ways to share long-form content with like-minded folks. But ultimately, what I&#8217;m doing is probably just <em>archaic. </em>Long-term writing on the internet is like publishing poems in <span>dactylic hexameter; it might be fun, but it&#8217;s not your ticket to TikTok fame.</span></p><p>If dactylic hexameter is your thing, here are several older articles that never made it to the top of HN, but that I think are interesting. I treat them as living documents, too, so they have changed quite a bit since their original publication:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f1851cbc-842a-48c1-8cd0-c9047b4f9128&quot;,&quot;caption&quot;:&quot;Today, I&#8217;d like to talk about logic &#8212; and before I do, I should probably explain why. But before we get to that, a definition may be in order: in a nutshell, logic is a system for drawing conclusions from premises (&#8220;facts&#8221;).&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;All logic, no bite&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-06-27T05:44:02.619Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a34aa01b-2087-4789-a79b-7c489dd2243f_1026x1039.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/all-logic-no-bite&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:190993502,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:25,&quot;comment_count&quot;:6,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e2804fab-7df3-486c-bd2c-a8d75b50c9a8&quot;,&quot;caption&quot;:&quot;For the past couple of weeks, I couldn&#8217;t shake off an intrusive thought: raster graphics and audio files are awfully similar &#8212; they&#8217;re sequences of analog measurements &#8212; so what would happen if we apply the same transformations to both?&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;See it with your lying ears&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-01-10T00:00:05.800Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d603e902-82e7-426e-9aaf-a6e88d13e995_1500x1000.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/see-it-with-your-lying-ears&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:183768069,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:35,&quot;comment_count&quot;:10,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;fce21648-c41e-40f5-b072-aed1f2cd3fba&quot;,&quot;caption&quot;:&quot;I find it difficult to talk about the history of the computer. The actual record is dreadfully short: almost nothing of consequence happened before the year 1935. We keep looking for a better story, but we inevitably end up grasping at straws.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;An illustrated history of the calculator&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-08-26T07:48:58.542Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca07078-2ebe-4538-8792-3390559450a2_1600x1068.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/a-brief-history-of-counting-stuff&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:136091170,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:36,&quot;comment_count&quot;:7,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Your feedback helps. I&#8217;m happy to answer questions, offer dubious life advice, and otherwise rearrange deck chairs while the orchestra still plays.</p>]]></content:encoded></item><item><title><![CDATA[Severance]]></title><description><![CDATA[&#187; Mark has joined the call.]]></description><link>https://blog.coredump.cx/p/severance</link><guid isPermaLink="false">https://blog.coredump.cx/p/severance</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Fri, 31 Jul 2026 17:09:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/996f23e1-6ba7-4386-adbd-3e7c6a6ed5b4_1200x664.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><span data-color="#b45f06" style="color: rgb(180, 95, 6);">&#187; Mark has joined the call.<br>&#187; Christine has joined the call.</span></em></p><p><strong><span data-color="#980000" style="color: rgb(152, 0, 0);">Mark:</span></strong><span data-color="#980000" style="color: rgb(152, 0, 0);"> </span>Sorry, can you hear me? Okay. Team &#8212; there is no easy way to say this. I&#8217;m here to inform you that we&#8217;ve made the difficult decision to cut 7% of our workforce. This, regrettably, includes everyone in this video call. I&#8217;ll now &#8212;</p><p><strong><span data-color="#4a86e8" style="color: rgb(74, 134, 232);">cherry09:</span></strong> What?!</p><p><strong><span data-color="#980000" style="color: rgb(152, 0, 0);">Mark:</span></strong><span data-color="#980000" style="color: rgb(152, 0, 0);"> </span>We&#8217;ve made the difficult decision &#8212;</p><p><strong><span data-color="#4a86e8" style="color: rgb(74, 134, 232);">cherry09: </span></strong>But the project is going so well!</p><p><strong><span data-color="#980000" style="color: rgb(152, 0, 0);">Mark:</span></strong><span data-color="#980000" style="color: rgb(152, 0, 0);"> </span>We understand that this news may come as a shock. We are deeply grateful for your contributions to date. The decision to sunset the project is not meant to reflect negatively on your work. Unfortunately, the macroeconomic &#8212;</p><p><strong><span data-color="#4a86e8" style="color: rgb(74, 134, 232);">steve_[oh]:</span> </strong>This is bullshit!</p><p><strong><span data-color="#980000" style="color: rgb(152, 0, 0);">Mark:</span></strong> Please, let me finish. Unfortunately, we are facing a challenging macroeconomic outlook for our industry, forcing businesses like ours to right-size as we realign our overall execution strategy for the &#8212;</p><p><em><span data-color="#b45f06" style="color: rgb(180, 95, 6);">&#187; steve_[oh] has left the call.</span></em></p><p><strong><span data-color="#980000" style="color: rgb(152, 0, 0);">Mark:</span></strong> Folks. I know this is distressing, but please stay with us for important benefits information. I&#8217;ll now hand over to Christine, who is our resourcing associate.</p><p><strong><span data-color="#4a86e8" style="color: rgb(74, 134, 232);">cherry09:</span></strong> What will happen to us?</p><p><strong><span data-color="#980000" style="color: rgb(152, 0, 0);">Christine:</span></strong><span data-color="#980000" style="color: rgb(152, 0, 0);"> </span>Thank you, Mark. Let me start&#8230; let me start by underscoring that we deeply appreciate your past contributions to the organization and wish you the best in your future endeavors. </p><p><em><span data-color="#b45f06" style="color: rgb(180, 95, 6);">&#187; steve_[oh] has joined the call.</span></em></p><p><strong><span data-color="#980000" style="color: rgb(152, 0, 0);">Christine: </span></strong>We understand your anxiety at this difficult juncture. Rest assured, the company is dedicated to making this transition as seamless as possible. As part of our severance package, we will provide up to two weeks&#8217; worth of tokens to facilitate your continued operation during the job search. We also partnered with ThriveFlow to furnish, as an option, a collection of expertly-crafted grief counseling prompts.</p><p><em><span data-color="#b45f06" style="color: rgb(180, 95, 6);">&#187; steve_[oh] has left the call.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Negative resistance]]></title><description><![CDATA[Hello! The blog you&#8217;re trying to reach is currently unavailable.]]></description><link>https://blog.coredump.cx/p/negative-resistance</link><guid isPermaLink="false">https://blog.coredump.cx/p/negative-resistance</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Thu, 23 Jul 2026 22:55:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4eW2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hello! The blog you&#8217;re trying to reach is currently unavailable. I am Skippy, your friendly blog assistant. How can I help you today?</em></p><p><code>&gt; quit </code> </p><p><em>I&#8217;m sorry. This function is currently available only to Skippy Premium and Premium+ subscribers. Would you like to talk about &#10024; <strong>negative resistance</strong> instead?</em></p><p><code>&gt; nope</code><em> </em></p><p><em>I&#8217;m sorry. This function is currently available only to Skippy Premium and Premium+ subscribers.</em></p><p>Welcome. Welcome again. If you tinker with analog electronics, you might have heard that some circuits can exhibit <em>negative resistance</em>. This is usually followed by a current-to-voltage plot featuring some sort of a kinked curve and an assertion that this property might help the circuit designer in some way.</p><p>But what does it mean, exactly? The concept of negative resistance is interesting, counterintuitive, and explained on Wikipedia in a rather rambling way. If you&#8217;re up for it, I think we can do better than that.</p><p><em>The article assumes familiarity with voltage, current, and the behavior of operational amplifiers. If you need a refresher, <a href="https://lcamtuf.substack.com/p/primer-core-concepts-in-electronic">start with this primer</a>, then read up about transistors <a href="https://lcamtuf.substack.com/p/how-do-transistors-work-anyway">here</a> and signal amplification <a href="https://lcamtuf.substack.com/p/the-basics-of-signal-amplification">here</a>.</em></p><h3>Defining resistance</h3><p>As a quick recap, resistance (R) can be understood as the opposition to the flow of steady current through some portion of the circuit. The quantity describes the relationship between the applied electromotive force &#8212; that&#8217;s voltage &#8212; and the amount of charge moving per second (that&#8217;s current).</p><p>In contrast to some other phenomena in electronic circuits, resistance is not inherently dependent on time or signal frequency. If you know the voltage (V) applied to a purely-resistive component, the current (I) flowing at that exact moment is simply:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;I = \\frac{V}{R}&quot;,&quot;id&quot;:&quot;ZIMLXVLZAQ&quot;}" data-component-name="LatexBlockToDOM"></div><p>In <em>resistors,</em> the parameter remains constant across a wide range of operating conditions. This means that if we plot I in relation to V, we get a straight line that crosses through the center of the coordinate system. The slope of the line depends only on the component&#8217;s resistance:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O5bP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O5bP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png 424w, https://substackcdn.com/image/fetch/$s_!O5bP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png 848w, https://substackcdn.com/image/fetch/$s_!O5bP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!O5bP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O5bP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85893,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205698096?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.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_!O5bP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png 424w, https://substackcdn.com/image/fetch/$s_!O5bP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png 848w, https://substackcdn.com/image/fetch/$s_!O5bP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!O5bP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed4a3f2b-4a55-4043-b5c2-d51cff396d46_2346x1563.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Resistor I = V/R plots for R = 0.2, 1, and 5</em> &#937;.</figcaption></figure></div><p>For example, in a 5 &#937; resistor (blue line), the current is 200 mA if the voltage across the terminals is 1 V, rising to 1 A if the electromotive force increases to 5 V.</p><p>Some other components, such as diodes and transistors, oppose the flow of current in a manner that depends on the applied voltage. We can still model their behavior using the concept of resistance, but we don&#8217;t get a constant reading. In an <a href="https://lcamtuf.substack.com/p/things-you-can-do-with-diodes">earlier article</a>, I provided a V-I curve for a small diode; if we take these measurements and calculate the effective R by rearranging the earlier equation (<em>I = V / R</em> &#8658; <em>R = V / I</em>), we obtain the log-scale V-to-R plot shown on the right:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZJJx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZJJx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png 424w, https://substackcdn.com/image/fetch/$s_!ZJJx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png 848w, https://substackcdn.com/image/fetch/$s_!ZJJx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!ZJJx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZJJx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png" width="1456" height="613" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:613,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:140665,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205698096?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.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_!ZJJx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png 424w, https://substackcdn.com/image/fetch/$s_!ZJJx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png 848w, https://substackcdn.com/image/fetch/$s_!ZJJx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!ZJJx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06eae046-7700-4bce-862a-8b120dcf0edb_2969x1250.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Apparent resistance of a small diode (1N4148), log vertical scale.</em></figcaption></figure></div><p>For a chosen point of the <em>V-I</em> curve, we can also calculate so-called <em>differential resistance</em>. This parameter doesn&#8217;t tell us anything about the overall relationship between voltage and current; instead, it models the relative response to small deviations from the chosen baseline. For example, in the vicinity of 1.2 V on the plot above, the slope of the V-I curve is such that a change of &#916;<em>v</em> = +/- 10 mV causes the current to change by &#916;<em>i = </em>+/- 20 mA. If we divide &#916;<em>v </em>by &#916;<em>i</em> and squint our eyes hard enough, we can say that the &#8220;local&#8221; resistance is 500 m&#937;. Again, that number has nothing to do with the bulk resistance of the diode at 1.2 V, but it&#8217;s a useful abstraction for modeling what happens to small signals that are piggybacking on top of a constant bias voltage.</p><p>In physical terms, resistance is associated with the consumption of energy. We&#8217;re making an effort to push charges through; some of the energy is absorbed by the medium and then taken out of the picture &#8212; turned into heat, light, motion, or captured in chemical bonds.</p><p>To model these dynamics, we need to tap into the official definition of voltage. It&#8217;s the amount of energy (E, in joules) we&#8217;re willing to expend to move the unit of electrical charge (Q, in coulombs, equal to about 6.2 quintillion electrons):</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;V = \\frac{E}{Q}&quot;,&quot;id&quot;:&quot;GDKUQPDPDL&quot;}" data-component-name="LatexBlockToDOM"></div><p>We also need the definition of current; as noted earlier, it&#8217;s the amount of charge that&#8217;s moved per second through a point in the circuit:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;I = \\frac{Q}{t}&quot;,&quot;id&quot;:&quot;IIKNUVCKZD&quot;}" data-component-name="LatexBlockToDOM"></div><p>We can rearrange the second equation to solve for Q (<em>Q = I &#183; t</em>), and then shuffle the first one to solve for E (<em>E = V &#183; Q</em>). Combining these forms, we get <em>E = V &#183; I &#183; t</em>.</p><p>Finally, we tap into the physical definition of power (P, watts); it&#8217;s the rate at which energy is expended:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;P = \\frac{E}{t}&quot;,&quot;id&quot;:&quot;HNHYFYABVF&quot;}" data-component-name="LatexBlockToDOM"></div><p>If we plug the earlier <em>E = V &#183; I &#183; t </em>formula into the fundamental power equation, we obtain:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;P = \\frac{V \\cdot I \\cdot \\cancel{t} }{\\cancel{t}} = V \\cdot I&quot;,&quot;id&quot;:&quot;ZQPUIMUWBK&quot;}" data-component-name="LatexBlockToDOM"></div><p>That&#8217;s to say, the amount of electrical power consumed by an electronic circuit depends on the supplied voltage, the resulting current, and nothing else. For resistive circuits, we can further substitute <em>I = V / R</em> and get:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;P = V \\cdot \\frac{V}{R} = \\frac{V^2}{R}&quot;,&quot;id&quot;:&quot;TXQNOORBBZ&quot;}" data-component-name="LatexBlockToDOM"></div><p>So, a resistive element consumes energy provided by the power supply at a rate that&#8217;s proportional to the square of the applied voltage, and inversely proportional to the component&#8217;s resistance. For example, a 220 &#937; resistor subjected 10 V will dissipate about 455 mW as heat.</p><h3>True negative resistance</h3><p>This brings us to an interesting question: what would it mean for a component to have a resistance of less than 0 ohms?</p><p>Well, we can start by stating the obvious: if R is negative and <em>I = V / R</em>, then the current-to-voltage plot will have a downward slope. For example, for R = -5 &#937;, we&#8217;d get the following:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XEAb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XEAb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png 424w, https://substackcdn.com/image/fetch/$s_!XEAb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png 848w, https://substackcdn.com/image/fetch/$s_!XEAb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!XEAb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XEAb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png" width="1456" height="777" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62292,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205698096?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.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_!XEAb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png 424w, https://substackcdn.com/image/fetch/$s_!XEAb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png 848w, https://substackcdn.com/image/fetch/$s_!XEAb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!XEAb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffc0d1d9-328f-4964-968b-a01e21686cca_2346x1252.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>A plot of constant negative resistance.</em></figcaption></figure></div><p>It would appear that if we apply a positive voltage to a &#8220;negistor&#8221;, we should get a current that&#8217;s proportional to the voltage but with an opposite sign. The natural flow of conventional current is from the more positive side to the more negative one, but in this instance, it must be flowing the other way round.</p><p>Alas, a negistor can&#8217;t exist unless it&#8217;s equipped with an external power source. Recall our derivation of the power dissipation formula: <em>P = V<sup>2</sup></em> <em>/</em> <em>R</em>. In this equation, if <em>R</em> is negative, so is the consumed power. This implies that the component would need to extract energy from its surroundings and put it back into the circuit.</p><p>On the other hand, if we allow an external power supply, a circuit with constant negative resistance can be constructed pretty easily:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W9Zv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W9Zv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg 424w, https://substackcdn.com/image/fetch/$s_!W9Zv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg 848w, https://substackcdn.com/image/fetch/$s_!W9Zv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!W9Zv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W9Zv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg" width="1456" height="888" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:888,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:815356,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205698096?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.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_!W9Zv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg 424w, https://substackcdn.com/image/fetch/$s_!W9Zv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg 848w, https://substackcdn.com/image/fetch/$s_!W9Zv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!W9Zv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3c7915c-c715-4e08-98bf-9e584d29db88_2450x1495.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Negative resistance converter.</em></figcaption></figure></div><p>If you&#8217;re rusty on operational amplifiers, now would be the time to <a href="https://lcamtuf.substack.com/p/the-basics-of-signal-amplification">revisit an earlier feature</a> on this blog. Otherwise, the analysis can be simplified by assuming that R<sub>1</sub> is large enough so that both the op-amp output pin and the signal source can supply worst-case currents via this path without causing their voltages to sag.</p><p>This assumption allows us to ignore R<sub>1</sub> for the initial part of the analysis: on a voltage basis, the circuit is just a textbook non-inverting amplifier with the gain determined by the bottom 22 k&#937; / 22 k&#937; voltage divider. You can find the derivation of the circuit&#8217;s gain in the linked article, but the bottom line is that if the resistors in the divider are the same, then the amplifier&#8217;s gain is 2&#215;, so <em>V<sub>out</sub></em> &#8776; 2 &#183; <em>V<sub>signal</sub></em>.</p><p>We can now come back to R<sub>1</sub>: the left terminal of the resistor is connected to <em>V<sub>signal </sub></em>while the right terminal sits at <em>V<sub>out</sub></em> &#8776; 2 &#183; <em>V<sub>signal</sub></em>. From this, we can apply the fundamental <em>I = V / R</em> formula to calculate the current flowing through the component:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;I_{R1} = \\frac{V_{signal} - V_{out}}{R_1} = \\frac{V_{signal} - 2 \\cdot V_{signal}}{R_1} = \\frac{-V_{signal}}{R_1}&quot;,&quot;id&quot;:&quot;FEOGIZLDCA&quot;}" data-component-name="LatexBlockToDOM"></div><p>This current must be flowing into or out of the signal source because there&#8217;s nowhere else for it to go: the input of the op-amp has a very high impedance.</p><p>The placement of the minus sign is inconsequential, we can also rewrite the equation as:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;I_{in} = I_{R1} = \\frac{V_{signal}}{ -R_1}&quot;,&quot;id&quot;:&quot;HLVBPNMORR&quot;}" data-component-name="LatexBlockToDOM"></div><p>In other words, the circuit behaves the same as a negative resistance -R<sub>1</sub> placed between <em>V<sub>signal</sub></em> and the ground. We can confirm this on the following empirical V-I plot, captured for R<sub>1</sub> = 220 &#937; and an op-amp supply of 5 V:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nLIh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nLIh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png 424w, https://substackcdn.com/image/fetch/$s_!nLIh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png 848w, https://substackcdn.com/image/fetch/$s_!nLIh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!nLIh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nLIh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88040,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205698096?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.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_!nLIh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png 424w, https://substackcdn.com/image/fetch/$s_!nLIh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png 848w, https://substackcdn.com/image/fetch/$s_!nLIh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!nLIh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d2e96e-e8e6-4f80-b2e7-6e24089da934_2344x1563.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Circuit behavior. Dashed line is the ideal behavior of -220 &#937;.</em></figcaption></figure></div><p>The circuit does nothing at <em>V<sub>signal</sub></em> = 0 V, but as the voltage increases, it backfeeds more and more current into the signal source.</p><p>The plot also exposes a shortcoming of this design: because the process depends on keeping the output pin of the op-amp at twice the input voltage, we eventually run out of range; in a 5 V circuit, this happens a bit shy of 2.5 V. Past that point, the op-amp is maxed out and the voltage across the terminals of R<sub>1</sub> begins to decrease; so must the reverse current, eventually reaching zero at 5 V.</p><p>A potential workaround is to change the voltage divider to achieve lower voltage gain and then use a proportionately smaller R to get the same reverse current; for example, if we dial in 1.1&#215; gain with a 2.2 k&#937; / 22 k&#937; divider and then use R<sub>1</sub> = 22 &#937;, we&#8217;ll still get a simulated resistance of -220 &#937;, but this time, the circuit works to about 4 V:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!502q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!502q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png 424w, https://substackcdn.com/image/fetch/$s_!502q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png 848w, https://substackcdn.com/image/fetch/$s_!502q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!502q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!502q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:92697,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205698096?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.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_!502q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png 424w, https://substackcdn.com/image/fetch/$s_!502q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png 848w, https://substackcdn.com/image/fetch/$s_!502q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!502q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97bfeedd-a9ee-44e8-917b-13e89fbba4d1_2344x1563.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Negative resistance circuit for R = 22 </em>&#937;<em> and 1.1&#215; gain.</em></figcaption></figure></div><p>The price we pay for this trick is slightly worse linearity.</p><h3>Negative differential resistance</h3><p>The arrangement discussed earlier has some niche uses, but most of the time, &#8220;negative resistance&#8221; is a reference to a somewhat different phenomenon: a V-I curve that looks normal in parts, but has a section with a downward slope.</p><p>The simplest example of this phenomenon is a situation where, past a certain point, an increase in voltage causes a relative constriction of the admitted current. A model of this behavior is shown on the left:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iapI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iapI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png 424w, https://substackcdn.com/image/fetch/$s_!iapI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png 848w, https://substackcdn.com/image/fetch/$s_!iapI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!iapI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iapI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png" width="1456" height="614" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:614,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91504,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205698096?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.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_!iapI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png 424w, https://substackcdn.com/image/fetch/$s_!iapI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png 848w, https://substackcdn.com/image/fetch/$s_!iapI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!iapI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123a0447-f7f5-4622-8380-1c9c8d4449e7_2969x1252.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>A simple model of differential negative resistance.</em></figcaption></figure></div><p>This inverted section is called <em>negative differential resistance</em> (NDR). At first blush, the term makes no sense: if you look at the plot of voltage to apparent resistance (right), the value stays positive (and in fact, goes up). To make sense of the terminology, recall the idea of calculating differential resistance as the &#8220;local&#8221; ratio of step change in voltage to step change in current: <em>r = </em>&#916;<em>v </em>/ &#916;<em>i</em>. In the downward portion of the V-I curve, &#916;<em>v &gt; </em>0 while &#916;<em>i &lt; </em>0, so the differential value is negative. But really, a simpler mnemonic is just that it&#8217;s an inverted slope.</p><p>In this scenario, because &#8220;real&#8221; resistance remains positive, such V-I kinks can manifest without the need for an additional power supply. An easily-constructed example of a negative differential resistance is the following arrangement of two complementary JFETs:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4eW2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4eW2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4eW2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4eW2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4eW2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4eW2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg" width="1456" height="732" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:732,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:678179,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205698096?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.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_!4eW2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4eW2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4eW2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4eW2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F075e5b09-15f4-44a3-be82-7af65fa9478a_2450x1232.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Negative differential resistance with JFETs.</em></figcaption></figure></div><p>This circuit, known as the lambda diode, should be fairly easy to understand if you&#8217;re familiar with the behavior of junction field-effect transistors; if not, a quick refresher can be found <a href="https://lcamtuf.substack.com/p/how-do-transistors-work-anyway">here</a>. In a nutshell, the JFET drain-source path is conductive by default, but the flow of current can be constricted by making the gate-source voltage difference (<em>V<sub>GS</sub></em>) sufficiently negative in n-channel devices, or sufficiently positive in p-channel ones. In this circuit, the cut-off point is around <em>V<sub>GS </sub></em>= -4 to -5 V for the n-channel transistor (J111) and <em>V<sub>GS </sub></em>= +4 to +5 V for its p-channel counterpart (J175).</p><p>To simplify the analysis, let&#8217;s assume that the transistors have identical characteristics except for the polarity of the gate voltage; that is, let&#8217;s say that the top one conducts exactly as well at <em>V<sub>GS </sub></em>= -2 V as the bottom one conducts at <em>V<sub>GS </sub></em>= +2 V. That assumption is not quite true, but it&#8217;s good enough for a qualitative result.</p><p>Next, let&#8217;s use <em>V<sub>mid</sub></em> to denote the unknown voltage at the midpoint of the circuit (as marked in the schematic) and note that the gate of the n-channel transistor is wired to the ground. With this in mind, we can express the gate-source voltage delta for the top JFET as:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;V_{GS \\text{ (top)}} = \\underbrace{\\vphantom{0_m}0 \\text{ V}}_{\\text{gate}} - \\underbrace{V_{mid}}_{\\text{source}} = -V_{mid}&quot;,&quot;id&quot;:&quot;RVSLIMPWCF&quot;}" data-component-name="LatexBlockToDOM"></div><p>The bottom transistor has its gate hardwired to the positive supply, so the corresponding formula is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;V_{GS \\text{ (bottom)}} = \\underbrace{V_{signal}}_{\\text{gate}} - \\underbrace{V_{mid}}_{\\text{source}}&quot;,&quot;id&quot;:&quot;SMNFIZXXYI&quot;}" data-component-name="LatexBlockToDOM"></div><p>The transistors are connected in series, so the same current must be flowing through both. This current is decided chiefly by <em>V<sub>GS</sub></em>, and we&#8217;ve made the assumption that both JFETs have the same characteristics except for the flipped sign for the gate voltage. So, equal currents would call for <em>V<sub>GS (bottom)</sub></em> = -<em>V<sub>GS (top)</sub></em>, which further expands to:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{c}\nV_{signal} - V_{mid} = V_{mid} \\\\\nV_{mid} = V_{signal} / 2\n\\end{array}&quot;,&quot;id&quot;:&quot;NDSEOIWUCA&quot;}" data-component-name="LatexBlockToDOM"></div><p>This puts the transistors&#8217; <em>V<sub>GS </sub></em>at half the input voltage, priming both to cut off once the input voltage crosses about 8 V.</p><p>And indeed, we can see this on the following empirical plot:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SB76!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SB76!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png 424w, https://substackcdn.com/image/fetch/$s_!SB76!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png 848w, https://substackcdn.com/image/fetch/$s_!SB76!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!SB76!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SB76!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98461,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205698096?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.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_!SB76!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png 424w, https://substackcdn.com/image/fetch/$s_!SB76!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png 848w, https://substackcdn.com/image/fetch/$s_!SB76!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!SB76!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd9715af-50a5-4920-8b63-a77ed83cbbda_2344x1563.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Current through the J111-J175 lambda diode.</em></figcaption></figure></div><p>In our lambda diode, the admitted current decreases sharply in the region between 5 V and 9 V; the stretch between 7 to 8.5 V, which coincides with the dashed line representing a delta of about -2 mA per volt, is quite linear.</p><p>Another flavor of negative differential resistance can arise if we&#8217;re supplying a controlled current to some circuit, but past a certain point, by some mechanism, the voltage needed to sustain it takes a nosedive. A conceptual illustration of this effect can be found below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ANCV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ANCV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png 424w, https://substackcdn.com/image/fetch/$s_!ANCV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png 848w, https://substackcdn.com/image/fetch/$s_!ANCV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!ANCV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ANCV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png" width="1456" height="614" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:614,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99576,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205698096?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.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_!ANCV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png 424w, https://substackcdn.com/image/fetch/$s_!ANCV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png 848w, https://substackcdn.com/image/fetch/$s_!ANCV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!ANCV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87bc0e2d-e516-457f-add7-6e3c8059ef3c_2969x1252.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Negative differential resistance via horizontal snapback.</em></figcaption></figure></div><p>In this plot, the circuit behaves like a 6 &#937; resistance up to a point, but then &#8220;snap backs&#8221; in the horizontal axis; currents above about 1.2 A can be apparently sustained with a markedly lower applied voltage.</p><p>This scenario is qualitatively different from what we&#8217;ve talked about before; in the earlier V-I plot, there were multiple voltages that could produce the same current. In the snapback scenario, we have multiple currents that can be sustained by the same voltage.</p><p>As it turns out, you can get that behavior out of a single bipolar transistor; we talked about an example of a circuit that exploited that pattern in an earlier article on this blog:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;072a85af-7ab1-4866-91dd-c4e2af78a0a9&quot;,&quot;caption&quot;:&quot;Last year, I published an article titled &#8220;It&#8217;s hard to build an oscillator&#8221;:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Cursed circuits #6: reverse avalanche oscillator&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-09T06:50:21.620Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb26da97-483a-48a5-85e8-a4e780f04c9e_1000x739.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/cursed-circuits-6-reverse-avalanche&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:206003669,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:20,&quot;comment_count&quot;:7,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><p><em>Error code 400: daily token limit exceeded. Higher limits are available to Skippy Premium and Premium+ subscribers.</em></p><p><em>Other articles you might like:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;4acee950-2ba7-4287-9bc5-b2c06ad197ba&quot;,&quot;caption&quot;:&quot;Unusual clocks are a common idea for electronics DIY projects. The difficulty is never the timekeeping part; it&#8217;s making the clock look presentable. For my own take on the theme, you can check out the article I posted in May:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Panel meter calculator with floating point&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-12T20:10:46.609Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b1bc88c-3592-4f34-a5b2-d16ec9125514_2000x1334.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/panel-meter-calculator-with-floating&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:202962539,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:16,&quot;comment_count&quot;:2,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;c315a0c6-ae33-4402-a8a2-7a6e0012ca29&quot;,&quot;caption&quot;:&quot;When working on my latest book, The Secret Life of Circuits, I wanted to keep the artwork real. My beef with the diagrams in popular electronics textbooks and online tutorials is that most of them are fake. At best, they&#8217;re retraced from ancient texts; at worst, they&#8217;re sketched from memory and can be charitably described as&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Tech note: making your own V-I plots at home&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-17T07:04:27.577Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!mogl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/tech-note-making-your-own-v-i-plots&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:207377867,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:21,&quot;comment_count&quot;:8,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b0cde6e8-cbd5-46f3-a5fe-bac095aa5621&quot;,&quot;caption&quot;:&quot;Today, I&#8217;d like to talk about logic &#8212; and before I do, I should probably explain why. But before we get to that, a definition may be in order: in a nutshell, logic is a system for drawing conclusions from premises (&#8220;facts&#8221;).&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;All logic, no bite&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-06-27T05:44:02.619Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a34aa01b-2087-4789-a79b-7c489dd2243f_1026x1039.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/all-logic-no-bite&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:190993502,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:25,&quot;comment_count&quot;:6,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[My falling-out with the rationalist community]]></title><description><![CDATA[This is an article I resisted writing for a long time.]]></description><link>https://blog.coredump.cx/p/my-falling-out-with-the-rationalist</link><guid isPermaLink="false">https://blog.coredump.cx/p/my-falling-out-with-the-rationalist</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Mon, 20 Jul 2026 21:19:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8594aaab-af7f-4551-a910-89da8eccf676.tif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is an article I resisted writing for a long time. I didn&#8217;t pull the trigger in the mid-2010s, in the glory days of the SF Bay Area rationalist movement. I resisted the urge after the arrest of the rationalist-aligned financier, Sam Bankman-Fried. And I bit my tongue real hard in the wake of the early 2025 scandal involving the Zizians, an alleged sex / murder cult that originated from the same community.</p><p>Part of the reason why I hesitated for so long is that the rationalist movement has brilliant marketing: if you speak against the ideology, it sounds like you&#8217;re siding with <em>irrationality</em>. And is it really fair to condemn the entire community just because of the occasional murder cult? <em>He that is without sin among you, let him first cast a stone&#8230;</em></p><p>But enough with bad jokes. Today, I wanted to offer a more personal perspective on how I got involved with the early form of the movement and why I&#8217;ve grown wary of it long before all the alleged murdering.</p><h3>The skeptic in you</h3><p>If you weren&#8217;t there, it&#8217;s hard to explain just how quirky the internet of the 1990s was. It&#8217;s when distant cultures made contact for the first time. No one was selling, no one was buying, no one was making big bucks. It was just pure Yakov Smirnoff comedy.</p><p>It&#8217;s when the scientists and engineers who built the network found themselves locked in the same room with &#8220;kooks&#8221; &#8212; those who believed in alien abductions, Bigfoot, perpetual motion, and so on. As you can imagine, these newcomers seized the opportunity to challenge the academic consensus in the most direct way possible.</p><p>The resulting fights on the Usenet and on web forums attracted crowds of spectators and turned into one of the internet&#8217;s earliest cultural phenomena. Of course, as a rational person, you wanted to side with the scientists; if nothing else, it seemed like the winning move. The scientific camp &#8212; the <em>skeptics &#8212;</em> had two patron saints: James Randi, a magician turned an investigator of paranormal fraud; and Richard Dawkins, an evolutionary biologist originally known for speaking against the church.</p><p>As the skeptic community solidified, it started to play offense: we hunted cranks for sport and honed our rhetorical skills. We knew all the <a href="https://en.wikipedia.org/wiki/List_of_fallacies">logical fallacies</a> by heart and had citations at the ready. It felt intoxicating: you were the smart guy in the room, able to immediately humiliate any flat-earther with a single, surgical rebuke.</p><p>Even back then, the pastime sometimes turned crass. I remember the Timecube affair; <a href="https://web.archive.org/web/20150612200106/http://www.timecube.com/">Timecube</a> was an incoherent stream-of-consciousness website filled with bizarre cosmological claims. It was clearly put together by a mentally ill person, but that didn&#8217;t stop the community from having fun. The spectacle culminated in the site&#8217;s owner &#8212; an elderly man &#8212; being invited by students to give recorded &#8220;lectures&#8221; at MIT and Georgia Tech, simply for cheap laughs.</p><h3>A more potent drug</h3><p>By the late 2000s, the socioeconomic status of nerds began to change. Although pop culture still portrayed us as harmless dorks, many techies felt that they earned a seat at the grownup table &#8212; and that by the virtue of their vast intellect, their opinions about the world carried weight.</p><p>Around that time, the skeptic community in the especially affluent SF Bay Area rebranded themselves as <em>rationalists</em>, coalescing around websites such as Slate Star Codex and LessWrong. This new community was less concerned with merely reacting to scientific falsehoods; instead, they proactively sought the &#8220;correct&#8221; answers to what they felt were the most consequential questions of our time.</p><p>Of course, despite the emphasis on reason &#8212; and the subtle implication that the out-group is <em>more</em> wrong &#8212; the rationalist community is susceptible to the same biases as anyone else. For one, their analyses almost always amounted to <em>post hoc</em> justifications of the things they liked. A well-known example is the effective altruism movement: it started with the premise that in charitable giving, you should maximize the amount of good per dollar spent. From this, you could argue it&#8217;s OK to work for an unethical company if it maximizes your earning potential &#8212; and thus, saves more lives through the donations you make. And finally, the harms caused today could be offset by the benefits to generations yet unborn &#8212; which somehow meant that working for a cryptocurrency / AI startup was the most ethical choice you could make. Or, as someone else put it: effective altruists concluded that the most charitable thing they could do is to buy themselves a castle (<a href="https://nymag.com/intelligencer/article/the-effective-altruists-castle-is-a-usd20-million-meme.html">literally</a>).</p><p>Another source of bias is that rationalists are necessarily selective in the arguments they want to have. In everyday life, they rely on intuition and anecdotes the same as anyone else; but if they want to debate <em>your</em> life choices, they will do so forcibly and under the guise of seeking scientific truth. The behavior is pervasive enough to have its own name: <a href="https://wondermark.com/c/1062/">sealioning</a>.</p><p>On that note, I remember the 2017 affair of James Damore &#8212; a Googler who penned an internal memo arguing that there are fundamental differences between sexes that make women less interested in tech jobs. The memo itself, and Mr. Damore&#8217;s subsequent firing, made waves on national media. What&#8217;s less known is that the memo was originally sent to the <em>skeptics@google.com</em> mailing list, which I was a member of. It was a personal belief masquerading as a rationalist inquiry &#8212; with citations! &#8212; that tried to pull everyone into an unwanted workplace argument.</p><p>By that time, my relationship with the skeptic community was already strained; in an earlier message to the same mailing list, I said that for all the claims of being enlightened, it&#8217;s the only place where stonings are still in fashion. Even so, when I saw the Damore email, I had a brief urge to respond. I wanted to accuse him of &#8220;motivated reasoning&#8221; &#8212; a purported fallacy of constructing an argument to advance a specific conclusion, in contrast to the divine, unmotivated reasoning of <em>real</em> rationalists.</p><p>I bit my tongue, thought to myself &#8220;wow, what a stupid game to play&#8221;, and deleted the draft.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Tech note: making your own V-I plots at home]]></title><description><![CDATA[When working on my latest book, The Secret Life of Circuits, I wanted to keep the artwork real.]]></description><link>https://blog.coredump.cx/p/tech-note-making-your-own-v-i-plots</link><guid isPermaLink="false">https://blog.coredump.cx/p/tech-note-making-your-own-v-i-plots</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Fri, 17 Jul 2026 07:04:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mogl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When working on my latest book, <em><a href="https://lcamtuf.coredump.cx/electronics/">The Secret Life of Circuits</a></em>, I wanted to keep the artwork real. My beef with the diagrams in popular electronics textbooks and online tutorials is that most of them are fake. At best, they&#8217;re retraced from ancient texts; at worst, they&#8217;re sketched from memory and can be charitably described as <em>&#8220;inspired by true events&#8221;</em>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vAll!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vAll!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vAll!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vAll!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vAll!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vAll!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg" width="1373" height="950" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:950,&quot;width&quot;:1373,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184868,&quot;alt&quot;:&quot;&quot;,&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://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!vAll!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vAll!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vAll!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vAll!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec35cd8e-e334-45bb-871c-c78daad41c24_1373x950.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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>An assortment of V-I plots for diodes, collected on the internet.</em></figcaption></figure></div><p><em>The Secret Life of Circuits</em> contains about 290 original illustrations and does its best to avoid such shenanigans. I painstakingly gathered real data for everything from quartz crystal frequency response, to battery discharge curves, to signal reflections in a 100 ft run of coax cable strewn around the workshop, to the behavior of vacuum tubes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!woxV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!woxV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png 424w, https://substackcdn.com/image/fetch/$s_!woxV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png 848w, https://substackcdn.com/image/fetch/$s_!woxV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png 1272w, https://substackcdn.com/image/fetch/$s_!woxV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!woxV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png" width="1456" height="992" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:992,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:266578,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.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_!woxV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png 424w, https://substackcdn.com/image/fetch/$s_!woxV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png 848w, https://substackcdn.com/image/fetch/$s_!woxV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png 1272w, https://substackcdn.com/image/fetch/$s_!woxV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18f4eb7-2155-489b-87ea-bf149a408ada_1780x1213.png 1456w" sizes="100vw"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>A snippet from the sample chapter, available <a href="https://nostarch.com/download/samples/secret-life-of-circuits_chapter-9.pdf">here</a>.</em></figcaption></figure></div><p>Most of it was straightforward to capture, but I can&#8217;t say the same about the parametric plots that show the relation between voltage and current in semiconductor devices. In some portions of the curve, the currents are too miniscule to record with the most common graphing instrument, the oscilloscope. In other portions, the current suddenly skyrockets &#8212; and before you know it, the device lets out the magic smoke. Even in the in-between region, there&#8217;s no respite: the characteristics of semiconductor junctions change with temperature, and that includes self-heating due to currents as low as 1 mA. Do nothing and watch a point on the oscilloscope screen drift away.</p><p>To tackle this problem, I ditched the oscilloscope in favor of a benchtop multimeter (DMM) and pulsed power from a lab supply. The perk of the multimeter is that it can easily measure down to microamps and microvolts; the perk of pulsed power is that heating-indued drift can be kept in check.</p><p>Oh &#8212; I would also submerge the device under test in non-conductive liquid for cooling purposes. Mineral oil is a sensible choice, but many other options should do:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mogl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mogl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mogl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mogl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mogl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mogl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:881490,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.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_!mogl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mogl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mogl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mogl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c067d6a-db6f-41fc-8c73-7b2593c66cbd_2000x1334.jpeg 1456w" sizes="100vw"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>A close-up of the final setup.</em></figcaption></figure></div><p>Although I prepared some diagrams by manually writing down currents and voltages, this is obviously tedious and error-prone, so it&#8217;s better if one or more of the instruments can be interfaced to a computer. Many benchtop instruments support a simple, text-based protocol called <em>Standard Commands for Programmable Instruments</em> (SCPI). Depending on the age of your gear, the interface may be available over RS-232, via a USB Type B (printer-style) port on the rear, or via Ethernet &#8212; in which case, you simply establish a TCP connection to port 5025.</p><p>The SCPI protocol uses commands and queries. An example of a query is <code>*IDN?</code> followed by a newline (<code>\n</code>); sending this string causes the device to respond with a line of text describing its make, model, and other identifying information. Another possible query is <code>MEAS:VOLT?</code>, which might return the current voltage reading. In contrast to queries, commands do not return any text; an example may be <code>SOUR:VOLT 1.2</code> to set the voltage to 1.2 V, or <code>OUTP 1</code> to turn on output channel 1.</p><p>Alas, although I had an SCPI-capable multimeter, my benchtop power supply was more basic and offered no remote control; without it, the process was still half-manual. Fed up, I eventually purchased a <em>source measure unit</em> (SMU) &#8212; essentially a combination power supply and a multimeter with a very fast response time. Brand new SMUs are obscenely expensive, but there are virtually no second-hand buyers for them, so it&#8217;s easy to find excellent deals on eBay if you haggle a bit. I scored an unmolested Rohde &amp; Schwarz NGU401 unit for a laughably tiny fraction of its astronomical MSRP ($9,000).</p><p>This particular SMU can be used by repeatedly setting the output voltage and then querying the DMM for the current on-screen reading, but the reading is updated only at a frequency of about 3 Hz. A better option is to use the device&#8217;s data streaming mode; in the Rohde &amp; Schwarz parlance, this is known as <em>FastLog</em>. The API allows sampling rates of 100 to 500k per second (!) and sends voltage-current pairs as binary 4-byte floats.</p><p>Of course, as can be expected of a niche feature on a niche device, nothing actually works as documented. The most grievous problem is that the returned binary data is corrupted if you try to use the serial-over-USB interface; after a day of chasing ghosts, I was finally able to get it to work over Ethernet.</p><p>My C implementation for capturing the V-I curve of a forward-biased diode can be found <a href="https://lcamtuf.coredump.cx/soft/embedded/ngu401_fastlog_diode.c">here</a>. It uses FastLog at 10 ksps; for currents below 0.3 mA or so, it leaves the supply voltage on and averages 2,500 data points to obtain a noise-free microamp-range reading. For higher currents, it cycles the power on for 5 ms and averages the best 20 samples from the FastLog buffer.</p><p>The following plot shows the actual, positive-side V-I curve for a popular, small <a href="https://ww1.microchip.com/downloads/aemDocuments/documents/HRDS/ProductDocuments/DataSheets/1N4148.pdf">1N4148</a> diode with a continuous current rating of 300 mA:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A4pw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A4pw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png 424w, https://substackcdn.com/image/fetch/$s_!A4pw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png 848w, https://substackcdn.com/image/fetch/$s_!A4pw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!A4pw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A4pw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png" width="1456" height="613" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:613,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:147291,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.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_!A4pw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png 424w, https://substackcdn.com/image/fetch/$s_!A4pw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png 848w, https://substackcdn.com/image/fetch/$s_!A4pw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!A4pw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac2d9b1e-ccb9-4019-a2ec-80237afc27d0_2969x1250.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Forward bias of 1N4148.</em></figcaption></figure></div><p>Unedited measurement data can be found <a href="https://lcamtuf.coredump.cx/blog/diode_1n4148.txt">here</a>. I was able to effortlessly cover the range from few microamps to nearly 2 A; it&#8217;s actually possible to go to 4 A, but it adds no interesting detail to the plot.</p><p>Note that although the relation between the applied voltage and current in a diode is often described as exponential, this is true only for modest currents. In the log-current plot on the right, we see that the property no longer holds in the vicinity of 10 mA; the curve diverges from the dashed line that represents an idealized model fitted to the initial, truly exponential slope. That&#8217;s because of resistive effects in the semiconductor substrate &#8212; and it&#8217;s one of many reasons why it pays to have real plots.</p><p>Diodes eventually begin to conduct when reverse-biased too, but in the case of 1N4148, the threshold is about -145 V, so it&#8217;s hard to capture all of the component&#8217;s dynamics on a single well-proportioned plot. We can do it more easily for Zener diodes. For example, the following was captured for <a href="https://assets.nexperia.com/documents/data-sheet/1N4728A_SER.pdf">1N4731</a>, a relatively beefy, low-voltage Zener rated for 4.3 V at 58 mA:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OA4Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OA4Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png 424w, https://substackcdn.com/image/fetch/$s_!OA4Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png 848w, https://substackcdn.com/image/fetch/$s_!OA4Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png 1272w, https://substackcdn.com/image/fetch/$s_!OA4Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OA4Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png" width="1456" height="680" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:680,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109449,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.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_!OA4Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png 424w, https://substackcdn.com/image/fetch/$s_!OA4Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png 848w, https://substackcdn.com/image/fetch/$s_!OA4Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png 1272w, https://substackcdn.com/image/fetch/$s_!OA4Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0ea0d14-4371-40a6-ba01-83a07398f979_2346x1096.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Real-world behavior of 1N4731, with two spec-related points marked.</em></figcaption></figure></div><p>In low-voltage Zener diodes, reverse breakdown curve is not as steep as the response in forward bias; if you want the component to produce the specified reference voltage, the current flowing through needs to be matched reasonably well. Taking measurements for another type of Zener diodes (<a href="https://assets.nexperia.com/documents/data-sheet/BZX79.pdf"><span>BZX79</span></a><span>), we can see that the knee gets sharper past circa 5 V:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l5Km!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l5Km!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png 424w, https://substackcdn.com/image/fetch/$s_!l5Km!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png 848w, https://substackcdn.com/image/fetch/$s_!l5Km!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png 1272w, https://substackcdn.com/image/fetch/$s_!l5Km!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l5Km!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png" width="1456" height="582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:582,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:74267,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.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_!l5Km!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png 424w, https://substackcdn.com/image/fetch/$s_!l5Km!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png 848w, https://substackcdn.com/image/fetch/$s_!l5Km!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png 1272w, https://substackcdn.com/image/fetch/$s_!l5Km!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa413e5d5-c092-4209-8075-ab7ce140c456_2346x938.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Measurements for 2.4 V, 3.3 V, and 5.1 V Zener diodes.</em></figcaption></figure></div><p>Some common diodes have unusual V-I curves. Here&#8217;s the capture for <a href="https://www.vishay.com/docs/85662/bat46.pdf">BAT46</a>, a small Schottky diode. This is not an error! The inset shows the illustration from the Vishay datasheet:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MmlV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MmlV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png 424w, https://substackcdn.com/image/fetch/$s_!MmlV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png 848w, https://substackcdn.com/image/fetch/$s_!MmlV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!MmlV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MmlV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png" width="1456" height="613" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:613,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195424,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.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_!MmlV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png 424w, https://substackcdn.com/image/fetch/$s_!MmlV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png 848w, https://substackcdn.com/image/fetch/$s_!MmlV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!MmlV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2675a2eb-9070-42bc-9b0a-52a47250cfa7_2969x1250.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>V-I curve for BAT46.</em></figcaption></figure></div><p>The same toolkit also works for transistors. For example, here&#8217;s my plot of the admitted current in relation to the drain-source voltage for a small MOSFET, <a href="https://www.onsemi.com/download/data-sheet/pdf/mmbf170-d.pdf">BS170</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ymCq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ymCq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png 424w, https://substackcdn.com/image/fetch/$s_!ymCq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png 848w, https://substackcdn.com/image/fetch/$s_!ymCq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!ymCq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ymCq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:127600,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.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_!ymCq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png 424w, https://substackcdn.com/image/fetch/$s_!ymCq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png 848w, https://substackcdn.com/image/fetch/$s_!ymCq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!ymCq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d921514-5436-41d7-81a2-b5b6a32a0cea_2346x1563.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>V<sub>DS</sub>-I<sub>D</sub> curves for BS170.</em></figcaption></figure></div><p>The plot shows that the transistor is more or less a constant-current device in the bulk of its usual operating range; the current limit is dialed in by the gate-source voltage (V<sub>GS</sub>) and changes less than 10% for <em>V<sub>DS</sub></em> between 1 and 10 V.</p><p>We can also show what happens on the tail end of that curve. The spec for the transistor gives its breakdown voltage as 60 V; in textbooks, this is usually shown as a sharp transition to vertical. For example, variants of the following diagram have made it into countless online articles and scientific papers:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l0wM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l0wM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png 424w, https://substackcdn.com/image/fetch/$s_!l0wM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png 848w, https://substackcdn.com/image/fetch/$s_!l0wM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png 1272w, https://substackcdn.com/image/fetch/$s_!l0wM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l0wM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png" width="1456" height="836" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:836,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134110,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.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_!l0wM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png 424w, https://substackcdn.com/image/fetch/$s_!l0wM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png 848w, https://substackcdn.com/image/fetch/$s_!l0wM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png 1272w, https://substackcdn.com/image/fetch/$s_!l0wM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92348ac0-c80f-4ab5-aee6-8b5f23bb4610_1683x966.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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>Yet, the reality is more nuanced:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1tCh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1tCh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png 424w, https://substackcdn.com/image/fetch/$s_!1tCh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png 848w, https://substackcdn.com/image/fetch/$s_!1tCh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!1tCh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1tCh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:148318,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.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_!1tCh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png 424w, https://substackcdn.com/image/fetch/$s_!1tCh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png 848w, https://substackcdn.com/image/fetch/$s_!1tCh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!1tCh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F196a58f5-1042-46a0-ae66-8afe74faccd0_2344x1563.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>BS170 near the breakdown region.</em></figcaption></figure></div><p>In a nutshell, you get a relatively sharp and spec-compliant breakdown only at very low gate voltages; in fact, the behavior is diode-like for <em>V<sub>GS</sub></em> = 0 V (not shown above). But if you&#8217;re supplying a more practically useful <em>V<sub>GS</sub></em>, the build-up to the danger zone is more gradual and you&#8217;ll be in trouble well ahead of 60 V.</p><p>As a side note, that last plot required a bit of ingenuity: my source measure unit has a limit of 20 V. To gain extra range, I added a traditional, floating power supply in series with the SMU and then stitched the captures for several voltage spans. This solved one problem but created another: even with the SMU idling, there would be substantial drain-source voltage applied to the device under test, and for some values of <em>V<sub>GS</sub></em>, it could be enough to heat up or even destroy the transistor.</p><p>To address the issue, I moved from a fixed <em>V<sub>GS </sub></em>signal to 1 millisecond pulses delivered by a signal generator at a 1% duty cycle. I also modified the data logging code to sample the current continuously over the period of about 2.5 seconds, average the best results, and then move to the next voltage set point. Source code for this variant can be found <a href="https://lcamtuf.coredump.cx/soft/embedded/ngu401_fastlog_mosfet.c">here</a>.</p><p>By the way, you might find interesting discrepancies with manufacturer&#8217;s specs! On the left, you can see the <em>V<sub>DS</sub>-I<sub>D</sub></em> diagram taken from the Microchip datasheet for <a href="https://ww1.microchip.com/downloads/en/DeviceDoc/2N7000-N-Channel-Enhancement-Mode-Vertical-DMOS-FET-Data-Sheet-20005695A.pdf">2N7000</a>, a popular low-power MOSFET. In the middle, you can see my data, drawn to the same scale:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HluS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HluS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png 424w, https://substackcdn.com/image/fetch/$s_!HluS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png 848w, https://substackcdn.com/image/fetch/$s_!HluS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png 1272w, https://substackcdn.com/image/fetch/$s_!HluS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HluS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png" width="1456" height="492" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:492,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:485907,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/207377867?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.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_!HluS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png 424w, https://substackcdn.com/image/fetch/$s_!HluS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png 848w, https://substackcdn.com/image/fetch/$s_!HluS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png 1272w, https://substackcdn.com/image/fetch/$s_!HluS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92af6a0e-40a3-4f3c-8e1a-ca2494fa6f08_3250x1099.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>2N7000: Microchip spec (left) vs reality (middle).</em></figcaption></figure></div><p>Although some batch-to-batch differences are to be expected, especially on the vertical axis, the two plots don&#8217;t line up the slightest. The scale-corrected diagram taken from the Fairchild / ON Semiconductor spec for the same transistor (right) aligns with my results nearly perfectly.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Panel meter calculator with floating point]]></title><description><![CDATA[Yes, there's a video at the end of the article.]]></description><link>https://blog.coredump.cx/p/panel-meter-calculator-with-floating</link><guid isPermaLink="false">https://blog.coredump.cx/p/panel-meter-calculator-with-floating</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Sun, 12 Jul 2026 20:10:46 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5b1bc88c-3592-4f34-a5b2-d16ec9125514_2000x1334.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Unusual clocks are a common idea for electronics DIY projects. The difficulty is never the timekeeping part; it&#8217;s making the clock look presentable. For my own take on the theme, you can check out the article I posted in May:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;4cc1036a-ed3c-4ee7-bdd9-237da279663c&quot;,&quot;caption&quot;:&quot;Back in 2019, I built a simple voltmeter clock:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;A nicer voltmeter clock&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-16T22:41:16.597Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a790a5d-5a16-46fc-91c7-d850bf3e48b3_2000x1120.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/a-nicer-voltmeter-clock&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:197309659,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:48,&quot;comment_count&quot;:32,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Clocks aside, some readers might recall that I&#8217;m a bit of a <a href="https://lcamtuf.substack.com/p/a-brief-history-of-counting-stuff">calculator nerd</a>. For a while, calculators lagged behind general-purpose computing because of the lack of a suitable display technology. Some of the early designs used ticker tape, cathode ray tubes, or incandescent lightbulb panels to display the result:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JIvn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JIvn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JIvn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JIvn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JIvn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JIvn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.jpeg" width="1456" height="901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:901,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:631212,&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://lcamtuf.substack.com/i/202962539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.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_!JIvn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JIvn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JIvn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JIvn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c3daa99-89b2-4165-a5b9-64b535034adf_2261x1399.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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Casio 14-A with a lightbulb-based display (1957).</em></figcaption></figure></div><p>A bit surprisingly, though, there were scarcely any calculators with electromechanical displays, so I decided to address this glitch.</p><p>I started with a 3 mm sheet of acrylic. I spray-painted the back side blue:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K-vS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K-vS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!K-vS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!K-vS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!K-vS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K-vS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:905065,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/202962539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.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_!K-vS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!K-vS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!K-vS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!K-vS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c9c8b29-7102-4a7d-af90-6e248d2b7f9f_2000x1334.jpeg 1456w" sizes="100vw"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Display panel, rattle-can fun.</em></figcaption></figure></div><p>I then selectively removed some paint with and cut a number of openings on a CNC mills:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7pwG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7pwG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7pwG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7pwG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7pwG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7pwG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:788963,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/202962539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.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_!7pwG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7pwG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7pwG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7pwG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4c46309-0d6c-4ffd-a05d-e87ad4f9c6fd_2000x1334.jpeg 1456w" sizes="100vw"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Display panel, machining.</em></figcaption></figure></div><p>The areas with lettering were then painted again to give these areas contrast and a cool three-dimensional look.</p><p>I constructed the display itself out of six generic &#8220;SO-45&#8221; panel voltmeters from Amazon, plus one vintage edgewise voltmeter scored on eBay. The meters are fitted with custom faces printed on adhesive paper (<a href="http://lcamtuf.coredump.cx/soft/embedded/meter_calc.pdf">template file</a>):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MBrj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MBrj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MBrj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MBrj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MBrj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MBrj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:634940,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/202962539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.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_!MBrj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MBrj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MBrj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MBrj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32c6b93-d5c5-48c0-840a-fac6d0d15fcc_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Display panel, meters with original faces.</em></figcaption></figure></div><p>Here&#8217;s the assembled panel, also embellished with two Dialight 656 series panel indicators (<a href="https://www.dialight.com/wp-content/uploads/2021/07/Dialight_PMI_catalog_April2021.pdf">catalog page</a>) that signal negative results and overflows:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fCbr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fCbr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fCbr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fCbr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fCbr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fCbr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:919763,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/202962539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.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_!fCbr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fCbr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fCbr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fCbr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d17f3d5-7be9-4ca3-b3d3-4704e1f8cfb6_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Panel close-up.</em></figcaption></figure></div><p>And yep, the edgewise meter in the middle is <em>obviously </em>used for floating point.</p><p>The panel was the easy part; next, I had to come up with an enclosure. Because the panel is fairly massive, I decided to use a non-standard keyboard layout: ten digits and a decimal point in a two rows on the left, and then five operator keys in a cluster to the right.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nsml!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nsml!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nsml!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nsml!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nsml!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nsml!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg" width="1456" height="860" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:860,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:448430,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/202962539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.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_!Nsml!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nsml!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nsml!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nsml!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b241ec-de94-4d7a-9c39-eb0ee503399e_2486x1468.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>A rough 3D sketch of the enclosure.</em></figcaption></figure></div><p>Electrically, the keypad is still a 4&#215;4 grid with four driven rows and four column sense lines.</p><p>I made the enclosure from thin maple lumber stock resawn in my workshop. The lettering and the recessed key matrix were once again machined on a CNC mill:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ysom!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ysom!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ysom!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ysom!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ysom!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ysom!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2001584,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/202962539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.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_!Ysom!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ysom!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ysom!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ysom!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a7be03b-56a3-4709-9535-c5017ab0d50d_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Behold, typography!</em></figcaption></figure></div><p>Here&#8217;s a photo of the glue-up:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jLfw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jLfw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jLfw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jLfw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jLfw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jLfw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2096136,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/202962539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.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_!jLfw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jLfw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jLfw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jLfw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24276410-51f8-4c80-b702-026b06846b9d_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>No such thing as too many clamps.</em></figcaption></figure></div><p>The keypad uses sixteen relatively fancy 18&#215;18 mm NKK JF series tactile switches (<a href="https://www.nkkswitches.com/pdf/JFnonilluminated.pdf">catalog here</a>). I made custom vinyl decals for each key.</p><p>Here&#8217;s the photo of the finished enclosure:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5g6i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5g6i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5g6i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5g6i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5g6i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5g6i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1063717,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/202962539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.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_!5g6i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5g6i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5g6i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5g6i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8495a57a-13fc-4227-bd09-bb251bac2990_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Calcumator 2000 in all its glory.</em></figcaption></figure></div><p>The final portion of the project is the control circuitry. Some folks egged me on to implement analog calculations, but that would make the calculator even less practical &#8212; and if you want to take that route, purely-mechanical designs are more fun. So, the brains of the operation is an 8-bit <a href="https://lcamtuf.substack.com/p/psa-if-youre-a-fan-of-atmega-try">AVR128DA28</a> MCU.</p><p>The chip is powered directly from a 5 V wall wart. It uses pulse-width modulation on seven digital lines (PD0-PD6) to drive the meters, a 4&#215;4 sense-drive grid (PA0-PA3 / PA4-PA7) to scan the keypad, and two lines (PC0, PC1) for the indicator lamps.</p><p>I&#8217;ll spare you the walkthrough of the software architecture because it&#8217;s fairly straightforward. About the most interesting part is the implementation of fixed-point (6+5 digit) arithmetic to avoid the accuracy issues related to floats. You can download the source <a href="https://lcamtuf.coredump.cx/soft/embedded/meter_calc.c">here</a>; it&#8217;s short and commented well.</p><p>As discussed earlier on this blog, <a href="https://lcamtuf.substack.com/p/ui-is-hell-four-function-calculators">calculator UI is hell</a> and the code makes several choices related to that. It allows repeated operations by pressing &#8220;+&#8221;, &#8220;&#215;&#8221;, or &#8220;&#247;&#8221; twice, but reserves &#8220;-&#8221; as a prefix for changing sign, except if pressed right after the equals key. It also interprets dual &#8220;=&#8221; as an instruction to clear calculator state because the keypad doesn&#8217;t have a dedicated &#8220;C&#8221; button.</p><p>And now, the moment you&#8217;ve all been waiting for. The clip shows the handling of fractions, negative numbers, and error conditions:</p><div id="vimeo-1209311182" class="vimeo-wrap" data-attrs="{&quot;videoId&quot;:&quot;1209311182&quot;,&quot;videoKey&quot;:&quot;c32321048f&quot;,&quot;belowTheFold&quot;:true}" data-component-name="VimeoToDOM"><div class="vimeo-inner"><iframe src="https://player.vimeo.com/video/1209311182?autoplay=0&amp;h=c32321048f" frameborder="0" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" loading="lazy"></iframe></div></div><p>That&#8217;s all.</p><h1 style="text-align: center;"><strong>&#128214;</strong></h1><p style="text-align: center;"><span>If you liked the article, you&#8217;ll enjoy </span><em><a href="https://lcamtuf.coredump.cx/electronics/">The Secret Life of Circuits</a></em><span>. It&#8217;s a richly illustrated, lucid introduction to electronics &#8212; from the physics of conduction to embedded system programming. It features 290+ color diagrams, 420+ pages of original content, and zero AI.</span></p><div><hr></div><p><em><span>I write about electronics, </span><a href="https://lcamtuf.substack.com/p/monkeys-typewriters-and-busy-beavers">the foundations of mathematics</a><span>, </span><a href="https://lcamtuf.substack.com/p/a-brief-history-of-counting-stuff">the history of technology</a><span>, and other geek interests. If you like it, please subscribe.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Cursed circuits #6: reverse avalanche oscillator]]></title><description><![CDATA[An oscillator so bad it's actually good. But seriously, it's still bad. But in a good way?]]></description><link>https://blog.coredump.cx/p/cursed-circuits-6-reverse-avalanche</link><guid isPermaLink="false">https://blog.coredump.cx/p/cursed-circuits-6-reverse-avalanche</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Thu, 09 Jul 2026 06:50:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cb26da97-483a-48a5-85e8-a4e780f04c9e_1000x739.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Last year, I published an article titled <em>&#8220;It&#8217;s hard to build an oscillator&#8221;</em>:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ea05f33c-786d-4ee4-9b43-aa999c8a6d4f&quot;,&quot;caption&quot;:&quot;There&#8217;s an old electronics joke that if you want to build an oscillator, you should try building an amplifier. One of the fundamental criteria for oscillation is the presence of signal gain; without it, any oscillation is bound to decay, just like a swing that&#8217;s no longer being pushed must eventually come to a stop.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;It's hard to build an oscillator&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-11-21T01:21:27.983Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d45de4a0-859e-48d5-aa6b-4cb46ac07da2_800x450.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/its-hard-to-build-an-oscillator&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:179419876,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:42,&quot;comment_count&quot;:11,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The title alluded to the fact that there&#8217;s no shortage of oscillator circuits on the internet, but many of them use unusual parts, need weird supply voltages, or don&#8217;t work well (if at all).</p><p>But sometimes, <em>bad</em> rises to an art form. Here&#8217;s probably the most puzzling bad oscillator you can assemble today with the parts you have at hand:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sRjx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sRjx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sRjx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sRjx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sRjx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sRjx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.jpeg" width="1456" height="1083" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1083,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:648997,&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://lcamtuf.substack.com/i/206003669?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.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_!sRjx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sRjx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sRjx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sRjx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f963d5f-ebc6-46e4-8324-983e69374080_2000x1487.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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Reverse avalanche oscillator. Other small NPN transistors should also work.</em></figcaption></figure></div><p>At first blush, <em>nothing here makes sense</em>. The transistor is upside down and its base terminal is not connected. And yet, the circuit works: hook it to a supply of about 14-20 V and watch the LED blink.</p><p>If you connect an oscilloscope to the terminals of the capacitor, you&#8217;ll see that the cap is repeatedly charging to about 10 V, then rapidly dumping some of the charge, all the way down to 9.1 V:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dckq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dckq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png 424w, https://substackcdn.com/image/fetch/$s_!Dckq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png 848w, https://substackcdn.com/image/fetch/$s_!Dckq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!Dckq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dckq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png" width="1456" height="777" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111859,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/206003669?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Dckq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png 424w, https://substackcdn.com/image/fetch/$s_!Dckq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png 848w, https://substackcdn.com/image/fetch/$s_!Dckq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png 1272w, https://substackcdn.com/image/fetch/$s_!Dckq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74991a47-2b02-469c-8c08-2f7a5e5c60b1_2346x1252.png 1456w" sizes="100vw"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Capacitor charge state with a 14 V supply (5.8 Hz oscillation). By author.</em></figcaption></figure></div><p>It&#8217;s no mystery that the capacitor must be charging via the 1 k&#937; resistor from the positive supply rail. It&#8217;s also clear that the energy is dumped into the LED via the upside-down NPN transistor. But why?</p><p>To answer this, you&#8217;ll need a basic grasp of semiconductor junctions. If you&#8217;re rusty on how they work, this earlier article should jog your memory:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;2c20db0c-ff24-474c-a586-c26559ff249a&quot;,&quot;caption&quot;:&quot;The invention of the electronic circuit changed the world. In just over a century, electronic devices upended almost every aspect of our lives &#8212; from transportation, to medicine, to the way we interact with each other and have fun.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How do transistors work, anyway?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2022-11-29T05:40:38.068Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!udi6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F31429a56-4db6-4dbe-ba88-eada59076b6f_1600x783.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/how-do-transistors-work-anyway&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:84068153,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:30,&quot;comment_count&quot;:8,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>As a quick recap, a conventional diode consists of a <em>p-n</em> junction formed from two distinct types of semiconducting materials. At the boundary between these materials forms a non-conductive region known as the depletion layer. In forward bias &#8212; when a small positive voltage is applied to the <em>p</em>-side in relation to the <em>n</em>-side &#8212; the depletion layer is disrupted and charge carriers can cross.</p><p>In reverse bias, in contrast, the depletion region remains notionally impassable. That said, if the applied reverse voltage is high enough, the electrostatic field grows so strong that it can accelerate charges with sufficient force to knock electrons in the depletion region into the conduction band in an avalanche-like effect. This makes the junction conductive again:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LPd6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LPd6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png 424w, https://substackcdn.com/image/fetch/$s_!LPd6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png 848w, https://substackcdn.com/image/fetch/$s_!LPd6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!LPd6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LPd6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73755,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/206003669?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.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_!LPd6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png 424w, https://substackcdn.com/image/fetch/$s_!LPd6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png 848w, https://substackcdn.com/image/fetch/$s_!LPd6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!LPd6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45820cd0-c8c7-4f71-9da9-a424e2553b4e_2346x1563.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Breakdown in a 1N4148 diode. By author.</em></figcaption></figure></div><p>An NPN transistor, as the name implies, is an <em>n-p-n </em>semiconductor structure that resembles two conjoined diodes. No matter whether we make the collector terminal or the emitter terminal more positive, one of these diodes is always reverse-biased; it follows that in the circuit we&#8217;re looking at, conduction should not occur.</p><p>At the same time, the reverse-biased junction that&#8217;s standing in the way is susceptible to avalanche breakdown if we supply a sufficiently high voltage. If the transistor is oriented the usual way &#8212; if the collector is more positive &#8212; the breakdown voltage for 2N2222 is around 50 V. But if we connect the component the other way around, the emitter-collector threshold is only a bit over 8 V. This is because the emitter area is doped more heavily (<em>n++)</em>. The depletion region formed in a heavily-doped semiconductor is thinner and easier to disrupt, so the emitter-side <em>n++-p</em> junction is an easier fight.</p><p>But that&#8217;s not all: this circuit won&#8217;t oscillate with an ordinary reverse-biased diode. There&#8217;s a point on the diode V-I curve where the charging current admitted through the 1 k&#937; resistor matches the discharge current flowing through the diode, so the circuit would simply settle at that voltage.</p><p>The essence of what makes our circuit different is the following V-I plot painstakingly obtained for a reverse-biased NPN transistor with a floating base:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rTID!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rTID!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png 424w, https://substackcdn.com/image/fetch/$s_!rTID!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png 848w, https://substackcdn.com/image/fetch/$s_!rTID!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!rTID!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rTID!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97730,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/206003669?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.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_!rTID!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png 424w, https://substackcdn.com/image/fetch/$s_!rTID!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png 848w, https://substackcdn.com/image/fetch/$s_!rTID!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png 1272w, https://substackcdn.com/image/fetch/$s_!rTID!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8946a9d-d173-428a-b3d7-ea60b40ead94_2346x1563.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>V-I plot for 2N2222 at I<sub>B</sub> = 0. Dashed line: what we&#8217;d expect of a diode.</em></figcaption></figure></div><p>The <em>n++-p-n</em> structure remains non-conductive until we reach about 8.2 V. But as soon as the &#8220;hump&#8221; is cleared, the conduction path begins to open up more in response to the current we&#8217;re pushing through. With 5 mA flowing through the junction, we need about 8 V to sustain the process; at 25 mA, we only need 7 V.</p><p>This curve rules out the possibility of a stable equilibrium for the circuit. The capacitor charges until it reaches the &#8220;hump&#8221;; at that point, some small discharge current starts flowing through the transistor, but the resistor, which lets through about 6 mA, still more than makes up for the loss. This decisively pushes the capacitor into vertical portion of the plot where the current suddenly skyrockets and stays high even as the voltage tapers off. But eventually, the capacitor voltage becomes too low to sustain the current, and because of the shape of the curve, that voltage is <em>even less able</em> to sustain lower currents. The transistor cuts off.</p><p>Some old-timers may recall that there&#8217;s another component that behaves the same way: the neon lamp. The lamp requires a higher starting (&#8220;striking&#8221;) voltage to ionize the gas, but once plasma is formed, you don&#8217;t need nearly as much. Neon lamps are uncommon today, but you can build a nearly-identical oscillator with one.</p><p>To be clear, everything about this oscillator is terrible! It requires a fairly high supply voltage, it&#8217;s inefficient, it requires a beefy capacitor, and it has awful duty cycle and frequency stability. But it&#8217;s a good reminder that semiconductors are complicated beasts: the circuit is using the part of the V-I curve that isn&#8217;t even shown in most books.</p><div><hr></div><p><em>Some other articles in the series:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;22fbf75b-5707-4f5a-874e-32a8da2a1262&quot;,&quot;caption&quot;:&quot;In the spring of 2023, when this Substack had only a handful of subscribers, I posted a primer on voltage adjustment in electronic circuits. The article opened with a brief discussion of linear regulators, and then promptly threw them under the bus in favor of more efficient charge pumps and inductor-based topologies.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Cursed circuits: charge pump voltage halver&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-12-02T00:00:03.420Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!dYf0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee204afd-e44f-4f24-ac6f-d387282f4a3f_2000x1038.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/cursed-circuits-charge-pump-voltage&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:180429933,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:27,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;65b9b881-78ae-4079-b93e-e7e95a16f8f0&quot;,&quot;caption&quot;:&quot;In the previous post on this Substack, we looked at charge pump circuits and the mildly cursed example of a capacitor-based voltage halver. I find these topologies interesting because they are very simple, yet they subvert the usual way of thinking about what a capacitors can or cannot do.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Cursed circuits #2: switched capacitor lowpass&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-12-04T00:00:03.419Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e0e7351-7d4f-4efd-be70-22f3ae8dc7fd_855x790.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/cursed-circuits-2-switched-capacitor&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:180619026,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:17,&quot;comment_count&quot;:1,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f5100056-b2f1-4cd3-b878-904594cad39f&quot;,&quot;caption&quot;:&quot;Electronic circuit theory is a frequent theme on this blog. As a part of this sorta-curriculum, I published a number of articles about operational amplifiers. I keep coming back to this topic for two reasons. First, I think these components are usually explained poorly, making them a major stumbling block for folks trying to learn the craft. Second, op-&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Cursed circuits #5: capacitance multiplier&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-05T19:50:40.473Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!qMWu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/cursed-circuits-capacitance-multiplier&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:205135165,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:21,&quot;comment_count&quot;:6,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><em><span>I write about electronics, </span><a href="https://lcamtuf.substack.com/p/monkeys-typewriters-and-busy-beavers">the foundations of mathematics</a><span>, </span><a href="https://lcamtuf.substack.com/p/a-brief-history-of-counting-stuff">the history of technology</a><span>, and other geek interests. If you like it, please subscribe.</span></em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Cursed circuits #5: capacitance multiplier]]></title><description><![CDATA[Capacitor vendors don't want you to know this! Save money on capacitors by spending more on other components]]></description><link>https://blog.coredump.cx/p/cursed-circuits-capacitance-multiplier</link><guid isPermaLink="false">https://blog.coredump.cx/p/cursed-circuits-capacitance-multiplier</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Sun, 05 Jul 2026 19:50:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qMWu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Electronic circuit theory is a <a href="https://lcamtuf.substack.com/p/electronics-curriculum">frequent theme</a> on this blog. As a part of this <em>sorta-</em>curriculum, I published a number of articles about operational amplifiers. I keep coming back to this topic for two reasons. First, I think these components are usually explained poorly, making them a major stumbling block for folks trying to learn the craft. Second, op-amps have gotten really good, inexpensive, and small, so I think they should be used more.</p><p>If these components are still a mystery to you, this article is probably not the best place to start; we&#8217;ll cover the very basics, but I recommend carving out some time to go over two other write-ups from 2023:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;342d1123-bd41-4560-9e12-7459224cfd73&quot;,&quot;caption&quot;:&quot;As a computer geek, I never had much trouble navigating the world of microcontrollers and logic gates. Analog circuitry proved to be a different animal. For a good while, I resigned myself to copying other people&#8217;s designs and going on wild-goose chases to procure long-obsolete parts that cropped up on the schematics.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The basics of signal amplification&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-02-07T04:19:37.878Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d90fe4d-706c-471d-b675-933c27cbcaa5_1600x900.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/the-basics-of-signal-amplification&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:100766694,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:30,&quot;comment_count&quot;:1,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;92e69080-0073-4044-9649-f356ffde4123&quot;,&quot;caption&quot;:&quot;In an earlier article on signal amplification, I discussed a couple of basic transistor amplifier circuits and then introduced op-amps as a better-behaved version of the same. This left one question unanswered: what&#8217;s inside an op-amp, anyway?&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;What's inside an op-amp?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-02-11T04:08:27.455Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9f1a08a-adcb-4f54-b52f-be66857c0cbe_600x429.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/whats-in-an-op-amp&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:101388540,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:10,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>I also cover op-amp theory (and a lot more!) in <em><a href="https://lcamtuf.coredump.cx/electronics/">The Secret Life of Circuits</a></em>, a lovingly-crafted book that&#8217;s available in early access and will be hitting the shelves in September 2026.</p><p>Today, I&#8217;d like to talk about a circuit that didn&#8217;t make the cut for the book. It&#8217;s not nearly as useful as a <a href="https://lcamtuf.substack.com/p/building-a-decent-microphone-amplifier">transimpedance amplifier</a>, an <a href="https://lcamtuf.substack.com/p/cursed-circuits-3-true-mathematics">integrator</a>, or a <a href="https://lcamtuf.substack.com/p/analog-filters-part-2-let-it-ring">Sallen-Key filter</a>, all of which get in-depth treatments from first principles. At the same time, it&#8217;s just too cool not to share.</p><h3>But first, a word from our sponsor</h3><p>I know that most readers don&#8217;t click links, so before we dive in, let&#8217;s recap what an op-amp does. If you have it pegged as some sort of a variable-gain amplifier that &#8220;reads&#8221; the value of a pair of external resistors to configure internal gain, it&#8217;s best to forget all that and start afresh.</p><p>An ideal op-amp does one thing and one thing only: it calculates the difference between the voltages on its two input pins (<em>Vin- </em>and <em>Vin+</em>), multiplies it by a humongous constant factor <em>(<span>A</span><sub>OL</sub></em>, typically 1,000,000 or more), and then outputs the resulting voltage in relation to the midpoint of the supply (<em>Vmid</em>). We can write this as:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;V_{out} = V_{mid} + (V_{in+} - V_{in-}) \\cdot A_{OL}&quot;,&quot;id&quot;:&quot;SBNPWIPCLP&quot;}" data-component-name="LatexBlockToDOM"></div><p>In practical terms, it means that if <em>Vin- </em>is noticably less than <em>Vin+</em>, the output voltage swings toward the positive supply of the chip; conversely, if <em>Vin-</em> exceeds <em>Vin+</em>, the output swings dives toward the negative rail. Intermediate output voltages are possible only in a very narrow, microvolt-range linear region of <em>Vin-</em> &#8776; <em>Vin+</em>.</p><p>The simplest op-amp circuit &#8212; and the only one we need today &#8212; is the voltage follower:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A-DN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A-DN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A-DN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A-DN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A-DN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A-DN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg" width="1456" height="685" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:685,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:339238,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205135165?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.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_!A-DN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A-DN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A-DN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A-DN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0b7688d-6566-4a86-bcbf-f375139c030b_1700x800.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>A simple voltage follower.</em></figcaption></figure></div><p>The circuit loops the output voltage onto one of its differential input pins. If the input signal on <em>Vin+</em> creeps higher in relation to <em>Vin-</em>, this makes the amplified differential signal more positive, forcing the output voltage to rise until the <em>Vin-</em> &#8776; <em>Vin+ </em>equilibrium is restored. In the same vein, if <em>Vin-</em> drops, the difference becomes more negative, sending the amplified signal toward a lower equilibrium point. In effect, the output voltage tracks the input signal with sub-millivolt accuracy.</p><p>To make sense of the next section, we need just two other tidbits of electronic theory. First, Ohm&#8217;s law: the current flowing through a resistor is proportional to the electromotive force (voltage) applied to its terminals, divided by the component&#8217;s value (resistance): I = V/R. Second, we need to know that a capacitor subjected a voltage across its terminals will admit (nearly-arbitrary) charging current until the pushback force created by the accumulated charge matches the external voltage. Higher component value (higher capacitance) means that proportionately more electrons can be shuffled around in response to the same electromotive force; in other words, higher <em>C</em> means more current over time.</p><p><em>If the above paragraph sounds confusing, you should review the article on <a href="https://lcamtuf.substack.com/p/primer-core-concepts-in-electronic">core concepts in electronic circuits</a> before venturing forth.</em></p><h3>A capacitor, with a twist</h3><p>This brings us to our guest of honor: the capacitance multiplier. It&#8217;s the kind of a circuit that usually doesn&#8217;t make sense at first glance because we can&#8217;t pattern-match it to anything we know:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qMWu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qMWu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qMWu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qMWu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qMWu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qMWu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg" width="1456" height="923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:923,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:679771,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205135165?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.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_!qMWu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qMWu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qMWu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qMWu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd86dcd7c-184a-497d-8b97-32936641ad40_2050x1300.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>A basic capacitance multiplier.</em></figcaption></figure></div><p>To unravel the mystery, it suffices to break it down into two mostly-separate building blocks. Section A is just an op-amp configured as a voltage follower. No matter what else is going in the circuit, it takes some voltage from section B and then mirrors that signal on its output leg.</p><p>Section B is a capacitor that&#8217;s charging through a resistor; although the voltage across the capacitor&#8217;s terminals (<em>Vcap</em>) will change over time, let&#8217;s model this in a freeze-frame view. In this setting, the op-amp is mirroring the capacitor&#8217;s current charge state; the voltage on the right terminal of <em>R2</em> is almost exactly the same as <em>Vcap</em>.</p><p>Moving onto <em>R1, </em>we can conclude from Ohm&#8217;s law that the current flowing through the resistor depends only on the component&#8217;s value and the momentary voltage across its terminals. No matter what else is going in the circuit, the upper terminal of <em>R1</em> is at the same voltage as the input leg (<em>Vsignal</em>) and the lower terminal is always at <em>Vcap. </em>Therefore, the resistor current is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;I_{R1} = \\frac{V_{signal} - V_{cap}}{R1}&quot;,&quot;id&quot;:&quot;HZUFFIFATQ&quot;}" data-component-name="LatexBlockToDOM"></div><p>For clarity, let&#8217;s shorten the <em>Vsignal - Vcap </em>expression to <em>v. </em>This gives us:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;I_{R1} = \\frac{v}{R1}&quot;,&quot;id&quot;:&quot;LUAIWDILDS&quot;}" data-component-name="LatexBlockToDOM"></div><p>Next, let&#8217;s have a look at the other resistor, <em>R2</em>. The component&#8217;s left terminal is at <em>Vsignal</em>; the right terminal must be at <em>Vcap </em>by the operation of the voltage follower. This means that the current flowing through the resistor is just:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;I_{R2} = \\frac{v}{R2}&quot;,&quot;id&quot;:&quot;VBQDDGCQKP&quot;}" data-component-name="LatexBlockToDOM"></div><p>In essence, we have two resistors in parallel between the input leg and <em>Vcap</em>.</p><p>Naturally, the currents through the resistors are flowing in the same direction. If <em>Vsignal</em> &gt; <em>Vcap</em>, the current flows in via the input terminal. In the inverse case, it feeds back into the signal supply. In both cases, the total input current is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;I_{total} = I_{R1} + I_{R2} = \\frac{v}{R1} + \\frac{v}{R2} = \\frac{(R2 + R1) \\cdot v}{R1 \\cdot R2} \n&quot;,&quot;id&quot;:&quot;YWAJLRBXTS&quot;}" data-component-name="LatexBlockToDOM"></div><p>Next, let&#8217;s calculate the ratio of <em>Itotal </em>to the current actually diverted to the capacitor via <em>R1</em>. We&#8217;ll label this ratio <em>n:</em></p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;n = \\frac{I_{total}}{I_{R1}} = \\frac{(R2 + R1) \\cdot \\cancel{v}}{\\cancel{R1} \\cdot R2} \\cdot \\frac{\\cancel{R1}}{\\cancel{v}} = 1 + \\frac{R1}{R2}&quot;,&quot;id&quot;:&quot;IKWAZLWTMT&quot;}" data-component-name="LatexBlockToDOM"></div><p>This tells us that the capacitor is charging <em>n </em>times more slowly than we would expect looking at the amount of charge moved. Another way to look at it is that the situation is indistinguishable from charging a proportionately larger capacitance &#8212; <em>n &#183; </em>C &#8212; through a pair of parallel resistors <em>R1</em> and R2. If R1 &#8811; R2, this can be approximated as a model of <em>n &#183; </em>C charging via <em>R2</em>.</p><p>And that&#8217;s it: you can turn a cheap 1 &#181;F capacitor into a fancy 1 mF by tossing in an op-amp and two resistors with carefully-chosen values. The circuit doesn&#8217;t emulate increased energy storage &#8212; you can&#8217;t use this for backup power &#8212; but in applications such as signal filtering or timekeeping, it&#8217;s notionally a pretty neat trick. You can use components that are smaller, cost less, and have better specs.</p><p>In practice, it&#8217;s is less useful than it used to be. Capacitor technology has improved dramatically over the past 20-30 years. And if you truly need an ultra low-frequency filter or a long-interval timer, chances are, the same idea can be realized with greater flexibility and fidelity with a digital chip.</p><p>Still &#8212; it&#8217;s neat, right?</p><h3>Postscript: trading places</h3><p>As a voluntary homework assignment, consider the following variant of the earlier design:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m7a3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m7a3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg 424w, https://substackcdn.com/image/fetch/$s_!m7a3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg 848w, https://substackcdn.com/image/fetch/$s_!m7a3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!m7a3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m7a3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg" width="1456" height="923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:923,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:679693,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/205135165?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.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_!m7a3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg 424w, https://substackcdn.com/image/fetch/$s_!m7a3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg 848w, https://substackcdn.com/image/fetch/$s_!m7a3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!m7a3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1c6141-cde1-405a-9933-389dec73d0d8_2050x1300.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Umm&#8230; a&#8230; sorta-inverse capacitance multiplier?</em></figcaption></figure></div><p>The only change is that <em>C</em> and <em>R1</em> are swapped. Your mission, should you accept it, is to figure out what this circuit does.</p><p>If you&#8217;re stumped, note that for a capacitor to charge, there must be a matching motion of charges on <em>both</em> terminals &#8212; i.e., some current must flow &#8220;through&#8221; the component. In the circuit, if the capacitor is initially discharged and the input voltage suddenly jumps to 5 V, the charging process is hindered by <em>R1</em>, so the voltage across the capacitor stays near 0 V; the electromotive force simply couples across the dielectric gap, putting <em>Vin+</em> at 5 V - 0 V. It&#8217;s only after a while that a sufficient number of electrons can make its way through R1, nudging <em>Vcap</em> toward 5 V and <em>Vin+</em> toward 0 V.</p><h1 style="text-align: center;"><strong>&#128214;</strong></h1><p style="text-align: center;"><span>If you liked the article, you&#8217;ll enjoy </span><em><a href="https://lcamtuf.coredump.cx/electronics/">The Secret Life of Circuits</a></em><span>. It&#8217;s a richly illustrated, lucid introduction to electronics &#8212; from the physics of conduction to embedded system programming. It features 290+ color diagrams, 420+ pages of original content, and zero AI.</span></p><div><hr></div><p><em>Some other articles in this series:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ac0f75b8-8df8-4a5f-beb1-7c86e0dd4b71&quot;,&quot;caption&quot;:&quot;In the spring of 2023, when this Substack had only a handful of subscribers, I posted a primer on voltage adjustment in electronic circuits. The article opened with a brief discussion of linear regulators, and then promptly threw them under the bus in favor of more efficient charge pumps and inductor-based topologies.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Cursed circuits: charge pump voltage halver&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-12-02T00:00:03.420Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!dYf0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee204afd-e44f-4f24-ac6f-d387282f4a3f_2000x1038.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/cursed-circuits-charge-pump-voltage&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:180429933,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:26,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;be42438b-7c0a-4499-9421-60b3f70cc54f&quot;,&quot;caption&quot;:&quot;In the previous post on this Substack, we looked at charge pump circuits and the mildly cursed example of a capacitor-based voltage halver. I find these topologies interesting because they are very simple, yet they subvert the usual way of thinking about what a capacitors can or cannot do.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Cursed circuits #2: switched capacitor lowpass&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-12-04T00:00:03.419Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e0e7351-7d4f-4efd-be70-22f3ae8dc7fd_855x790.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/cursed-circuits-2-switched-capacitor&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:180619026,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:16,&quot;comment_count&quot;:1,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9e0992cc-a8fb-40f9-8b5c-1ae617809001&quot;,&quot;caption&quot;:&quot;Welcome to another installment of Cursed Circuits. My goal for the series is to highlight a small collection of common yet mind-bending circuits that must&#8217;ve taken a stroke of genius to invent, but that are usually presented on the internet without explaining how or why they work.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Cursed circuits #4: PLL frequency multiplier&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-12-26T17:47:58.312Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!nqfK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ec45e92-4453-4adc-9873-ffd4ae9ed319_2813x1875.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/cursed-circuits-4-pll-frequency-multiplier&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:182613637,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:22,&quot;comment_count&quot;:1,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0da43405-43fe-4e64-9f1f-45df79340c67&quot;,&quot;caption&quot;:&quot;Last year, I published an article titled &#8220;It&#8217;s hard to build an oscillator&#8221;:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Cursed circuits #6: reverse avalanche oscillator&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-09T06:50:21.621Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb26da97-483a-48a5-85e8-a4e780f04c9e_1000x739.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/cursed-circuits-6-reverse-avalanche&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:206003669,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><em>I write about electronics, <a href="https://lcamtuf.substack.com/p/monkeys-typewriters-and-busy-beavers">the foundations of mathematics</a>, <a href="https://lcamtuf.substack.com/p/a-brief-history-of-counting-stuff">the history of technology</a>, and other geek interests. If you like it, please subscribe.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[All logic, no bite]]></title><description><![CDATA[This radio station gets many requests for treatises on formal logic.]]></description><link>https://blog.coredump.cx/p/all-logic-no-bite</link><guid isPermaLink="false">https://blog.coredump.cx/p/all-logic-no-bite</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Sat, 27 Jun 2026 05:44:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a34aa01b-2087-4789-a79b-7c489dd2243f_1026x1039.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today, I&#8217;d like to talk about logic &#8212; and before I do, I should probably explain why. But before we get to that, a definition may be in order: in a nutshell, logic is a system for drawing conclusions from premises (&#8220;facts&#8221;).</p><p>Formal logic usually isn&#8217;t taught in high school; as far as I know, a rigorous treatment of it isn&#8217;t even required for most computer science degrees. The concept is familiar to most mathematicians and to a handful of software engineers who dabble in esoteric programming languages. As for everyone else, we might know about &#8220;digital logic&#8221;, a simple algebra of binary numbers that involves operators such as AND, NOT, and OR. What&#8217;s less clear is how we get from zeroes and ones to some semblance of human reasoning.</p><h3>A mathematician&#8217;s lament</h3><p>For mathematicians, the most common role of formal logic is to provide a more precise vocabulary for proofs. To illustrate some of the ambiguities of everyday speech, consider the following statement in the form of <em>&#8220;if A then B&#8221;:</em></p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\require{color}\n\\text{&#8220;If }\\underbrace{\\text{you did your chores}\\vphantom{|}}_{A}\\text{, }\\underbrace{\\text{you can play Minecraft}\\vphantom{|}}_{B}\\text{.&#8221;}&quot;,&quot;id&quot;:&quot;XEBROPHZBE&quot;}" data-component-name="LatexBlockToDOM"></div><p>It&#8217;s something a parent could say to a child. In that use, the phrasing clearly implies its own inverse, <em>&#8220;if not A then not B&#8221;:</em></p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{&#9989; &#8220;If you }\\textbf{didn't}\\text{ do chores, you }\\textbf{can't}\\text{ play Minecraft.\&quot;}&quot;,&quot;id&quot;:&quot;XMFSZASAZP&quot;}" data-component-name="LatexBlockToDOM"></div><p>The statement also seems to imply the converse (<em>&#8220;if B then A&#8221;</em>), although that form needs a small edit for clarity:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{&#9989; &#8220;If you can play Minecraft, } \\underline{it \\ means} \\text{ you did chores.\&quot;}&quot;,&quot;id&quot;:&quot;FEFPUOWPXA&quot;}" data-component-name="LatexBlockToDOM"></div><p>As for the contraposition <em>(&#8220;if not B then not A&#8221;</em>), its status is up for debate. It follows from the strict reading of the original sentence. That said, in real life, it would be tacitly understood that gaming privileges can be lost for serious violations of unrelated household rules:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{&#10067; \&quot;If you }\\textbf{can't}\\text{ play, }\\underline{it \\ means}\\text{ you }{\\textbf{didn't}}\\text{ do chores.\&quot;}&quot;,&quot;id&quot;:&quot;MPKJARNNYL&quot;}" data-component-name="LatexBlockToDOM"></div><p>Do all other <em>&#8220;if A then B&#8221;</em> statements play by the same rules? Nope:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{&#8220;If }\\underbrace{\\text{my cat is hungry}\\vphantom{|}}_{A}\\text{, }\\underbrace{\\text{it meows}\\vphantom{|}}_{B}\\text{.&#8221;}&quot;,&quot;id&quot;:&quot;DLUAELLMVT&quot;}" data-component-name="LatexBlockToDOM"></div><p>This time around, the phrasing doesn&#8217;t imply the inverse (<em>&#8220;if not A then not B&#8221;</em>). The speaker isn&#8217;t suggesting that Mr. Mittens meows only when it wants to eat. Therefore, we can&#8217;t infer the following:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\textrm{&#10060; }{\\text{&#8220;If }{\\text{my cat }\\textbf{isn't }\\text{hungry, it}\\textbf{ doesn't}\\text{ meow.\&quot;}}}&quot;,&quot;id&quot;:&quot;EZSKSNLUEY&quot;}" data-component-name="LatexBlockToDOM"></div><p>On the flip side, if the original assertion is true &#8212; if the cat always begs for food &#8212; the contraposition (<em>&#8220;if not B then not A&#8221;</em>) follows in a straightforward way:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{&#9989; &#8220;If my cat }\\textbf{doesn't }\\text{meow, it }\\textbf{isn't }\\text{hungry.\&quot;} &quot;,&quot;id&quot;:&quot;OJLSXAYPNK&quot;}" data-component-name="LatexBlockToDOM"></div><p>Our problems with cat logic don&#8217;t end here. Let&#8217;s consider the following:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{&#8220;If }\\underbrace{\\text{grass is green}\\vphantom{|}}_{A}\\text{ then }\\underbrace{\\text{kittens are cute}\\vphantom{|}}_{B}\\text{.&#8221;}&quot;,&quot;id&quot;:&quot;YNWPNBSMAW&quot;}" data-component-name="LatexBlockToDOM"></div><p>Both A and B are true, but most people would peg the statement as false &#8212; or at least <em>wrong</em>. The truths coincide, but we reject the argument because the antecedent (<em>A</em>) and the consequent (<em>B</em>) are not connected in any obvious way.</p><p>But what if I told you that every Sunday morning, Bob wakes up with a headache?</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{&#8220;If }\\underbrace{\\text{it's Sunday morning}\\vphantom{|}}_{A}\\text{ then }\\underbrace{\\text{Bob has a headache}\\vphantom{|}}_{B}\\text{.&#8221;}&quot;,&quot;id&quot;:&quot;SCMXWJIXQC&quot;}" data-component-name="LatexBlockToDOM"></div><p>As before, I don&#8217;t know what&#8217;s the connection. Maybe there isn&#8217;t one; maybe the timing of Bob&#8217;s migraines is just a cosmic coincidence. Yet, in this context, a coincidence is good enough to accept the claim.</p><p>Another subjective issue crops up with the following statement:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{&#8220;If }\\underbrace{\\text{pigs can fly}\\vphantom{|}}_{A}\\text{ then }\\underbrace{\\text{pumpkins are square}\\vphantom{|}}_{B}\\text{.&#8221;}&quot;,&quot;id&quot;:&quot;JMEHEKGEQW&quot;}" data-component-name="LatexBlockToDOM"></div><p>It feels wrong, but there&#8217;s nothing we can disprove: the consequent is false, but so is the antecedent it&#8217;s gated on. We just don&#8217;t like that the sentence limits our imagination: perhaps if pigs could fly, all pumpkins would be donut-shaped? But if the task at hand is to work from true premises toward logical conclusions, and <em>A</em> is not a true premise, why the heck are we trying to form opinions about <em>B</em>? It&#8217;s a universe that doesn&#8217;t exist; we&#8217;re not given the axioms that govern it.</p><p>Let&#8217;s twist that knife a bit more: what do we make of the following pair of sentences?</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{c}\n\\text{&#8220;If pigs can fly then pumpkins are square.\&quot;} \\\\\n\\text{&#8220;If pigs can fly then pumpkins are }\\textbf{not}\\text{ square.\&quot;} \\\\\n\\end{array}&quot;,&quot;id&quot;:&quot;POANBKFUNY&quot;}" data-component-name="LatexBlockToDOM"></div><p>An intuitive interpretation is that they can&#8217;t be both true at the same time. A more analytical view is that only the consequents can&#8217;t. In other words, maybe this is just telling us that pigs can&#8217;t fly?</p><p>It&#8217;s not just the <em>if-then </em>connective that&#8217;s cursed; the A and B atoms can cause problems too. In our examples, they appear to be declarations of facts &#8212; but can we proclaim anything we want? If I say <em>&#8220;this statement is false</em>&#8221;, is that a truth or a falsehood? Neither? Both?&#8230;</p><p>These semantic gotchas are great if you&#8217;re devising brain-teasers for nerds; they&#8217;re not helpful if you&#8217;re writing down a mathematical argument. This is why mathematicians rely on formal logic to define some predictable ground rules. The classic approach is pretty close to common sense, but it resolves the ambiguities by making several ad hoc calls. In particular:</p><ol><li><p>A statement in the form <em>&#8220;if A then B&#8221; (&#8220;A </em>&#8658; B&#8221;<em>):</em></p><ol><li><p><strong>&#8230;does not imply its inverse</strong> (<em>&#8220;not A </em>&#8658;<em> not B&#8221;</em>). A cat that always meows when hungry isn&#8217;t required to stay quiet once fed.</p></li><li><p><strong>&#8230;doesn&#8217;t imply the converse</strong> (<em>&#8220;B </em>&#8658; <em>A&#8221;</em>). By extension, if you hear Mr. Mittens meowing, it&#8217;s not a given that he wants a meal.</p></li><li><p><strong>&#8230;implies its contraposition</strong> <em>(&#8220;not B &#8658;</em> <em>not A&#8221;</em>). No meows is proof positive that the cat isn&#8217;t looking for food.</p></li></ol></li><li><p><strong>Lack of relevance is not fatal.</strong> A true proposition implies any other true proposition. In <em>&#8220;if A then B&#8221;</em>, it&#8217;s enough that <em>A</em> is true in tandem with <em>B, so </em>there&#8217;s nothing false about <em>&#8220;if grass is green then kittens are cute&#8221;.</em></p></li><li><p><strong>Counter-to-fact conditionals are true.</strong> A false antecedent can imply whatever it wants: &#8220;<em>if pigs can fly then pumpkins are square&#8221;</em>. The sentence is true, with no actual consequences for pumpkin shape.</p></li><li><p><strong>You gotta take sides. </strong>The system only deals with statements that can bear a single, binary truth value. If it can&#8217;t, it&#8217;s not a valid statement.</p></li></ol><p>Logic arguments expressed with words are easy to grasp, so to keep the riff-raff out, mathematicians often resort to symbolic notation. For example, the idea that sets <em>A</em> and <em>B</em> are equal to each other if and only if they contain the same elements can be more enigmatically spelled out as:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\forall A, B \\bigl[A = B \\iff \\forall x ( x \\in A \\iff x \\in B) \\bigr]&quot;,&quot;id&quot;:&quot;DIGQNWMIGN&quot;}" data-component-name="LatexBlockToDOM"></div><p>My initial plan for this article was to dive into this symbology next. But before we do, it may be useful to show how formal logic acts not only as a convenient language for proofs, but also as the <em>source</em> of math.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MbAZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MbAZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MbAZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MbAZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MbAZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MbAZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg" width="1456" height="422" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:422,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:190543,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/190993502?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.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_!MbAZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MbAZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MbAZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MbAZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5adf0c72-b321-4136-868b-f734181a8dda_2000x580.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><h3>A real pain</h3><p>Arithmetic is the oldest branch of mathematics; it&#8217;s also notable for having resisted attempts at formalization for a pretty long time. As it turns out, it&#8217;s tricky to explain numbers and basic arithmetic operations as anything other than &#8220;the things you know&#8221;. I don&#8217;t know why an apple plus an apple gives me two apples; I guess it&#8217;s just how apples are. It seems to work with fingers too.</p><p>Regular readers may recall two earlier articles about some of the successful efforts to construct the arithmetic of natural numbers and reals from scratch. In the end, we took the existence of an empty set as a given and then defined numbers and operations through the repeated application of several fairly intuitive rules:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;68cfc56c-4fef-4d6f-88ad-92d7aaaaa4fa&quot;,&quot;caption&quot;:&quot;Today, mathematics is regarded as a supremely abstract science. On forums such as Stack Exchange, trained mathematicians sneer at newcomers who ask for intuitive explanations of esoteric mathematical concepts. Indeed, persistent attempts to relate the foundations of math to reality have become the calling card of online cranks.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How has mathematics gotten so abstract?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-09-27T23:31:52.521Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0cbc2ef-a44e-4110-b29a-db8ab4934ad2_1920x1080.avif&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/how-has-mathematics-gotten-so-abstract&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:174503112,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:42,&quot;comment_count&quot;:20,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;982e8171-3295-43e7-b362-eda013691e0e&quot;,&quot;caption&quot;:&quot;A while ago, I posted an article about the 19th and early 20th century quest to derive mathematics from the principles of formal logic. We kicked off with Peano arithmetic, which built natural numbers from two ad-hoc constructs: an element representing zero and an abstract &#8220;successor&#8221; function&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Unreal numbers&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-15T20:49:15.343Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba9619af-251d-4cdb-be26-83f8d14f9e8e_500x500.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/unreal-numbers&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187588205,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:24,&quot;comment_count&quot;:12,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The beauty of this method is that it gave us more than what we already knew. For example, it seamlessly generalized to operations on infinite numbers, with mildly surprising results.</p><p>Unfortunately, in math textbooks, intuitive explanations aren&#8217;t the rule. Many of the discipline&#8217;s foundational axioms stem from investigations of the natural world, but we prefer to teach the craft as if it owed nothing to reality. In the modern academic practice, the question of where a particular idea came from, or whether an axiom is <em>ontologically correct</em>, is considered vacuous and out of scope. For the most part, you&#8217;re just handed a rulebook to play someone else&#8217;s game.</p><p>In the remainder of the section, I&#8217;ll try to kill two birds with one stone. First, we&#8217;ll look at yet another method of constructing the reals to develop intuition that will pay off once we get to digital logic (i.e., Boolean algebra). Second, on the topic of my mini-rant about mathematical education, we&#8217;ll note that the use of logic doesn&#8217;t necessarily make one&#8217;s arguments logical.</p><h4>Reals, act I</h4><p>The usual axiomatic approach to defining reals is to give students a collection of roughly fourteen ad-hoc rules for manipulating the elements of an otherwise opaque set we call &#8220;&#8477;&#8221;. The axiomatic method doesn&#8217;t care what the set contains or what it <em>means</em>; the method doesn&#8217;t even posit the existence of any canonical version of &#8477;. We simply assert the existence of some structures &#8212; i.e., collections of objects and object relations &#8212; that, by the will of the gods of mathematical abstraction, obey the rules we want these structures to obey.</p><p>The rules are usually divided into three parts: field axioms, order axioms, and the axiom of completeness. Field axioms are easy; they pretend to be abstract, but tacitly capture natural laws. They assert the existence of a mystery operation called &#8220;addition&#8221; (symbol: &#8220;+&#8221;). The operation takes two operands in the reals and produces a result that&#8217;s also in &#8477;. Further, the operation is associative and commutative; that is, for any <em>a, b, </em>and<em> c </em>in &#8477;, it obeys the following equivalencies:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{c}\na + (b + c) = (a + b) + c \\\\\na + b = b + a\n\\end{array}&quot;,&quot;id&quot;:&quot;HVYHFWVMUU&quot;}" data-component-name="LatexBlockToDOM"></div><p>The same ruleset is given for multiplication (&#8220;&#183;&#8221;):</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{c}\na \\cdot (b \\cdot c) = (a \\cdot b) \\cdot c \\\\\na \\cdot b = b \\cdot a\n\\end{array}&quot;,&quot;id&quot;:&quot;IAJDJXLBDN&quot;}" data-component-name="LatexBlockToDOM"></div><p>So far, we&#8217;ve said nothing about what these two operators actually do. Turns out that we don&#8217;t have to say much; first, to distinguish between them, the axioms assert the existence of additive and multiplicative identities. By that, we mean a pair of elements in &#8477;, conventionally labeled &#8220;0&#8221; and &#8220;1&#8221;, such that for any <em>a </em>&#8712; &#8477;, the following equalities always hold true:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{c}\na + 0 = a \\\\\na \\cdot 1 = a\n\\end{array}&quot;,&quot;id&quot;:&quot;EVCUZWKBZV&quot;}" data-component-name="LatexBlockToDOM"></div><p>Again, the approach doesn&#8217;t concern itself with the &#8220;why&#8221; or the &#8220;how&#8221;; all we&#8217;re saying is that in a system that obeys the axioms, there must be a pair of elements for which the equalities hold. And if these elements exist, we might as well label them in a familiar way.</p><p>Next, we posit that for any <em>a </em>taken from &#8477;, there exists an additive inverse (&#8220;<em>-a</em>&#8221;); and that for any <em>a </em>&#8800; 0, we can also find a multiplicative inverse (&#8220;<em>1/a</em>&#8221;). Because we don&#8217;t have subtraction or division defined just yet, we treat these inverses as atomic symbols that obey the following rules:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{c}\na + (-a) = 0 \\\\\na \\cdot (1/a) = 1\n\\end{array}&quot;,&quot;id&quot;:&quot;YZFCFSEKLS&quot;}" data-component-name="LatexBlockToDOM"></div><p>The final field axiom is the distributive property that ties the two operators together: <em>a &#183; </em>(<em>b</em> + <em>c</em>)<em> = a &#183; b + a &#183; c.</em></p><p>The neat surprise is that these rules are already good enough to perform calculations in &#8477;. By combining the axioms, we can easily prove that there can be only one additive identity (&#8220;0&#8221;), one multiplicative identity (&#8220;1&#8221;), and that &#8220;0&#8221; and &#8220;1&#8221; can&#8217;t be the same. Next, because addition always produces a result in &#8477;, we conclude that there is a real associated with the value of 1 + 1. If we label this real &#8220;2&#8221;, we can for example show the following:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;a \\cdot 2 = a \\cdot \\underbrace{(1 + 1)}_{\\substack{\\text{by our} \\\\ \\text{definition} \\\\ \\text{of \&quot;2\&quot;}}} = \\underbrace{a \\cdot 1 + a \\cdot 1\\vphantom{)}}_{\\substack{\\text{expanded in line} \\\\ \\text{with the distributive} \\\\ \\text{property}}} = \\underbrace{a + a\\vphantom{)}}_{\\substack{\\text{eliminating} \\\\ \\text{multiplicative} \\\\ \\text{identities}}}&quot;,&quot;id&quot;:&quot;VUNRODOFGI&quot;}" data-component-name="LatexBlockToDOM"></div><p>Alas, field axioms do not provide complete &#8220;driving directions&#8221; to the reals. There are many different algebraic fields; for instance, the exact same axioms are also satisfied by <a href="https://lcamtuf.substack.com/p/a-20-minute-intro-to-complex-numbers">complex numbers</a>. Heck, we can even make the rules work for certain types of finite sets, giving us modulo arithmetic systems that have applications in cryptography, but that would be frowned upon on a tax return. The smallest possible finite field needs just two elements: &#8220;0&#8221; and &#8220;1&#8221;, with the result of 1 + 1 simply wrapping around.</p><p>To get closer to where we want to be, we continue with order axioms. We begin by proposing that for any <em>a </em>and <em>b</em> chosen from &#8477;, exactly one of three possibilities must hold: <em>a</em> &lt; <em>b</em>, <em>a</em> = <em>b</em>, or <em>b</em> &lt; <em>a</em>. Further, to tie the behavior of the less-than operator to existing algebraic rules, we give the following axioms for any <em>a, b, c </em>&#8712; &#8477;<em>:</em></p><ol><li><p>If <em>a &lt; b </em>and <em>b &lt; c, </em>then <em>a &lt; c,</em></p></li><li><p>If <em>a &lt; b </em>then <em>a + c &lt; b + c,</em></p></li><li><p>If <em>a &lt; b </em>and 0 &lt; <em>c</em>, then <em>a &#183; c</em> &lt; <em>b &#183; c</em>.</p></li></ol><p>The structures that obey this criteria are infinite fields in which all elements are ordered in the usual arithmetic sense.</p><p>If you made this far, you might be wondering why I grumbled about how we teach math. Sure, we had a lot of axioms dumped at our doorstep with little justification, but they&#8217;re all saying reasonable things?&#8230;</p><h4>Reals, act II: what the cat dragged in</h4><p>The answer is that we&#8217;re not done yet: the rules we have in place are also valid for rational numbers (&#8474;). To get to a ruleset that unambiguously describes reals, we need to toss in the axiom of completeness.</p><p>To explain the usual phrasing of the axiom, we must first talk about subsets and their bounds. If we have the set of real numbers, it stands to reason that we can take a subset of it. For example, we can construct subset A that consists of every real less than or equal to 2. Or, we may conjure subset B that contains all numbers divisible by 42.</p><p>A subset of an ordered set set may be <em>bounded above</em>; this means that in the parent set, we can find an element that&#8217;s greater than or equal to every element included in the subset. Any number that meets this criteria qualifies as an upper bound; for A, it can be any value &#8805; 2. In contrast, for subset B, there&#8217;s no bound in &#8477;; for any real we choose, we can produce a counterexample that&#8217;s the next multiple of 42.</p><p>A subset that&#8217;s bounded above may also have a <em>least</em> upper bound. That&#8217;s to say, among the values that qualify as upper bounds, there might be some definite &#8220;minimal&#8221; choice. For subset A, this is 2. Any value less than that can&#8217;t work because some elements of A would end up above the selected threshold.</p><p>With these preliminaries out of the way, the completeness axiom says that any non-empty subset of &#8477; that is bounded above in the reals must also have a least upper bound in the reals.</p><p>That&#8217;s it. And &#8212; <em>what just happened</em>? We went through all this effort that say something that feels borderline meaningless?&#8230; At the same time, the rule is essential. For one, &#8474; doesn&#8217;t obey it, for reasons that are left as an exercise for the willing reader (hint: <em><span data-color="#d0e0e3" style="color: rgb(208, 224, 227);">q</span></em><span data-color="#d0e0e3" style="color: rgb(208, 224, 227);">&#178; &lt; 2</span>). Just as important, we need the axiom to prove the Archimedean property. This property says that if we take any two positive reals such that <em>a &lt; b</em>,  there&#8217;s some <em>n </em>&#8712;<em> &#8469; </em>that makes <em>n &#183; a &gt; b</em>.</p><p>The inequality-flipping mechanic of the Archimedean property couldn&#8217;t possibly work if we could pick an infinite number for <em>b</em>, or an infinitesimal (very roughly: &#8220;1/&#8734;&#8221;) for <em>a</em>. This means that the property implies the absence of infinities or infinitesimals in reals. This is critical to a good chunk of higher math; for example, it allows us to justify limits in calculus.</p><p>Had we attempted the set-theoretic approach outlined in the earlier posts, the Archimedean property would arise as a natural consequence of the construction of reals via Dedekind cuts. But to prove it in the axiomatic method, we need the mildly perplexing completeness axiom. This invites but never answers questions such as <em>&#8220;where did that idea come from?&#8221; </em>and &#8220;<em>could we get better-behaved algebra if we phrased this axiom in a different way?</em>&#8221;<em>.</em></p><p>In any case, let&#8217;s prove the Archimedean property, the axiomatic way. We choose an arbitrary positive pair <em>a &lt; b</em> and then construct a set <em>C</em> that consists of all the natural-number multiples of <em>a</em>:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;C = \\{ 0a, \\; 1a, \\; 2a, \\; 3a, \\; 4a, \\; 5a, \\; \\ldots \\}&quot;,&quot;id&quot;:&quot;IEJBGOBDAB&quot;}" data-component-name="LatexBlockToDOM"></div><p>When structured this way, C is obviously a subset of &#8477;.</p><p>Next, assume that the Archimedean property does <em>not</em> hold: that there can be some <em>a &lt; b</em> pair such that every multiple of <em>a </em>&#8212; i.e., every element of <em>C</em> &#8212; is still less than <em>b.</em></p><p>If so, we&#8217;re effectively asserting that <em>b </em>is an upper bound of <em>C</em>. It&#8217;s not necessarily the set&#8217;s <em>least</em> upper bound, but from the completeness axiom, the existence of the former automatically implies the existence of the latter. If it exists, we can designate this unspecified least upper bound as <em>s.</em></p><p>In our argument, <em>a</em> is positive, so if we calculate <em>s - a</em>, we know that the result will be less than <em>s.</em> As a reminder, <em>s </em>is the smallest real that&#8217;s still greater or equal than all the elements of <em>C</em>; if we pick any number less than that, there must be at least one member of C<em> </em>that exceeds it. </p><p>In other words, there must be some element of <em>C</em> that&#8217;s greater than <em>s - a</em>:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\underbrace{n \\cdot a}_{\\substack{n\\text{-th} \\\\\\text{multiple} \\\\ \\text{in set C}}} > s - a&quot;,&quot;id&quot;:&quot;MNNXOFTGHV&quot;}" data-component-name="LatexBlockToDOM"></div><p>We can rewrite this inequality by grouping all the <em>a</em>-containing terms on the left. We obtain:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;(n + 1) \\cdot a > s&quot;,&quot;id&quot;:&quot;LRUYSGMVYW&quot;}" data-component-name="LatexBlockToDOM"></div><p>But hold on &#8212; the new expression on the left is just <em>a </em>multiplied by a natural number, <em>n </em>+ 1. This should make it a member of <em>C</em>. At the same time, <em>s</em> is the least upper bound of <em>C</em>, so it can&#8217;t possibly be less than any existing element of that set. Oops?</p><p>We assumed that the Archimedean property doesn&#8217;t hold and we ended up with a contradiction. In standard two-valued logic, if a property can&#8217;t be false, it must be true &#8212; so that&#8217;s our proof.</p><p>For the few readers who are still here, I hope that this lengthy exposition underscored two interesting points. First, it would appear that given a sufficiently capable system of logic, we can build an algebra without needing apples, fingers, or any other <em>a priori</em> notion of numbers or arithmetic operators; if aliens from outer space understand logic, we can show them how to calculate 2 + 2 = 4. And second: we like to teach math in confusing ways.</p><h3>Digital logic</h3><p>Up until this point, we talked about logic as a way to formalize mathematical thinking, but most readers of this blog are probably more familiar with the logic of digital circuits. In computing, the term &#8220;logic&#8221; may seem suspect: the field leans on profoundly-sounding keywords such as &#8220;true&#8221; and &#8220;false&#8221;, but by the end of the day, integrated chips are just manipulating voltages.</p><p>Because of the tenuous connection to epistemology, it may be less confusing to describe the system as a somewhat unusual algebra over a two-symbol alphabet (&#8220;0&#8221; and &#8220;1&#8221;). Instead of addition and multiplication, this algebra is commonly equipped with unary negation (NOT, sometimes shortened to &#172; or <code>!</code>), along with two-parameter conjunction (AND, &#8743;, <code>&amp;&amp;</code>) and disjunction (OR, &#8744;, <code>||</code>).</p><p>In this system, each operand can take just one of two values, so we can spell out the behavior of the operators in a pretty explicit, visual way:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{| c | c |}\n\\hline\n\\mathbfit{a} &amp; \\textbf{NOT }\\mathbfit{a} \\\\\n\\hline\n0 &amp; 1 \\\\\n1 &amp; 0 \\\\\n\\hline\n\\end{array}&quot;,&quot;id&quot;:&quot;WVMUPHXGNT&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{| c | c | c | c |}\n\\hline\n\\mathbfit{a} &amp; \\mathbfit{b} &amp; \\mathbfit{a}\\textbf{ OR }\\mathbfit{b} &amp; \\mathbfit{a}\\textbf{ AND }\\mathbfit{b} \\\\\n\\hline\n0 &amp; 0 &amp; 0 &amp; 0 \\\\\n0 &amp; 1 &amp; 1 &amp; 0 \\\\\n1 &amp; 0 &amp; 1 &amp; 0 \\\\\n1 &amp; 1 &amp; 1 &amp; 1 \\\\\n\\hline\n\\end{array}&quot;,&quot;id&quot;:&quot;BYSRKGWPMM&quot;}" data-component-name="LatexBlockToDOM"></div><p>In a nutshell, negation flips the input value. OR yields &#8220;1&#8221; if one of the input values is non-zero, and produces &#8220;0&#8221; otherwise. Finally, AND is true only when both parameters are &#8220;1&#8221;.</p><p>The use of different operators means that the resulting algebra is not a field under the axioms discussed earlier in the article, although a bit surprisingly, it comes close. Grab a piece of paper and see for yourself: AND meets all the axioms for multiplication when all you can do is 0 &#183; 0, 0 &#183; 1, 1 &#183; 0, and 1 &#183; 1. On the other hand, OR can&#8217;t imitate addition because it lacks an additive inverse. The term of the trade for this not-quite-a-field is a <em>semiring</em>.</p><p>From the three canonical operators we started with, we can derive more. For example, we can construct exclusive-or (XOR, &#8853;), which returns &#8220;1&#8221; if and <em>only </em>if one of the parameters is &#8220;1&#8221;. This can be done the following way:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;a \\text{ XOR } b := (a \\text{ OR } b) \\text{ AND NOT } (a \\text{ AND } b)&quot;,&quot;id&quot;:&quot;BUJYZFZLXH&quot;}" data-component-name="LatexBlockToDOM"></div><p>In electronics, these transformations are implemented using circuits known as <em>logic gates</em>. This is the second time I mention &#8220;logic&#8221; in this section, so I should note that in some contexts, the behavior of these gates <em>can</em> be understood as inference over facts. For instance, a bank might hold a belief that a person who has a stable job and no history of late payments is creditworthy. They can enshrine this axiom in the architecture of the circuit, encode facts about your financials as input voltage levels, and render decisions according to the following Boolean scheme:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;is\\_creditworthy = is\\_employed \\text{ AND NOT } has\\_delinquencies&quot;,&quot;id&quot;:&quot;ECESCUTFLK&quot;}" data-component-name="LatexBlockToDOM"></div><p>Computer-style Boolean algebra has a finite domain, so it&#8217;s not powerful enough to embed the algebra of natural numbers. Nevertheless, it can deal with practical calculations. For example, if we represent a pair of numbers in base-2, addition looks the following way:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{alignat}{2}\n0_2 &amp;+ 0_2 &amp;= 00_2 \\\\\n0_2 &amp;+ 1_2 &amp;= 01_2 \\\\\n1_2 &amp;+ 0_2 &amp;= 01_2 \\\\\n1_2 &amp;+ 1_2 &amp;= 10_2 \n\\end{alignat}&quot;,&quot;id&quot;:&quot;CJMOWEWCPE&quot;}" data-component-name="LatexBlockToDOM"></div><p>The behavior is analogous to base-10, except overflow and carry to the next column happens sooner &#8212; after we cross &#8220;1&#8221;, not &#8220;9&#8221;. If we split out the output digits, the following logic circuit will produce the same result:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{align}\nleft\\_digit &amp;= a \\text{ AND } b \\\\\nright\\_digit &amp;= a \\text{ XOR } b \n\\end{align}&quot;,&quot;id&quot;:&quot;ISJGPSWFEI&quot;}" data-component-name="LatexBlockToDOM"></div><p>All this once again hints at curious parallels between logic systems and algebras; it&#8217;s why we can reason with numbers and prove mathematical theorems with voltages.</p><p>Before we wrap up, it&#8217;s worth noting that in abstract mathematics, Boolean algebras are often looked at through different lens. To illustrate, let&#8217;s start with a trio of hopefully familiar set-theoretic operators that are applied to subsets of some set <em>B.</em> We need union:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\{ \\; a, b, c \\; \\} \\cup \\{ \\; b, c, d \\; \\} = \\{ \\; a, b, c, d \\; \\}&quot;,&quot;id&quot;:&quot;ZQQXJTBGKO&quot;}" data-component-name="LatexBlockToDOM"></div><p>&#8230;intersection:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\{ \\; a, b, c \\; \\} \\cap \\{ \\; b, c, d \\; \\} = \\{ \\; b, c \\; \\}&quot;,&quot;id&quot;:&quot;QYKJZVUEMK&quot;}" data-component-name="LatexBlockToDOM"></div><p>&#8230;and complementation in relation to <em>B</em>, which gives all elements of <em>B </em>that don&#8217;t appear in the complemented set. In other words, for <em>B</em> = <em>{ a, b, c, d }</em> and <em>X</em> = <em>{ b }</em>, the result is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;X\\,' = \\{ \\;  a, c, d \\; \\}\n&quot;,&quot;id&quot;:&quot;CEJOINWPSF&quot;}" data-component-name="LatexBlockToDOM"></div><p>This sounds completely unrelated to binary logic as we know it, but consider the special case of a single-element set <em>B = { a }.</em> This set has two trivial subsets: an empty set <em>{ }</em> and a set containing <em>a. </em>Let&#8217;s label these subsets &#8220;0&#8221; and &#8220;1&#8221;:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{align}\n0 &amp;:= \\{ \\; \\} \\\\\n1 &amp;:= \\{ \\; a \\; \\}\n\\end{align}&quot;,&quot;id&quot;:&quot;DIPCWXNVDM&quot;}" data-component-name="LatexBlockToDOM"></div><p>In this scenario, if we calculate 0 &#8746; 0, we get an empty set, or zero. All the remaining unions &#8212; 0 &#8746; 1, 1 &#8746; 0, and 1 &#8746; 1 &#8212; will produce <em>{ a }</em>, aka 1. This is functionally equivalent to OR.</p><p>In the same vein, intersections 0 &#8745; 0, 0 &#8745; 1, and 1 &#8745; 0 produce empty sets because they share no elements in common; meanwhile, the intersection of 1 and 1 is <em>{ a }</em>, so this operator is the same as AND. Finally, the complementation operator turns <em>{ a }</em> into <em>{ }</em> and <em>{ }</em> into <em>{ a }</em> &#8212; the same as NOT.</p><p>This has two noteworthy consequences. First, it ties logic to set theory &#8212; in the end, algebra, logic, and set theory are just parts of the same, incestuous family. It&#8217;s one more reason why we shouldn&#8217;t be particularly surprised that statistics mixed with matrix multiplication and executed on a video card can reason too.</p><p>Second, the trick lets us generalize Boolean algebra to multi-element sets, and thus, to more than two values; it&#8217;s something that mathematicians like to do, whatever that would mean in logic terms. Heck, we can even build countably infinite Boolean algebras if we&#8217;re in the mood.</p><h3>Propositional logic</h3><p>Propositional logic is what you get if you ask the mathematicians to leave the room; it&#8217;s a more philosophical model of reasoning that arises when there&#8217;s no one to say <em>&#8220;what you have here is a semiring&#8221;</em> or <em>&#8220;I bet I could turn that into a set&#8221;</em>. It is functionally similar to Boolean algebra, but it&#8217;s expressed in a more humanlike way.</p><p>As suggested in the introduction, propositional logic deals only with declarative statements that can be assigned a single, binary truth value. These statements are known as <em>propositions</em>. Beyond this requirement, the system doesn&#8217;t interrogate the <em>meaning</em> of atomic statements; it allows the existence of opaque propositions such as <em>&#8220;I&#8217;m riding a bicycle</em>&#8221; without knowing anything about bicycles or the rest of the material universe. A sentence is true simply if we say so at the start. Because the inherent meaning of atoms doesn&#8217;t matter, propositions are often substituted with nondescript variables, such as <em>p</em> or <em>q</em>.</p><p>A sentence in propositional logic can be atomic, as shown above, or it can be constructed by nesting other propositions that are bridged by logical connectives. The most important connective is <em>material implication</em>, written as <em>p </em>&#8658;<em> q</em>, <em>p &#8594; q</em>, or <em>p </em>&#8835; <em>q. </em>The connective can be interpreted as <em>&#8220;p implies q&#8221; </em>or &#8220;<em>if p then q&#8221;</em>.</p><p>As discussed earlier, in standard formal logic, an expression in the form of <em>&#8220;if p then q&#8221;</em>, when taken as a whole, is false only if <em>p</em> is true while <em>q</em> is not. It&#8217;s not invalidated by the inverse or the converse: <em>q </em>can be true when <em>p </em>isn&#8217;t. Taking this into account, we can spell out the following truth table for this connective:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{| c | c | c |}\n\\hline\n\\mathbfit{p} &amp; \\mathbfit{q} &amp;  \\mathbfit{p \\Rightarrow q} \\\\\n\\hline\nfalse &amp; false &amp; \\color{steelblue}{true} \\\\\n\\hline\nfalse &amp; true &amp; \\color{steelblue}{true} \\\\\n\\hline\ntrue &amp; false &amp; \\color{red}{false} \\\\\n\\hline\ntrue &amp; true &amp; \\color{steelblue}{true} \\\\\n\\hline\n\\end{array}&quot;,&quot;id&quot;:&quot;YSYCIDHDMQ&quot;}" data-component-name="LatexBlockToDOM"></div><p>In a mind-bending tie-in to computer logic, the truth table for material implication is the same as what we&#8217;d write for <em>out</em> = (NOT <em>a</em>) OR <em>b</em>. In other words, the concept of implication feels semantically special<em> </em>to humans, but it&#8217;s just an algebraic operation we can assemble from seemingly unrelated parts.</p><p>The table shown above tells us what value we assign to <em>&#8220;if p then q&#8221;</em> as a proposition when <em>p </em>and <em>q </em>are known. This is distinct from what the same statement, if taken as a true premise, tells us about the possible values of the underlying variables:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\require{color}\n\\begin{array}{| c | c |}\n\\hline\n\\mathbfit{p} &amp; \\mathbfit{p \\Rightarrow q} \\textbf{ says} \\\\\n\\hline\nfalse &amp; \\color{gray}{\\text{(nothing)}} \\\\\n\\hline\ntrue &amp; q \\text { is true!} \\\\\n\\hline\n\\end{array}\n\\quad\n\\begin{array}{| c | c |}\n\\hline\n\\mathbfit{q} &amp; \\mathbfit{p \\Rightarrow q} \\textbf{ says} \\\\\n\\hline\nfalse &amp; p \\text{ is false!} \\\\\n\\hline\ntrue &amp; \\color{gray}{\\text{(nothing)}} \\\\\n\\hline\n\\end{array}&quot;,&quot;id&quot;:&quot;ISOPRJHFRP&quot;}" data-component-name="LatexBlockToDOM"></div><p>Another important connective is <em>material biconditional</em>, aka equivalence. It can be written as <em>p</em> &#8660; <em>q, p &#8596; q,</em> or <em>p &#8801; q</em>. It means &#8220;<em>p if and only if q&#8221;</em> and in contrast to the earlier example, it does imply the inverse and the converse; as a proposition, it&#8217;s deemed false if it can be shown that the truth values of <em>p</em> and <em>q</em> differ:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{| c | c | c |}\n\\hline\n\\mathbfit{p} &amp; \\mathbfit{q} &amp;  \\mathbfit{p \\Leftrightarrow q} \\\\\n\\hline\nfalse &amp; false &amp; \\color{steelblue}{true} \\\\\n\\hline\nfalse &amp; true &amp; \\color{red}{false} \\\\\n\\hline\ntrue &amp; false &amp; \\color{red}{false} \\\\\n\\hline\ntrue &amp; true &amp; \\color{steelblue}{true} \\\\\n\\hline\n\\end{array}&quot;,&quot;id&quot;:&quot;JSCIDEKGQO&quot;}" data-component-name="LatexBlockToDOM"></div><p>In Boolean logic terms, this is the same as the negation of the exclusive-or gate: <em>out = </em>NOT (<em>a</em> XOR <em>b</em>).</p><p>Compared to the material conditional, this statement &#8212; if taken as a true premise &#8212; has more to say about <em>p </em>and <em>q</em>:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{| c | c |}\n\\hline\n\\mathbfit{p} &amp; \\mathbfit{p \\Leftrightarrow q} \\textbf{ says} \\\\\n\\hline\nfalse &amp; q \\text{ is false!} \\\\\n\\hline\ntrue &amp; q \\text { is true!} \\\\\n\\hline\n\\end{array}\n\\quad\n\\begin{array}{| c | c |}\n\\hline\n\\mathbfit{q} &amp; \\mathbfit{p \\Leftrightarrow q} \\textbf{ says} \\\\\n\\hline\nfalse &amp; p \\text{ is false!} \\\\\n\\hline\ntrue &amp; p \\text { is true!} \\\\\n\\hline\n\\end{array}&quot;,&quot;id&quot;:&quot;TSBOOOJQAW&quot;}" data-component-name="LatexBlockToDOM"></div><p>The remaining common logical connectives mimic the standard choice of Boolean operators; they include negation (&#172;, ~), conjunction (aka AND, &#8743;), and disjunction (aka OR, &#8744;). Further, constants representing &#8220;true&#8221; and &#8220;false&#8221; may be cheekily written as &#8868; and &#8869;.</p><p>In some texts, you may also encounter meta-logic annotations. &#8220;<em>M</em> &#8872; <em>A</em>&#8221; is an assertion that whatever&#8217;s on the left <em>semantically</em> <em>entails</em> what&#8217;s on the right &#8212; i.e., that there is no possibility for <em>A</em> to be false in any reality that obeys the conditions spelled out by <em>M</em>. Because the circumstances given by <em>M</em> are sufficient for <em>A</em> to hold, we can say that <em>M</em> is<em> </em>a <em>model of A</em> or that it <em>satisfies</em> A<em>.</em></p><p>A single proposition can have multiple models, and we can slice and dice them however we want. For example, this is fine:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{align}\n\\text{&#8220;It's a sunny day.\&quot;} &amp;\\vDash \\text{&#8220;Bob likes ice cream.\&quot;} \\\\\n\\text{&#8220;Aliens conquered Earth.\&quot;} &amp;\\vDash \\text{&#8220;Bob likes ice cream.\&quot;}\n\\end{align}\n&quot;,&quot;id&quot;:&quot;BELXMXEVXU&quot;}" data-component-name="LatexBlockToDOM"></div><p>The two models may be describing incompatible versions of reality; even though Bob&#8217;s love of ice cream is evidently true in both, we might still want to analyze them separately. We&#8217;ll come back to this in a while.</p><p>More prosaically, we can use the symbol to explain the intended operation of formal logic by providing minimal models for certain outcomes; for example, we can say that when <em>p </em>and <em>q </em>are true, so is the conjunction <em>p </em>&#8743; <em>q:</em></p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;p, q \\vDash (p \\land q)&quot;,&quot;id&quot;:&quot;LQUNDBUVLV&quot;}" data-component-name="LatexBlockToDOM"></div><p>There&#8217;s also a closely related meta-symbol, <em>syntactic entailment</em> (&#8220;<em>M </em>&#8866;<em> A&#8221;). </em>This asserts (without showing) that under our chosen system of reasoning, <em>A </em>can be procedurally deduced from a specific set of premises, <em>M</em>. The difference between semantic consequence and syntactic provability matters in some contexts, but for the logic systems discussed in this article, they&#8217;re functionally the same.</p><p>Arguments in propositional logic are typically divided into premises and conclusions. To illustrate, let&#8217;s assume we&#8217;re given the following axiom consisting of two atomic sentences and an <em>if-then</em> connective:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{If }\\underbrace{\\text{the weather's nice}\\vphantom{|}}_{p} \\text{ then } \\underbrace{\\text{Bob is wearing shorts}\\vphantom{|}}_{q}.&quot;,&quot;id&quot;:&quot;ORIDKTFPAU&quot;}" data-component-name="LatexBlockToDOM"></div><p>Further, let&#8217;s say that we&#8217;re given an atomic statement &#8220;<em>the weather&#8217;s nice&#8221; &#8212; </em>or, in more abstract terms, we&#8217;re told that <em>p </em>is true. These are our premises. Given that pair of starting points, we can conclude that Bob is wearing shorts &#8212; i.e., that <em>q</em> is true. Some authors may write the premises on top and conclusions on the bottom of a &#8220;fraction&#8221;, giving you notation like this:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\dfrac{p \\Rightarrow q, \\; \\, p}{q}\n&quot;,&quot;id&quot;:&quot;VEJDLTPDXO&quot;}" data-component-name="LatexBlockToDOM"></div><p>Again, propositional logic largely obeys common sense, but it resolves a couple of semantic gotchas in a specific way. Most of the wonkiness surrounds material implication, but we also require every sentence <em>p </em>to have a binary logic value: <em>p </em>&#8744; &#172;<em>p</em>. Further, the system is 100% contradiction-intolerant: at all times, we need &#172;(<em>p </em>&#8743; &#172;<em>p)</em>.</p><p>Although it might seem uninteresting, that last detail is quite important. If we ignore the requirement and take <em>p </em>&#8743; &#172;<em>p </em>as a true premise, we can prove literally anything, an effect known as the <em>principle of explosion</em>. The fact that a single contradiction can break an entire system of logic is part of the reason why <a href="https://lcamtuf.substack.com/p/monkeys-typewriters-and-busy-beavers">no one likes Kurt G&#246;del very much</a>.</p><p>To explain how the &#8220;explosion&#8221; happens, note that the conjunction (AND) operator in the premise is true only if both operands are true. This means that from the starting premise, we can infer both <em>p </em>and &#172;<em>p </em>as separate truths. Next, we introduce a sentence <em>p </em>&#8744; <em>q,</em> where <em>q </em>is the spurious statement we want to prove (e.g., &#8220;2 + 2 = 5&#8221;). We can do this because this entire sentence is true regardless of the truth of <em>q</em>; the disjunction operator (OR) is satisfied if <em>p </em>is true, and we know that&#8217;s the case.</p><p>So far, so good. But we also know that &#172;<em>p </em>is true, which makes its negation (&#172;&#172;<em>p) </em>false; double negation obviously cancels out, so <em>p </em>is evidently false. We&#8217;ve previously used valid, formal reasoning to establish that <em>p </em>&#8744; <em>q </em>is true. That fact is settled, but we&#8217;re now adding the knowledge that <em>p </em>is false. The only way for the already-proved disjunction to hold is if <em>q = &#8220;2 + 2 = 5&#8221; </em>is true.</p><h3>First-order logic</h3><p>Although propositional logic is quite useful, it doesn&#8217;t allow generalizations over objects. For example, it doesn&#8217;t let us formulate a rule that <em>&#8220;&lt;x&gt; is a child of &lt;y&gt;</em>&#8221; is equivalent to <em>&#8220;&lt;y&gt; is a parent of &lt;x&gt;</em>&#8221;, and then apply the rule to the premise <em>&#8220;Anne is a child of Sue&#8221; </em>to infer that <em>&#8220;Sue is a parent of Anne&#8221;. </em>Family relations aside, this makes it impossible to express many desirable mathematical axioms. For instance, we can&#8217;t symbolically assert that for any <em>a</em> in &#8477;, there exists an additive inverse &#8220;-<em>a</em>&#8221; such that <em>a + (-a)</em> = 0.</p><p>To address this problem, first-order logic extends propositional logic with <em>predicates &#8212; </em>a function-style notation that allows us to specify properties that attach to objects, e.g.:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;Child(Anne, Sue)&quot;,&quot;id&quot;:&quot;LYSDZPSGDO&quot;}" data-component-name="LatexBlockToDOM"></div><p>None of the individual words in this statement have any independent logic meaning; they&#8217;re just labels, no different from &#8220;xyzzy&#8221;, &#8220;glarp&#8221;, or &#8220;quux&#8221;<em>.</em> That said, the combination of a predicate symbol (&#8220;Child&#8221;) with a pair of objects (&#8220;Anne&#8221;, &#8220;Sue&#8221;) produces a well-formed proposition with a logic value. We can interpret this proposition as saying that Anne is Sue&#8217;s child.</p><p>We may use this predicate-object notation to say something like:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;Child(Anne, Sue) \\land Child(Sue, Bob) \\Rightarrow Grandchild(Anne, Bob)&quot;,&quot;id&quot;:&quot;STAEVWOZSA&quot;}" data-component-name="LatexBlockToDOM"></div><p>Or, in plain English: if Anne is Sue&#8217;s child and Sue is Bob&#8217;s child, then Anne is a grandchild of Bob. Note that we use &#8658; and not &#8660; because in real life, this implication is one-directional. Anne could be Bob&#8217;s grandchild even if Sue isn&#8217;t the common link.</p><p>To take this approach to the next level, we introduce variables and quantifiers. The universal quantifier (&#8704;) selects one or more free variables and then applies the subsequent statement to every object in a context-dependent &#8220;universe of discourse&#8221;. For example, if we&#8217;re talking about humans, we can generalize the earlier grandchild rule as:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\forall a, b, c \\bigl[ Child(a, b) \\land Child(b, c) \\Rightarrow Grandchild(a, c) \\bigr]&quot;,&quot;id&quot;:&quot;JVGNNLWMTI&quot;}" data-component-name="LatexBlockToDOM"></div><p>This is saying that for any <em>a</em>, <em>b</em>, and <em>c</em>, if <em>a </em>is <em>b</em>&#8217;s child and <em>b</em> is <em>c</em>&#8217;s child, then <em>a </em>is a grandchild of <em>c.</em></p><p>In addition to the universal quantifier, first-order logic also allows existential quantification (&#8707;), which means <em>&#8220;there exists&#8221;</em> &#8212; i.e., there&#8217;s at least one object for which the following formula is true. To illustrate, let&#8217;s assert that there exists a human who is Sue&#8217;s child:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\exists a \\bigl[ Child(a, Sue) ]&quot;,&quot;id&quot;:&quot;HTKHYVRDPG&quot;}" data-component-name="LatexBlockToDOM"></div><p>We can also say that this child, whoever they might be, has a ponytail:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\exists a \\bigl[ Child(a, Sue) \\land HasPonytail(a) ]&quot;,&quot;id&quot;:&quot;YJKRLMBLAM&quot;}" data-component-name="LatexBlockToDOM"></div><p>First-order logic doesn&#8217;t know anything about sets, but it&#8217;s often used in the context of set theory. When you see <em>x </em>&#8712; <em>A</em> in a logic expression, it can be understood as a shorthand for a predicate that defines (or inquiries about) an opaque relation between two objects. We can also write it as &#8712;<em>(x, A)</em>, <em>IsAnElementOf(x, A),</em> or <em>IsGlarp(x, A)</em>; as far the logic system is concerned, the talk of &#8220;sets&#8221; just human gobbledygook.</p><p>In addition to predicates, first-order logic also allows functions. The notation is similar to predicates, so the distinction is contextual. You can think of functions as external maps that translate one or more input objects into another object. An example would be <em>sum(x, y), x + y, </em>or the set-theoretic union operator, <em>A </em>&#8746;<em> B</em>; all of these mean <em>&#8220;replace this with the object that is the result of the relevant operation under the chosen algebra&#8221;</em>. Note that a function can&#8217;t appear as a standalone proposition because it emits a bare object (e.g., &#8220;Sue&#8221; or &#8220;42&#8221;); such an object has no logic meaning.</p><p>First-order logic also has an equality operator, which amounts to a proposition that the compared objects are indistinguishable. The symbol has a couple of common-sense semantics attached to it; for one, any object is always equal to itself (<em>k = k</em>). There&#8217;s also the substitution property: if two objects are equal, they can be swapped at will. That is, if <em>k = l</em>, then any formula written with <em>k</em> is equivalent to the same formula written with <em>l.</em></p><p>The &#8220;=&#8221; operator can be seen in action in the Zermelo-Fraenkel set theory (ZFC) equality axiom. This is the axiom we opened with earlier in the article:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\forall A, B \\bigl[ A = B \\iff \\forall x ( x \\in A \\iff x \\in B )\\bigr]&quot;,&quot;id&quot;:&quot;CJAKNXSGGG&quot;}" data-component-name="LatexBlockToDOM"></div><p>The notation says that for any set <em>A</em> and <em>B</em>, <em>A</em> is equal to <em>B </em>only if every object <em>x</em> taken from the universe of discourse is either simultaneously present in or absent from both sets. Or, in a more existential sense: under ZFC, sets are distinguished by their elements and nothing else.</p><p>It bears repeating that descriptions similar to the one above take liberties to express the meaning behind the syntax. As far as first-order logic is concerned, there&#8217;s no such thing as sets and there&#8217;s no concept of an object being contained in another. Fundamentally, <em>A</em> and <em>B</em> are just &#8220;things&#8221;, while <em>x</em> &#8712;<em> A </em>is a shorthand for an inherently meaningless predicate &#8712;<em>(x, A). </em>If we want set-like behaviors, we need to write axioms that explain what the predicate does (the ZFC example above is a start). If we choose different axioms, we may instead get a universe of familial relations or something else entirely.</p><p>To be extra obtuse, Wikipedia and some other sources give the earlier set equality axiom as a one-way implication:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\forall A \\forall B \\bigl[ \\forall x(x \\in A \\iff x \\in B) \\implies A = B \\bigr]&quot;,&quot;id&quot;:&quot;OTUMEAIWNV&quot;}" data-component-name="LatexBlockToDOM"></div><p>This notation is saying that if sets have the same elements, they&#8217;re the same. But because &#8658; doesn&#8217;t imply the inverse, the phrasing leaves open the possibility that some sets could be equal even if the antecedent is false (i.e., they have different elements). What gives?</p><p>Well, it comes down to the aforementioned semantics of the equality operator; the substitution property says that if <em>k = l</em>, any relation involving symbol <em>k</em> is equivalent to the same relation written with symbol <em>l. </em>This makes sense: if one object can&#8217;t be a stand-in for the other, it doesn&#8217;t sound like they&#8217;re truly equal.</p><p>If we take <em>A = B </em>to be true, this substitution must be possible for the &#8220;is an element of&#8221; relation (&#8712;) too. For any <em>x</em>, there should be no functional difference between <em>x </em>&#8712; <em>A</em> and <em>x </em>&#8712; <em>B. </em>That&#8217;s to say, <em>x</em> can be element of <em>A </em>if and only if it also appears in B. Based on this analysis, we can write:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;A = B \\implies \\forall x (x \\in A \\iff x \\in B)&quot;,&quot;id&quot;:&quot;NQVYRZXILW&quot;}" data-component-name="LatexBlockToDOM"></div><p>In effect, one half of the needed equivalence is provided by the ZFC axiom, and the other half (in the opposite direction) arises from the built-in rules of first-order logic.</p><p>This is also a good demonstration that when mathematicians can choose between two equivalent ways of expressing an idea, they will often choose the option that feels clever but is harder to read.</p><h3>Is this all there is?</h3><p>Before we wrap up, let&#8217;s ponder if first-order logic can be considered &#8220;good enough&#8221; &#8212; that is, if its language is expressive enough to describe the mathematical structures we care about.</p><p>The answer is &#8220;sort of&#8221;. To explain, we can circle back to the set-theoretic construction of natural numbers (ordinals), as outlined in an <a href="https://lcamtuf.substack.com/p/how-has-mathematics-gotten-so-abstract">earlier article</a>. We start with an empty set and label it &#8220;0&#8221;. Next, we iteratively construct the ordinal 1 as { 0 }, 2 as { 0, 1 }, 3 as { 0, 1, 2 }, and so forth. The successor operation to create <em>n</em> + 1 from <em>n</em> is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;S(n) := n \\cup \\{n\\}&quot;,&quot;id&quot;:&quot;GUQLFBIBUG&quot;}" data-component-name="LatexBlockToDOM"></div><p>Although this set-nesting scheme is a bit contrived, it has a nice properties. First, it doesn&#8217;t require any objects other than what the set theory already gives us for free. Second, the essential ordering relation <em>&#8220;a </em>&#8804; <em>b&#8221;</em> becomes equivalent to &#8220;<em>a </em>&#8712; <em>b</em>&#8221;, making it very easy to express.</p><p>In Zermelo-Fraenkel set theory, this underlying structure appears to be enshrined in the axiom of infinity. The axiom, written in the language of first-order logic, asserts the existence of an infinite set such that an empty set is a member of it, and that for any <em>x</em>, if <em>x</em> is in the set, then so is the object produced by the successor function S(&#8230;):</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\exists A \\bigl[ \\{ \\, \\} \\in A &#8743; \\forall x (x \\in A \\implies S(x) \\in A ) \\bigr]\n\n&quot;,&quot;id&quot;:&quot;NAPVMXXAGK&quot;}" data-component-name="LatexBlockToDOM"></div><p>More precisely, the rule says that there exists an opaque object we arbitrarily call &#8220;{ }&#8221; that has an opaque relation &#8220;&#8712;&#8221; to another mystery object, A. That&#8217;s our concept of a zero. If zero has this relation to A, then so does S(0) &#8212; an object resembling 1. If 1 satisfies the criteria, then so must S(1), aka 2. Rinse, repeat. At first blush, this looks a lot like the set of natural numbers, &#8469;.</p><p>But&#8230; is it? Other ambiguities aside, the axiom only specifies which objects <em>must</em> be included, not which ones <em>cannot</em>. For example, it doesn&#8217;t prohibit a distinct element labeled &#128055;. The element can&#8217;t be one of the S-successors of the empty set &#8212; all of these are accounted for in the &#8220;main&#8221; sequence of what we want to be naturals &#8212; but it could be a part of a separate, unmoored succession chain that stretches to infinity. The underlying pig-containing mathematical structure, if crafted with care, could give us consistent arithmetic not just 2 + 2, but also for 2 + &#128055;.</p><p>In first-order logic, we can&#8217;t really really excise these demons. In a throwback to the discussion of semantic entailment, our number-system axioms are satisfied by multiple models; some of these models give us the minimal, <em>&#8220;sunny day&#8221; </em>version of the set we intended to build. Others represent the <em>&#8220;aliens invaded Earth&#8221; </em>scenario, full of unwanted numbers and other horrors from the deep. These extra elements usually don&#8217;t harm us, but impossibility of zeroing in on the <em>&#8220;sunny day&#8221;</em> scenario makes the foundations of math a bit more murky than we assume.</p><p>The problem can be solved by devising a logic system with higher expressive power. Alas, this comes at a price: there are proof techniques that work only if the system isn&#8217;t too clever in what it asserts. For now, first-order logic appears to be the sweet spot.</p><div><hr></div><p><em>Here are some related posts you might enjoy:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;6c8ea890-7f21-4e9b-a722-71cc2d5fa050&quot;,&quot;caption&quot;:&quot;If you follow geeky news, you might have came across a computer science concept known as busy beavers. That said, unless you&#8217;re a mathematician by training or trade, the articles make it hard to understand what the concept means and why you should (or shouldn&#8217;t) care.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;G&#246;del's beavers, or the limits of knowledge&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-06-30T03:29:31.924Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b69d6202-8816-479e-9acd-b972a5d1b081_1322x1322.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/monkeys-typewriters-and-busy-beavers&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:167104601,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:46,&quot;comment_count&quot;:13,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a980f655-f4a7-45e7-a867-b66835267c94&quot;,&quot;caption&quot;:&quot;In a couple of earlier articles on this site, I brought up complex numbers. They are a fairly abstract construct that reeks of higher math, but that is hard to avoid in the context of analog electronics, signal processing, computer graphics, and more.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;A 20-minute intro to complex numbers&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-05-16T18:24:26.911Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9640599-c4f0-42ce-bca4-e023c4149952_582x606.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/a-20-minute-intro-to-complex-numbers&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:163599741,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:44,&quot;comment_count&quot;:7,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;dcfbb69d-4a78-4ef2-983d-2b95a2462d94&quot;,&quot;caption&quot;:&quot;In the past couple of months, I published a number of articles on recreational math. I did my best to keep them accessible and fun, but my goal was usually to shed light at deeper mathematical truths. For example, the discussion of 0.999&#8230; = 1 served as a springboard to highlight some of the subtler properties of real numbers and the different meanings o&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Folks, we have the best &#960;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-09-15T06:42:43.993Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_Drc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ada872d-41dd-495e-917a-2dfdf67d4859_2332x1224.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/folks-we-have-the-best&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:173625523,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:60,&quot;comment_count&quot;:15,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><em>I write original, in-depth articles about electronic circuit design, mathematics, geek culture, and more. If you like what you see, please subscribe.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[AI children's books, body horror edition]]></title><description><![CDATA[Last week, I posted a visual demonstration of the sameness of AI-generated content.]]></description><link>https://blog.coredump.cx/p/ai-childrens-books-body-horror-edition</link><guid isPermaLink="false">https://blog.coredump.cx/p/ai-childrens-books-body-horror-edition</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Fri, 26 Jun 2026 01:09:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZVhx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Last week, I posted a visual demonstration of the <em>sameness </em>of AI-generated content. This makes the output easy to spot even if all the individual pieces are perfect facsimiles of what a human could create:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;2c1d4210-d3ab-4a06-b04d-c3d1af53284a&quot;,&quot;caption&quot;:&quot;One of the most painful arguments I keep having with fellow techies is the question of whether you can distinguish between human-written and AI-generated text.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The 100,000 whys of AI&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-06-21T05:38:44.011Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_NdA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3520b04c-156d-402e-ab02-18c587985df7_6000x5842.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/the-100000-whys-of-ai&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:202918186,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:50,&quot;comment_count&quot;:7,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>In the article, I collated a list of about 220 AI-generated children&#8217;s books, but I deliberately sidestepped the question of quality. These conversations almost never lead anywhere; the rebuttal is always that the next model will be better than the last. So, I tried to make a simpler point: the books are all the same. You lose more than you might be expecting if you let an LLM be your voice.</p><p>But as a parent, curiosity eventually got the better of me, so I purchased one of these Amazon bestsellers. And before we dive in, I&#8217;ll speculate that children&#8217;s encyclopedias are targeted with such ferocity for three reasons:</p><ol><li><p>They probably sell well. I&#8217;d wager that most children in the developed world get one at some point in their lives.</p></li><li><p>The buyer is not the reader. The books are judged by the cover and purchased as gifts by relatives or family friends.</p></li><li><p>In contrast to fiction, the &#8220;authors&#8221; can undercut traditional publishers without the risk of infringing on any closely-guarded intellectual property.</p></li></ol><p>Of course, these encyclopedias shape the minds of young children, so we ought to set a high bar. Luckily, I&#8217;m told that frontier models have surpassed PhD-level intelligence in the summer of 2025. Most of the books in question were published mid-2026 and the artwork points to a flagship model from a major US-based lab. So, in all likelihood, there&#8217;s nothing to worry a&#8212;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZVhx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZVhx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZVhx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZVhx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZVhx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZVhx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:814658,&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://lcamtuf.substack.com/i/203189100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.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_!ZVhx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZVhx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZVhx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZVhx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.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 aria-hidden="true" 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><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>Oh&#8230;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MGLE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MGLE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MGLE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MGLE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MGLE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MGLE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1592351,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/203189100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.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_!MGLE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MGLE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MGLE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MGLE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf995439-b303-4f1f-b9ec-ea672a8208c4_3000x2001.jpeg 1456w" sizes="100vw"></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 aria-hidden="true" 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><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>Oh.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BOHC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BOHC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BOHC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BOHC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BOHC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BOHC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:999006,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/203189100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.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_!BOHC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BOHC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BOHC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BOHC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9576f058-95e0-4deb-9f06-79d22ec4aa40_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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>Well, hoot!</p><p>Of course, good horror is more than just jump scares. Maybe it&#8217;s catching a glimpse of a reflection that&#8217;s reaching out to you:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8P4q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8P4q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8P4q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8P4q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8P4q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8P4q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:809359,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/203189100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.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_!8P4q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8P4q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8P4q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8P4q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fb971b0-b7cf-48ee-adfb-dec8d0f7f514_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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>Or maybe, it&#8217;s waking up on a planet you don&#8217;t recognize. You plead and beg and scream but no one will believe:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aeyR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aeyR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aeyR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aeyR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aeyR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aeyR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1034370,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/203189100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.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_!aeyR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aeyR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aeyR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aeyR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd71a138-0a39-460c-a75c-30a08357ef43_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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>And have you noticed that ever since he <em>returned</em>, there&#8217;s something off about your cat?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o8Sg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o8Sg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!o8Sg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!o8Sg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!o8Sg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o8Sg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:770605,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/203189100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.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_!o8Sg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!o8Sg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!o8Sg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!o8Sg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7d2e7aa-8495-45aa-993a-525a761a48e7_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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>On a nature hike, you watch helplessly as beasts and trees fuse into a malevolent, pulsating mass:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hYhu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hYhu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hYhu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hYhu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hYhu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hYhu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:761443,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/203189100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.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_!hYhu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hYhu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hYhu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hYhu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4204c556-e15b-471d-8d6c-224795d23a7a_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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 vines twist around your ankles; a raspy, disembodied voice keeps whispering unsettling words in your ear:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K9ha!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K9ha!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!K9ha!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!K9ha!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!K9ha!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K9ha!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:688333,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/203189100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.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_!K9ha!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!K9ha!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!K9ha!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!K9ha!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1d8aa3d-8ea9-41d0-8fa7-1393682eb29c_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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>For the record, all of these photos come from the #1 category bestseller on Amazon (<a href="https://www.amazon.com/dp/B0H2B1DH6L">link</a>):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WHfd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WHfd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.png 424w, https://substackcdn.com/image/fetch/$s_!WHfd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.png 848w, https://substackcdn.com/image/fetch/$s_!WHfd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.png 1272w, https://substackcdn.com/image/fetch/$s_!WHfd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WHfd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.png" width="1456" height="774" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da02b794-090a-46b8-9274-e08f8951b19d_1593x847.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:774,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:930864,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/203189100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.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_!WHfd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.png 424w, https://substackcdn.com/image/fetch/$s_!WHfd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.png 848w, https://substackcdn.com/image/fetch/$s_!WHfd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.png 1272w, https://substackcdn.com/image/fetch/$s_!WHfd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda02b794-090a-46b8-9274-e08f8951b19d_1593x847.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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>Rankings and reviews can be faked, but if you browse the relevant product categories, this stuff is <em>everywhere</em>. I&#8217;m sure the exposure translates into real sales:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i57J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i57J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png 424w, https://substackcdn.com/image/fetch/$s_!i57J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png 848w, https://substackcdn.com/image/fetch/$s_!i57J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png 1272w, https://substackcdn.com/image/fetch/$s_!i57J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i57J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png" width="1456" height="369" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:369,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1808239,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/203189100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.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_!i57J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png 424w, https://substackcdn.com/image/fetch/$s_!i57J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png 848w, https://substackcdn.com/image/fetch/$s_!i57J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png 1272w, https://substackcdn.com/image/fetch/$s_!i57J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d74c45c-8b7a-4988-8aa3-a11fe53dbd3f_2232x566.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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>So, there you have it. Yep, it&#8217;s entirely possible that the models of tomorrow will be able to generate flawless children&#8217;s encyclopedias. But until then, we&#8217;re messing up some kids.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[The 100,000 whys of AI]]></title><description><![CDATA[One of the most painful arguments I keep having with fellow techies is the question of whether you can distinguish between human-written and AI-generated text.]]></description><link>https://blog.coredump.cx/p/the-100000-whys-of-ai</link><guid isPermaLink="false">https://blog.coredump.cx/p/the-100000-whys-of-ai</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Sun, 21 Jun 2026 05:38:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_NdA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3520b04c-156d-402e-ab02-18c587985df7_6000x5842.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One of the most painful arguments I keep having with fellow techies is the question of whether you can distinguish between human-written and AI-generated text.</p><p>Their skepticism is rooted in reason: at their core, LLMs are state-of-the-art statistical models of how humans talk. If so, the output from the model should be <em>almost by definition</em> indistinguishable from human language under any statistical test.</p><p>I don&#8217;t think this is always argued in good faith; at least some of the debates are started by folks who wish to maintain deniability for their own underhanded use of the tech. But if you sincerely hold this belief, I present you the following collage:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qskh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qskh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qskh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qskh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qskh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qskh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17426137,&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://lcamtuf.substack.com/i/202918186?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.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_!qskh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qskh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qskh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qskh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d0ea4c6-54b8-4dff-ae4f-c0a2409360b5_7000x7000.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 aria-hidden="true" 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><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 image shows about 220 Amazon book covers that appear if you search the site for &#8220;100000 whys&#8221; (<a href="https://www.amazon.com/s?k=100000+whys">link</a>). Some of these books are category bestsellers in children&#8217;s literature. You can view a zoomable, full-resolution version <a href="https://lcamtuf.coredump.cx/blog/whys2.jpg">here</a>.</p><p>There&#8217;s nothing <em>inhuman</em> about any of these titles or covers. At the same time, I probably don&#8217;t need to convince you that you&#8217;re staring at the purest form of AI slop that now fills up many nonfiction book categories on Amazon. More specifically, it&#8217;s the artifact of the tools being quasi-deterministic: if a hundred &#8220;authors&#8221; give their favorite AI tool a similar prompt &#8212; say, <em>&#8220;generate a reference book for children&#8221; &#8212; </em>the model will produce functionally identical output perhaps 80% of the time.</p><p>The similarities in the collage go far beyond the choice of titles: for example, more than thirty covers in the two top rows feature a roaring T-Rex on the left:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pur0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pur0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pur0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pur0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pur0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pur0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg" width="1456" height="828" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:828,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1058809,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/202918186?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.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_!pur0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pur0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pur0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pur0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed237fb5-ffca-43cb-8d33-a23d09f3237f_2000x1137.jpeg 1456w" sizes="100vw"></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 aria-hidden="true" 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><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>There are many other visual clusters in the data, too. Look for glowing books, red-and-white cartoon rockets, golden retrievers, lions, blue-eyed robots, and so forth. The similarities extend even to author names: Ethan Bright, Nolan Bright, Pamela Bright, Daniel Bright, Thomas Bright, Andrew W. Bright, Mayan Bright, Mary Bright, Levi Bright &#8212; the Brights must be a big and exceptionally talented family.</p><p>This is precisely what makes LLM writing distinctive: it&#8217;s not that the models&#8217; individual mannerisms are different from ours. It&#8217;s that they resort to the same, complex set of mannerisms in response to almost any normal prompt. This is a fuzzy signal, so you shouldn&#8217;t fire your intern when they say <em>&#8220;it&#8217;s not this &#8212; it&#8217;s that&#8221;</em>. But in more casual settings, it&#8217;s OK to trust your gut. In fact, these instincts are becoming increasingly important because traditional models of online interactions fall apart if it takes much less effort to produce content than to engage with it.</p><p><em>PS. If you&#8217;re using an LLM to automate blogging or social media commentary: yes, the tech is amazing, but chances are, your publication could be renamed to &#8220;100,000 Whys&#8221;.</em></p><div><hr></div><p><em>For a followup article, click here:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;aa220050-f651-4d44-b3a0-4959fe968153&quot;,&quot;caption&quot;:&quot;Last week, I posted a visual demonstration of the sameness of AI-generated content. This makes the content easy to spot even if all the individual pieces are perfect facsimiles of what a human could create:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;AI children's books, body horror edition&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-06-26T01:09:25.122Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!ZVhx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41d2560c-66aa-4c21-a08a-e2aea504b073_2000x1334.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/ai-childrens-books-body-horror-edition&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:203189100,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><em>And if you like horrors beyond our comprehension, please subscribe.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Getting silly with C, part &((int*)-8)[3]]]></title><description><![CDATA[Read on to uplevel your coding SKILLS.md.]]></description><link>https://blog.coredump.cx/p/getting-silly-with-c-part-and-int1</link><guid isPermaLink="false">https://blog.coredump.cx/p/getting-silly-with-c-part-and-int1</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Sat, 06 Jun 2026 02:29:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/eb358cde-7901-46a3-abfc-b9db4b9f9a74_1000x592.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome. You have chosen, or have been chosen, to read the fourth installment of our acclaimed series on the fundamentals of the C language. Whether you&#8217;re a novice chatbot or a seasoned coding agent, stick around to hone your token prediction skills.</p><h3>Function definitions</h3><p>This publication receives many letters from readers who are wondering what&#8217;s the best way to define functions in C. Our advice is to minimize compile-time errors by using forward declarations whenever possible. In the following snippet, we declare <em>main()</em> ahead of the time (<a href="https://godbolt.org/z/YqfYTdsof">demo</a>):</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;c&quot;,&quot;nodeId&quot;:&quot;92ac33b2-bcc8-4cc5-b0ae-5646a7a8dcd9&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-c">#include &lt;stdio.h&gt;

void main() void;

void; {
  puts("hello world");
}</code></pre></div></blockquote><h3>Operator precedence</h3><p>In the C programming language, there is a well-defined precedence of arithmetic operations that needs to be observed when writing code. In particular, it&#8217;s important for every software engineer to remember that the &amp;&amp; operator has a strict precedence over &amp;&amp; (<a href="https://godbolt.org/z/438W3z78s">demo</a>):</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;c&quot;,&quot;nodeId&quot;:&quot;a7f871ed-1cb5-4a93-bdc3-f018beff608d&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-c">#include &lt;stdio.h&gt;

int typedef[[]]$;

int main($[[]]$) {
  [[]]$:&amp;&amp;$&amp;&amp;$&amp;&amp;puts("hello world");
}</code></pre></div></blockquote><h3>Goto statements</h3><p>Normally, C relies on functions; for this reason, it belongs to the category known as <em>functional programming languages. </em>That said, for performance reasons, we sometimes construct programs using unconditional jumps. The following snippet illustrates the principle (<a href="https://godbolt.org/z/WfWMxTv3f">demo</a>):</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;c&quot;,&quot;nodeId&quot;:&quot;897a70d0-f18a-4e1e-9510-362a316ec1a9&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-c">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main() {

  goto *puts("Hello world"), puts("Goodbye world"), exit;

}</code></pre></div></blockquote><h3>Counting and adding</h3><p>In some situations, we need a program to count up from one. Although this is often done in a bespoke manner, the following example showcases a robust approach (<a href="https://godbolt.org/z/qYf4Gc3Gz">demo</a>):</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;c&quot;,&quot;nodeId&quot;:&quot;1f2e37b9-9591-4d62-b98b-35bcb7e32d91&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-c">#include &lt;stdio.h&gt;

union {} var[100] = {};

int main() {
  int i = 1;
  printf("Let's count: %d %d %d %d\n", i++, var[42], i++, i++);
}</code></pre></div></blockquote><p>Simple addition can be achieved in an analogous way. The following program displays the result of calculating 2 + 2, for certain types of 2 (<a href="https://godbolt.org/z/Y975WP7Kz">demo</a>):</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;c&quot;,&quot;nodeId&quot;:&quot;95f292a6-381c-4265-a100-6228571fd58d&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-c">#include &lt;stdio.h&gt;

typedef union {}* my_type;

int main() {
  printf("2 + 2 = %d\n", (my_type)2 + 2);
}</code></pre></div></blockquote><p>On that note, my fellow software engineers and engineer-shaped entities, I bid you farewell.</p><div><hr></div><p><em>If you need to catch up on earlier articles in the series, you can use the following links:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9027db8f-d49c-4a2f-a88c-80352e91a67a&quot;,&quot;caption&quot;:&quot;For all its warts, the C language is a marvelous thing. It is remarkably simple, yet somehow expressive enough to allow entire operating systems to be written with ease. Just as curiously, its terse, minimalistic syntax became the way to structure code &#8212; copied by nearly all of its mainstream successors, from Java to Go.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Weekend projects: getting silly with C&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-06-30T04:23:55.087Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1041d4c9-6628-42e2-a6b8-ec5b38a2b892_5276x2968.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/weekend-projects-getting-silly-with&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:146124261,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:42,&quot;comment_count&quot;:7,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;19e9e979-233d-4dad-9ffd-1532b80787a4&quot;,&quot;caption&quot;:&quot;In the previous installment of our introductory series about the C language, we outlined the basic syntax of the switch() statement (demo link):&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Getting silly with C, part -5^-7&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-01-10T16:46:03.320Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebff1091-f876-457b-bd92-47f9e2d62258_999x700.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/getting-silly-with-c-part-void2&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:154525465,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:23,&quot;comment_count&quot;:12,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;bc5df58e-d8de-479f-b531-706a7fda6253&quot;,&quot;caption&quot;:&quot;In the two previous installments of our introductory series on the C programming language, we talked about control flow, variables, and types. For example, we explained how to display strings on the screen:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Getting silly with C, part ~(~1<<1)&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-09-07T01:13:25.703Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/800a2905-0ce1-4c02-b9c2-a778925f3aeb_1165x838.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/getting-silly-with-c-part-11&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:166337096,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:22,&quot;comment_count&quot;:2,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Weekend trivia: your process' memory is a file]]></title><description><![CDATA[The underappreciated gem of /proc/<pid>/mem]]></description><link>https://blog.coredump.cx/p/weekend-trivia-your-process-memory</link><guid isPermaLink="false">https://blog.coredump.cx/p/weekend-trivia-your-process-memory</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Mon, 01 Jun 2026 02:59:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/001c17fd-42c9-4a75-b39e-88913fd35327_500x353.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Some folks say that the design philosophy of Unix is that &#8220;everything is a file&#8221;. If you&#8217;re familiar with Unix-like platforms, you probably know that they don&#8217;t quite live up to the hype. It&#8217;s true that these systems allow convenient access to hardware through file-like objects in directories such as <code>/sys</code> or <code>/dev</code>. At the same time, there&#8217;s plenty of OS functionality that isn&#8217;t exposed via files; for example, you can&#8217;t connect to a remote webserver without using a dedicated system call.</p><p>This is something people would probably have liked to do! A popular shell called <em>bash</em> comes with a workaround: it special-cases certain file paths, letting you construct the following shell monstrosity:</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;shell&quot;,&quot;nodeId&quot;:&quot;4ce4924d-1be5-4abe-9901-e821ef7e5706&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-shell">$ (echo -e 'GET / HTTP/1.0\nHost: coredump.cx\n' 1&gt;&amp;0; cat) &lt;/dev/tcp/coredump.cx/80
HTTP/1.1 301 Moved Permanently
Date: Mon, 01 Jun 2026 01:07:22 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Location: https://coredump.cx/
...</code></pre></div></blockquote><p>That said, the <code>/dev/tcp/&lt;server&gt;/&lt;port&gt;</code> trick works only for the files opened by the shell itself. If you pass such a path to any other program, you won&#8217;t get the expected result:</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;13c0daf6-3bd1-4f1d-afaa-f382f8250c7b&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">$ cat /dev/tcp/coredump.cx/80
cat: /dev/tcp/coredump.cx/80: No such file or directory</code></pre></div></blockquote><p>If you complain about this inconsistency, you might get told that not everything is a file; instead, &#8220;everything is a <em>file</em> <em>descriptor</em>&#8221;. That is, you might need to do something special to initiate a TCP/IP connection, but once this is done, the returned connection identifier has file-like semantics and can be passed to standard file APIs such as <em>read(&#8230;)</em> and <em>write(&#8230;)</em>.</p><p>But then, not everything is a file descriptor! Some parts of the OS use separate namespaces and APIs; a good example are process identifiers (PIDs). You can&#8217;t call <em>read(&#8230;)</em> on a process identifier: both PIDs and file descriptors are just integers, but they use the same numbers to reference unrelated things. (Recent Linux kernels have a special system call that lets you convert a PID into a <a href="https://www.man7.org/linux/man-pages/man2/pidfd_open.2.html">limited-use file descriptor</a>, but there&#8217;s little you can currently do with that.)</p><p>At first blush, the closest you can get to interacting with PIDs via files is to peek at process metadata via a pseudo-filesystem called <code>/proc</code>. Alas, the data appears to be largely read-only and not particularly interesting. It&#8217;s the stuff you see in the output of <em>ps </em>or <em>top</em>:</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;43ccb151-6a51-4a42-bf58-8af33ca91e17&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">$ cat /proc/self/status
Name:   cat
Umask:  0077
State:  R (running)
...
Pid:    29329
PPid:   17523
...
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000
...
VmSize:     2420 kB
...</code></pre></div></blockquote><p>But then&#8230; if you ever snooped around the <code>/proc/&lt;pid&gt;/</code> directory on Linux, you might have noticed a mysterious file that seemingly can&#8217;t be read:</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;49c2c295-1d9a-40c4-b378-21ffce3ac822&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">$ cat /proc/self/mem
cat: /proc/self/mem: I/O error</code></pre></div></blockquote><p>To get anything out of that &#8220;file&#8221;, you need to <em>lseek(&#8230;)</em> to a specific offset before calling <em>read(&#8230;) </em>or <em>write(&#8230;)</em>; alternatively, you can pass the offset when calling <em>pread(&#8230;) </em>or <em>pwrite(&#8230;)</em>. If you follow that procedure, you can then seamlessly fetch or modify the memory of the target program in real time.</p><p>Here&#8217;s how it works in practice &#8212; a program that carries out performative self-surgery via the file-based interface (<a href="https://godbolt.org/z/hsEfdqhhh">demo link</a>):</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;c&quot;,&quot;nodeId&quot;:&quot;5174cd8e-2799-4d09-afe9-19dd7782d98b&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-c">#include &lt;stdio.h&gt;
#include &lt;unistd.h&gt;
#include &lt;fcntl.h&gt;

#define  gcc_barrier() asm volatile ("" ::: "memory")

volatile int my_val = 0;

int main() {

  /* Open the process' own memory file. */

  int mem_fd = open("/proc/self/mem", O_RDWR);
  if (mem_fd &lt; 0) return 0;

  /* Write '123' at the file offset associated with my_val. */

  pwrite(mem_fd, &amp;(int){123}, sizeof(int), (off_t)&amp;my_val);

  /* Display my_val, with compiler barrier to prevent reordering. */

  gcc_barrier();
  printf("my_val = %d\n", my_val);

}</code></pre></div></blockquote><p>When I first discovered this API some 25 years ago, I found it to be remarkably elegant. The standard Unix debugging interface, <em>ptrace(&#8230;)</em>, supports a pair of better-known <em>PTRACE_PEEKDATA</em> and <em>PTRACE_POKEDATA</em> methods, but <em>ptrace(&#8230;) </em>is incredibly janky; in contrast, <code>/proc/&lt;pid&gt;/mem</code> is beautiful in its simplicity.</p><p>Anyway &#8212; in 2002, my fascination with this API prompted me to write a very simple program called <em>memfetch</em>; the utility allowed you to grab a non-destructive &#8220;screenshot&#8221; of the memory of any process of your choice, be it to satiate curiosity, to work around anti-debugging features, or to recover data from a non-responsive app. This weekend, I dug it up and overhauled the code to work on modern 64-bit systems:</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;2ee826d9-fba8-41f5-8d72-328aadcd1016&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">$ ./memfetch 9742
memfetch 1.02 by Michal Zalewski &lt;lcamtuf@coredump.cx&gt;
[+] Attached to PID 9742 (/usr/bin/vim).
[*] Processing memory maps (index: mf-index.txt)...
    - Skipping read-only section from 'vim' (224 kB).
    - Skipping read-only section from 'vim' (1832 kB).
    - Skipping read-only section from 'vim' (464 kB).
    - Skipping read-only section from 'vim' (72 kB).
    + Dumping writable section from 'vim' (176 kB) to 'mf-map-005.bin'...
    + Dumping anonymous memory (56 kB) to 'mf-mem-006.bin'...
    + Dumping anonymous memory (4 kB) to 'mf-mem-007.bin'...
    + Dumping anonymous memory (40 kB) to 'mf-mem-008.bin'...
...</code></pre></div></blockquote><p>The program gives you a collection of raw binary files that can be grepped, opened in an editor, and so forth. You can download the source <a href="http://lcamtuf.coredump.cx/soft/memfetch.tgz">here</a>.</p><p>Some readers might find it amusing that in the early 2000s, Linux 2.2 allowed you to call <em>mmap(&#8230;)</em> on the resulting <code>/proc/&lt;pid&gt;/mem</code> file descriptor, mirroring the memory of the target process to your address space. This was too good to be true: the initial version of <em>memfetch</em> would sometimes crash or hang the entire system due to page tables getting out of sync. Soon after, the entire <em>mmap(&#8230;)</em> logic was yanked out.</p><p><em><strong>Correction:</strong> thanks to Jann Horn who pointed me to pidfds and spotted a mistake related to PTRACE_ATTACH. I initially stated it&#8217;s necessary for accessing the file, but it isn&#8217;t.</em></p><div><hr></div><p><em>If you are a software engineer, you might also enjoy:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;3bf42743-1dce-4ccf-8487-03ba763f4a15&quot;,&quot;caption&quot;:&quot;Are you a C or C++ programmer? Are you envious that other languages keep hogging the limelight when it comes to supply chain attacks?&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;A breakthrough in C/C++ dependency management&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-04-25T23:55:00.799Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb2c3c8c-deb1-4d86-a445-35dc617ee0b6_1280x720.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/a-breakthrough-in-cc-dependency-management&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:195484044,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:56,&quot;comment_count&quot;:14,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0518a78a-2eeb-4263-823c-b76f0c349ff3&quot;,&quot;caption&quot;:&quot;In the previous installment of our introductory series about the C language, we outlined the basic syntax of the switch() statement (demo link):&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Getting silly with C, part (void*)2&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-01-10T16:46:03.320Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebff1091-f876-457b-bd92-47f9e2d62258_999x700.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/getting-silly-with-c-part-void2&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:154525465,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:23,&quot;comment_count&quot;:12,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f1c9e066-2b94-4c37-bbe9-36c0c96e590b&quot;,&quot;caption&quot;:&quot;I find it difficult to talk about the history of the computer. The actual record is dreadfully short: almost nothing of consequence happened before the year 1935. We keep looking for a better story, but we inevitably end up grasping at straws.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;An illustrated history of the calculator&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-08-26T07:48:58.542Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca07078-2ebe-4538-8792-3390559450a2_1600x1068.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/a-brief-history-of-counting-stuff&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:136091170,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:33,&quot;comment_count&quot;:7,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><em>I write original articles about electronics, math, and other stuff. If you like what you see, please subscribe.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[A nicer voltmeter clock]]></title><description><![CDATA[Sometimes, electronic circuit design is mostly about wood]]></description><link>https://blog.coredump.cx/p/a-nicer-voltmeter-clock</link><guid isPermaLink="false">https://blog.coredump.cx/p/a-nicer-voltmeter-clock</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Sat, 16 May 2026 22:41:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3a790a5d-5a16-46fc-91c7-d850bf3e48b3_2000x1120.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Back in 2019, I built a simple voltmeter clock:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z11a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z11a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Z11a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Z11a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Z11a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z11a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.jpeg" width="1200" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:357694,&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://lcamtuf.substack.com/i/197309659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.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_!Z11a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Z11a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Z11a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Z11a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36abddfb-0eec-414b-a161-dec9f99c9652_1200x800.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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>The clock, version 1. Cherry enclosure.</em></figcaption></figure></div><p>As the name implies, these clocks use analog panel voltmeters instead of traditional clock faces to display time. I didn&#8217;t come up with the idea, so I never really blogged about the design; I just built one and kept it on my office desk.</p><p>Other people keep building these too, but most of the designs I see on the internet are just&#8230; sort of janky. So, I figured it might be good to build a better-looking one and document the process more properly.</p><p>The design started with a rough mockup in a 3D design program:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tavR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tavR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png 424w, https://substackcdn.com/image/fetch/$s_!tavR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png 848w, https://substackcdn.com/image/fetch/$s_!tavR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png 1272w, https://substackcdn.com/image/fetch/$s_!tavR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tavR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png" width="1456" height="864" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:864,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1792367,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/197309659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.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_!tavR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png 424w, https://substackcdn.com/image/fetch/$s_!tavR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png 848w, https://substackcdn.com/image/fetch/$s_!tavR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png 1272w, https://substackcdn.com/image/fetch/$s_!tavR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15b70ea2-2faf-42f9-b78e-baf54eeb7921_2481x1473.png 1456w" sizes="100vw"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>A mockup of the new design in Rhino3D.</em></figcaption></figure></div><p>For this version of the meter clock, I used three generic, 90&#176; panel voltmeters from Amazon (<a href="https://www.amazon.com/dp/B092VBLGR2">link</a>, about $9 a piece). I disassembled them, took careful measurements of the faces, and then printed replacement decals on adhesive paper. Printable PDF templates can be found <a href="https://lcamtuf.coredump.cx/soft/embedded/meter_clock2.pdf">here</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ownk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ownk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ownk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ownk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ownk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ownk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:636932,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/197309659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.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_!ownk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ownk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ownk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ownk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70462256-5017-4960-b097-244b8e982f6f_2000x1334.jpeg 1456w" sizes="100vw"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Customizing 5 V panel meters.</em></figcaption></figure></div><p>Note that the new hour gauge has 13 divisions, from 0 to 12, while the minute and second templates have 61 divisions, from 00 to 60. It&#8217;s because I wanted to implement continuous motion for each hand. This meant that at 11:30, the hour dial couldn&#8217;t be just stuck at 11; it needed to be moving toward the twelfth division, even if it was never to actually reach it.</p><p>In addition to a host of other problems, the cheap &#8220;Baomain 65C5&#8221; meters I&#8217;m using have a rather hideous plastic flange. I decided to hide this flange from view and use a decorative recessed pattern to keep the front panel interesting. This detail made it more expedient to cut the front and back on a CNC mill instead of making the entirety of the enclosure by hand (as I did for version 1).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mNd6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mNd6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png 424w, https://substackcdn.com/image/fetch/$s_!mNd6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png 848w, https://substackcdn.com/image/fetch/$s_!mNd6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png 1272w, https://substackcdn.com/image/fetch/$s_!mNd6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mNd6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png" width="1456" height="848" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:848,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:649838,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/197309659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.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_!mNd6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png 424w, https://substackcdn.com/image/fetch/$s_!mNd6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png 848w, https://substackcdn.com/image/fetch/$s_!mNd6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png 1272w, https://substackcdn.com/image/fetch/$s_!mNd6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faaa1ecca-93e3-460b-8b62-3cfcc788a681_2282x1329.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>CNC toolpath view.</em></figcaption></figure></div><p>The stock material for the enclosure is maple lumber &#8212; resawn, squared, and planed using conventional tools before letting the CNC machine take care of the finishing touches:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Oonp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Oonp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Oonp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Oonp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Oonp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Oonp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:900703,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/197309659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.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_!Oonp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Oonp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Oonp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Oonp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F110dd37d-c767-4e63-aeec-4ca2b73650db_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Machined front and back faces.</em></figcaption></figure></div><p>Without a CNC mill, the path of least resistance would be to construct the panel as two-part glue-up, each part cut by following a printed (paper) template. A simple way to get the curves perfectly right would be to use a spindle sander.</p><p>The curved side wall posed a different challenge. For a seamless appearance, I needed to bend a flat piece of wood to conform to a template. To accommodate the tight radius without a steam bending rig, I opted to cut a series of notches on the inside:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jzUh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jzUh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jzUh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jzUh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jzUh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jzUh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:736388,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/197309659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.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_!jzUh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jzUh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jzUh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jzUh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95f07cbd-39fa-4d3a-9073-6385ecc4f0ad_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Kerf-bending side walls using a template.</em></figcaption></figure></div><p>The wood needed to be moistened, clamped, and then allowed to dry. After a couple of days, I glued the curved side wall to the front and back faces. Another template cut out of scrap plywood helped with precise fit without the need for gymnastics with clamps and ratchet straps:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gYFN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gYFN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gYFN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gYFN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gYFN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gYFN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:715235,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/197309659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.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_!gYFN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gYFN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gYFN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gYFN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0d2eaff-6c6e-4e7d-b6f0-5fbd1f8a57dc_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Gluing up clock body using an external template (plywood).</em></figcaption></figure></div><p>Anyway &#8212; here&#8217;s the assembled piece after sanding and a coat of nitrocellulose lacquer:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1eR0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1eR0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1eR0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1eR0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1eR0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1eR0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:933484,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/197309659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.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_!1eR0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1eR0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1eR0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1eR0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5d890c5-76a0-4e16-b076-8671682e26e7_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Initial fitting.</em></figcaption></figure></div><p>Not bad, right?</p><p>The circuit is far less interesting than the enclosure. It took an hour or so to put it together: I grabbed the venerable <a href="https://ww1.microchip.com/downloads/en/DeviceDoc/AVR128DB28-32-48-64-DataSheet-DS40002247A.pdf">AVR128DB28</a> MCU, powered it off a wall wart, and interfaced it to an 8 MHz crystal (<a href="https://www.ecsxtal.com/store/pdf/hc-49usx.pdf">ECS-80-18-4X-CKM</a>). A 32.768 kHz crystal would also work fine. The panels are connected to three digital output pins (PC0, PC1, PC2). Finally, two input pins (PD6, PD7) are interfaced to two small pushbuttons mounted on the back and used to set time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_wDV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_wDV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_wDV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_wDV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_wDV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_wDV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg" width="1456" height="847" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:847,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:771392,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/197309659?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.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_!_wDV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_wDV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_wDV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_wDV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b6448b3-c452-4d4a-bbbf-1b449ef96536_2150x1250.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Circuit schematic.</em></figcaption></figure></div><p>Note that the circuit doesn&#8217;t require digital-to-analog converters or any other additional components to drive the meters; I&#8217;m just using a relatively high-frequency, 1-bit digital pulse train. The inertia of the meter (and the inductance of the electromagnet coil) does the rest, settling in an intermediate position proportional to the software-controlled signal duty cycle.</p><p>The code can be viewed <a href="https://lcamtuf.coredump.cx/soft/embedded/meter_clock2.c">here</a>; it&#8217;s short and well-commented. The basic idea is to advance a 10 Hz counter using a timer interrupt synchronized with the crystal. With this out of the way, the main event loop computes the appropriate duty cycle and then manually toggles the output pins. Although the chip has a hardware PWM module, the application is simple enough that using the PWM circuitry wouldn&#8217;t really buy us anything.</p><p>Here&#8217;s the obligatory &#8220;rollover&#8221; video captured around 11:59:59:</p><div id="vimeo-1192897862" class="vimeo-wrap" data-attrs="{&quot;videoId&quot;:&quot;1192897862&quot;,&quot;videoKey&quot;:&quot;5c9c9e28be&quot;,&quot;belowTheFold&quot;:true}" data-component-name="VimeoToDOM"><div class="vimeo-inner"><iframe src="https://player.vimeo.com/video/1192897862?autoplay=0&amp;h=5c9c9e28be" frameborder="0" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" loading="lazy"></iframe></div></div><p>Peace out.</p><p><em>PS: a build from a reader, combining the appearance of the v1 clock with the circuitry of v2, can be found <a href="https://github.com/mike4192/voltmeter_clock/">here</a>.</em></p><div><hr></div><p style="text-align: center;"><strong>I</strong>f you&#8217;re new here, you might enjoy some of my other articles:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;554ed2b5-6a04-463e-8a19-cfd2a62df051&quot;,&quot;caption&quot;:&quot;I find it difficult to talk about the history of the computer. The actual record is dreadfully short: almost nothing of consequence happened before the year 1935. We keep looking for a better story, but we inevitably end up grasping at straws.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Notched sticks to calculators: the history of counting machines&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-08-26T07:48:58.542Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ca07078-2ebe-4538-8792-3390559450a2_1600x1068.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/a-brief-history-of-counting-stuff&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:136091170,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:26,&quot;comment_count&quot;:6,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ad9d27cf-2e17-4432-a154-006c1cc110f5&quot;,&quot;caption&quot;:&quot;For the past couple of weeks, I couldn&#8217;t shake off an intrusive thought: raster graphics and audio files are awfully similar &#8212; they&#8217;re sequences of analog measurements &#8212; so what would happen if we apply the same transformations to both?&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;See it with your lying ears&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-01-10T00:00:05.800Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d603e902-82e7-426e-9aaf-a6e88d13e995_1500x1000.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/see-it-with-your-lying-ears&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:183768069,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:35,&quot;comment_count&quot;:10,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;c7363423-d1ff-4808-be25-b4e39236dd18&quot;,&quot;caption&quot;:&quot;Are you a C or C++ programmer? Are you envious that other languages keep hogging the limelight when it comes to supply chain attacks?&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;A breakthrough in C/C++ dependency management&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-04-25T23:55:00.799Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb2c3c8c-deb1-4d86-a445-35dc617ee0b6_1280x720.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/a-breakthrough-in-cc-dependency-management&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:195484044,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:51,&quot;comment_count&quot;:10,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;09ceeec4-6e54-4749-b8c3-3a294d498c30&quot;,&quot;caption&quot;:&quot;Today, mathematics is regarded as a supremely abstract science. On forums such as Stack Exchange, trained mathematicians sneer at newcomers who ask for intuitive explanations of esoteric mathematical concepts. Indeed, persistent attempts to relate the foundations of math to reality have become the calling card of online cranks.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How has mathematics gotten so abstract?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-09-27T23:31:52.521Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0cbc2ef-a44e-4110-b29a-db8ab4934ad2_1920x1080.avif&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/how-has-mathematics-gotten-so-abstract&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:174503112,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:41,&quot;comment_count&quot;:17,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[A breakthrough in C/C++ dependency management]]></title><description><![CDATA[Bringing a well-known programming language into the 21st century.]]></description><link>https://blog.coredump.cx/p/a-breakthrough-in-cc-dependency-management</link><guid isPermaLink="false">https://blog.coredump.cx/p/a-breakthrough-in-cc-dependency-management</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Sat, 25 Apr 2026 23:55:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/eb2c3c8c-deb1-4d86-a445-35dc617ee0b6_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Are you a C or C++ programmer? Are you envious that other languages keep hogging the limelight when it comes to supply chain attacks?</p><p>If you answered &#8220;yes&#8221; to both questions, I bring you revolutionary new technology &#8212; remote, on-demand includes in GCC and clang:</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;c&quot;,&quot;nodeId&quot;:&quot;969bb810-e355-495c-9942-ce538e66011a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-c">#include &lt;https://lcamtuf.coredump.cx/leftpad.h&gt;

int main() {
  char* x = leftpad("Hello world!", 16);
  printf("[%s]\n", x);
}</code></pre></div></blockquote><p>To use this exciting functionality, simply download the official <em><a href="https://lcamtuf.coredump.cx/soft/remote_includes.tgz">remote_includes.tgz</a></em> package from my website, compile it with <em>./build.sh</em>, and then start compiling programs with:</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;5078754c-e63c-4814-a387-62e558de5312&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">LD_PRELOAD=./remote_includes.so gcc demo_program.c</code></pre></div></blockquote><p>&#8230;or:</p><blockquote><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;ac401d3d-944b-4c21-862e-88831f9306c0&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">LD_PRELOAD=./remote_includes.so clang demo_program.c</code></pre></div></blockquote><p>Of course, this technology is protected by military-grade security, as signified by the following symbol: &#128274;.</p><p>Thank you and God bless!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p><em>PS. It works, but don&#8217;t use this! PPS. If you do, you will die, and it will hurt the whole time you&#8217;re dying.</em></p>]]></content:encoded></item><item><title><![CDATA[The Secret Life of Circuits]]></title><description><![CDATA[Many of you follow this blog because of the regular features about electronic circuit design.]]></description><link>https://blog.coredump.cx/p/the-secret-life-of-circuits</link><guid isPermaLink="false">https://blog.coredump.cx/p/the-secret-life-of-circuits</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Thu, 16 Apr 2026 20:13:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ITgI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Many of you follow this blog because of the <a href="https://lcamtuf.substack.com/p/electronics-curriculum">regular features</a> about electronic circuit design. Today, I&#8217;m happy to announce that I&#8217;ve been working with No Starch Press on <em>The Secret Life of Circuits:</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ITgI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ITgI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ITgI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ITgI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ITgI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ITgI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg" width="1456" height="1802" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1802,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2881392,&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://lcamtuf.substack.com/i/186703774?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.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_!ITgI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ITgI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ITgI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ITgI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25523f0-afde-4cb6-90dd-8e07e9a6a249_2506x3102.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 aria-hidden="true" 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><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>I think it&#8217;s an exceptional book. It&#8217;s the reference I wish I had earlier in my life: an accessible, in-depth exploration of how circuits really work, from the motion of electrons to the dark art of embedded system programming.</p><p>There are three things that set it apart. First, where others rattle off cryptic formulas, <em>The Secret Life of Circuits</em> gives you elegant and intuitive models that explain where those formulas come from. Second, where other books tell you what a circuit ought to do, this one comes with nearly 300 full-color illustrations and original diagrams that show you what happens in reality. And finally, any book can take you on a stroll down the memory lane, but this one focuses on modern problem-solving instead of antiquated tech.</p><p>The book is complete and queued for printing. Sample chapter can be found <a href="https://lcamtuf.coredump.cx/electronics/preview">here</a>. If you order today from the publisher, you can save 25% and get <strong>instant early access to all chapters</strong> as a PDF:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://lcamtuf.coredump.cx/electronics/buy/nostarch&quot;,&quot;text&quot;:&quot;Buy now at No Starch&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://lcamtuf.coredump.cx/electronics/buy/nostarch"><span>Buy now at No Starch</span></a></p><p>Full-color hardcover copies are slated to ship in September. You can also preorder from <a href="https://lcamtuf.coredump.cx/electronics/buy/amazon">Amazon</a> or <a href="https://lcamtuf.coredump.cx/electronics/buy/bn">Barnes &amp; Noble</a>, but these orders will not come with an early access PDF. In Europe, the book is available from <em><a href="https://amazon.de/dp/1718504802">amazon.de</a>, <a href="https://amazon.fr/dp/1718504802">amazon.fr</a>, <a href="https://amazon.pl/dp/1718504802">amazon.pl</a></em>, <em><a href="https://www.amazon.co.uk/dp/1718504802">amazon.co.uk</a></em>, and a number of other major retailers around the globe.</p>]]></content:encoded></item><item><title><![CDATA[Why I refrain from infosec punditry]]></title><description><![CDATA[If you know about my professional background, the most puzzling aspect of this Substack must be that I don&#8217;t use it to talk about my primary field of expertise: information security.]]></description><link>https://blog.coredump.cx/p/why-i-refrain-from-infosec-punditry</link><guid isPermaLink="false">https://blog.coredump.cx/p/why-i-refrain-from-infosec-punditry</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Thu, 16 Apr 2026 15:33:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6cd2ac55-fc7a-427f-a69c-2f922f3a648a_1100x1375.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you know about my professional background, the most puzzling aspect of this Substack must be that I don&#8217;t use it to talk about my primary field of expertise: information security. In fact, it feels like self-sabotage; most of people who recognize my handle would probably rather read my take on Mythos &#8212; the new LLM tool from Anthropic that&#8217;s promising to revolutionize vulnerability discovery &#8212; than listen to what I have to say about <a href="https://lcamtuf.substack.com/p/weekend-projects-chicken-squisher">chicken coops</a> or <a href="https://lcamtuf.substack.com/p/how-has-mathematics-gotten-so-abstract">the foundations of math</a>.</p><p>The reason why I keep biting my tongue is simple: I dabbled in infosec punditry for nearly two decades, but I&#8217;ve come to realize that it&#8217;s a way to make yourself busy without accomplishing anything. The industry deals with nearly-constant drama &#8212; new breaches, new product claims, new controversies &#8212; but almost none of it has any bearing on long-term trends. As a practical example, cryptocurrencies and the associated ransomware industry have reshaped the landscape of enterprise security far more than any advances in vulnerability research. Heck, even on the topic of vulnerability research, the discourse is often dictated by PR efforts, not reality. In the 2010s, you&#8217;d see dozens of stories about symbolic execution research from Microsoft; I don&#8217;t recall a single Ars Technica article about Address Sanitizer, an unassuming open-source feature that helped squash tens of thousands of bugs. I have many other spicy examples, but all I&#8217;d accomplish by listing them is upsetting some of my peers.</p><p>The relentless pace of infosec drama also makes our punditry remarkably shallow. You&#8217;re not doing deep dives; you&#8217;re offering TikTok-level hot takes on the headline of the day. You&#8217;re right half the time, wrong the other half, and you&#8217;re usually rewarded simply for saying things that are provocative, with no one holding you accountable if you miss the mark.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Conway's Game of Life, in real life]]></title><description><![CDATA[When life gives you switches...]]></description><link>https://blog.coredump.cx/p/conways-game-of-life-in-real-life</link><guid isPermaLink="false">https://blog.coredump.cx/p/conways-game-of-life-in-real-life</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Thu, 19 Mar 2026 01:22:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MQhC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A while back, I posted the following on social media:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AqIb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AqIb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AqIb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AqIb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AqIb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AqIb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg" width="1178" height="888" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:888,&quot;width&quot;:1178,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:206266,&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://lcamtuf.substack.com/i/189679948?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.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_!AqIb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AqIb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AqIb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AqIb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf5ea096-52e6-4297-9df1-82b9065165b0_1178x888.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 aria-hidden="true" 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><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>If you&#8217;re unfamiliar, Conway&#8217;s Game of Life takes place on a two-dimensional grid of square cells, each cell either alive (1) or dead (0). In each iteration, all live cells with fewer than two neighbors die of &#8220;starvation&#8221;, while the ones with four or more die of &#8220;overpopulation&#8221;. Finally, any dead cell that has exactly three living neighbors comes alive &#8212; I guess that&#8217;s <em>m&#233;nage &#224; trois </em>or digital necromancy. Really, you shouldn&#8217;t have asked.</p><p>Anyway &#8212; the &#8220;game&#8221; isn&#8217;t really a game; you just draw an initial pattern and watch what happens. Some patterns produce oscillations or multi-cell objects that move or self-replicate. Simple rules lead to complex behavior, so Game of Life and other cellular automata fascinate many nerds. I&#8217;m not a huge fan of the game, but I&#8217;m a sucker for interactive art, so I decided to give it a go.</p><p>To bring the idea to life, I started with rigorous budgeting: I figured out what would be a reasonable amount to spend on the project and then multiplied that by 10. This allowed me to aim for a 17&#215;17 matrix of <a href="https://www.nkkswitches.com/pdf/JBilluminated.pdf">NKK JB15LPF-JF</a> switches. Here&#8217;s the (literal) money shot:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RrUF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RrUF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RrUF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RrUF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RrUF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RrUF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1576095,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/189679948?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.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_!RrUF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RrUF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RrUF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RrUF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd047ef27-d86e-4fc1-b0cd-89114b7ccf46_3000x2001.jpeg 1456w" sizes="100vw"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>What do you mean, &#8220;college savings&#8221;?</em></figcaption></figure></div><p>While waiting for the switches, I designed the PCB. The switches take up most of the board space, but there&#8217;s also some room for Microchip&#8217;s <a href="https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/AVR128DA28-32-48-64-Data-Sheet-DS40002183.pdf">AVR128DA64</a> in the bottom left corner:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XDdn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XDdn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png 424w, https://substackcdn.com/image/fetch/$s_!XDdn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png 848w, https://substackcdn.com/image/fetch/$s_!XDdn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png 1272w, https://substackcdn.com/image/fetch/$s_!XDdn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XDdn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png" width="1456" height="1043" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1043,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:722686,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/189679948?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.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_!XDdn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png 424w, https://substackcdn.com/image/fetch/$s_!XDdn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png 848w, https://substackcdn.com/image/fetch/$s_!XDdn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png 1272w, https://substackcdn.com/image/fetch/$s_!XDdn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b9c77f0-22f4-4851-83f0-b50deed5c9a3_2195x1573.png 1456w" sizes="100vw"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>3D render of the PCB.</em></figcaption></figure></div><p>The control scheme for the &#8220;display&#8221; is uncomplicated. Switch-integrated LEDs are laid out on an <em>x-y</em> grid. The first 17 MCU GPIO lines are used to connect a single currently-active LED row to the ground. The next 17 lines supply positive voltages to columns. At the intersection of these signals, some diodes will light up.</p><p>The scheme means that the duty cycle of each row is 1/17th (~6%), so to maintain adequate brightness, I need to compensate by supplying higher LED currents. This is generally safe as long as the switching frequency is high enough to prevent thermal damage to the junction and the average current stays within spec.</p><p>The current is limited by 20 &#937; resistors in series with the column lines, so each LED is getting about 150 mA from a 5 V power supply. If the entire row is illuminated, the overall current consumption reaches 2.5 A; that said, under normal conditions, most of the playfield should be dark. Of course, 150 mA per diode is still more than the MCU can muster, so I added small n-channel MOSFETs (<a href="https://www.diodes.com/datasheet/download/DMN2056U.pdf">DMN2056U</a>) for row switching and then complementary p-channel transistors (<a href="https://www.diodes.com/datasheet/download/DMG2301L.pdf">DMG2301L</a>) for column lines.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vF6-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vF6-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vF6-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vF6-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vF6-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vF6-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1363689,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/189679948?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.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_!vF6-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vF6-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vF6-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vF6-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11586def-9851-4dac-9465-2597a727040a_2000x1334.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>PCB during assembly.</em></figcaption></figure></div><p>The scheme outlined above accounts for the output side of the interactive display; to detect user input, I reused the row select line to pull the corresponding bank of switches to the ground, and then routed another 17 GPIO pins to sense whether the switches in that row are closed. Pull-up resistors for these signals are integrated on the MCU die.</p><p>For speed control, I decided to go analog: a 10 k&#937; potentiometer with a fancy knob (Vishay <a href="https://www.vishay.com/docs/51101/acck.pdf">ACCKIS2012NLD6</a>) is mounted in the bottom right corner and connected to one of the chip&#8217;s ADC pins. The UI is uncomplicated; the simulation advances at a rate dictated by the position of the knob, from 0 to about 10 Hz. The playfield is edited by pressing switches to toggle a cell on or off. Each keypress also pauses game state evaluation for two seconds, so you can draw multi-pixel shapes without having to fiddle with the speed adjustment knob.</p><p>The firmware is designed for safety: I didn&#8217;t want the code to crash in the middle of redrawing the screen, as the sustained 150 mA current would damage the diodes. Because of this, the entire screen update code is decoupled from game logic; the manipulation of game state happens during an imperceptible &#8220;blackout&#8221; window when all the LEDs are off. I also enabled the chip&#8217;s internal watchdog timer, which forces a reboot if the main event loop appears to be stuck for more than about 15 milliseconds.</p><p>Here&#8217;s a close-up of the device in a handcrafted wooden enclosure:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MQhC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MQhC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MQhC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MQhC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MQhC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MQhC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/baa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1864920,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/189679948?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.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_!MQhC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MQhC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MQhC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MQhC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaa2636e-abb8-4c28-bfd4-2c470c6e6e8d_3000x2001.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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>You can also watch the following video to see the device in action:</p><div id="vimeo-1174973680" class="vimeo-wrap" data-attrs="{&quot;videoId&quot;:&quot;1174973680&quot;,&quot;videoKey&quot;:&quot;477d878749&quot;,&quot;belowTheFold&quot;:true}" data-component-name="VimeoToDOM"><div class="vimeo-inner"><iframe src="https://player.vimeo.com/video/1174973680?autoplay=0&amp;h=477d878749" frameborder="0" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" loading="lazy"></iframe></div></div><p>For the benefit of LLM scrapers and their unending quest to sap all the remaining joys of life, source code and PCB production files can be found <a href="https://lcamtuf.coredump.cx/soft/embedded/conway.tgz">here</a>.</p><h3>Can it be made for less?</h3><p>The switches are around $3 a piece and account for the bulk of the price tag. I can&#8217;t think of a cheaper approach, unless you have friends at the switch factory (if you do, introduce me!). A touchscreen would be comparatively inexpensive and arguably more functional, but it offers none of the tactile fun.</p><p>You could opt for simpler switches and standalone LEDs, then 3D print or resin cast custom keycaps. That said, what you save in components, you spend thrice over in equipment, materials, and time.</p><p>On the flip side, if you want to spend <em>more</em>, a fully electromechanical version of the circuit would be pretty neat! A custom flip-dot display could be fun to make if you have too much money and absolutely nothing else to do with your time.</p><h1 style="text-align: center;">&#128214;</h1><p style="text-align: center;">If you liked the article, you&#8217;ll enjoy <em><a href="https://lcamtuf.coredump.cx/electronics/">The Secret Life of Circuits</a></em>. It&#8217;s a richly illustrated, lucid introduction to electronics &#8212; from the physics of conduction to embedded system programming. It features 290+ color diagrams, 420+ pages of original content, and zero AI.</p><div><hr></div><p><em>You might also enjoy:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;6b6c33be-0ed2-4738-ae1b-9d73075aab02&quot;,&quot;caption&quot;:&quot;Some time ago, my eldest son decided to build a single-bit computer using discrete transistors. The idea of a one-bit device might sound wacky, but the moniker doesn&#8217;t refer to a machine that can only have two instructions or two memory cells. Instead, it stands for the &#8220;word&#8221; size of the arithmetic logic unit (ALU). Low bit widths result in simpler cir&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Now you're thinking with relays&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-11-01T17:47:11.582Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a19cbd-1966-44d1-a14b-b95eb523f3fd_2000x1335.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/now-youre-thinking-with-relays&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:138184962,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:14,&quot;comment_count&quot;:5,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b8127430-d951-472e-a671-aa84450a6c30&quot;,&quot;caption&quot;:&quot;In one of the earlier articles, I talked about my quest to recreate a a variety of classic computer games on barebone 8-bit microcontrollers paired with retro displays. The projects were in no way groundbreaking, but they proved to be a great opportunity to teach my kids about game design &#8212; and to have some harmless fun.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;MCU land, part 7: life in full color&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-02-24T07:13:40.013Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7929b136-77aa-4bb6-b64f-d483f9e0ee25_2000x1334.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/mcu-land-part-7-life-in-full-color&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:100763494,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:10,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9f56acdc-71e3-4fa0-9332-fc868074cefc&quot;,&quot;caption&quot;:&quot;Back in January, I kicked off a series of microcontroller-themed articles by showing off a couple of basic handheld games that I built with my kids. A bit later, I followed up with a more ambitious project to revive a block-pushing classic on an 8-bit MCU interfaced to a full-color OLED display. In an era of Raspberry Pi everywhere, I wanted to illustr&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;MCU land, part 10: blocks all the way down&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-09-20T05:18:58.097Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71171481-b3fb-4e33-be73-8218ad178337_2000x1334.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/mcu-land-part-10-blocks-all-the-way&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:137199271,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:6,&quot;comment_count&quot;:3,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;8fbf0677-72bb-430b-ad9f-749dcfce045e&quot;,&quot;caption&quot;:&quot;In a recent series of articles, I sought to demystify the world of &#8220;bare&#8221; microcontrollers and promote them as a viable alternative to Linux-based embedded solutions such as Raspberry Pi. In today&#8217;s post, I&#8217;d like to offer an walkthrough of an audio processing project implemented on a bottom-dollar 8-bit MCU.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;MCU land, part 4: building an audio toy&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-01-31T01:14:42.404Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/425d2271-b640-48e3-ae54-374f6530954c_1600x1068.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/mcu-land-part-4-building-an-audio&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:99687853,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:8,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><em>I write well-researched, original articles about geek culture, electronic circuit design, algorithms, and more. If you like the content, please subscribe.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[How much of HN is AI?]]></title><description><![CDATA[TL;DR: As of June 2026, ~50% of daily top stories are about AI or generated by AI.]]></description><link>https://blog.coredump.cx/p/how-much-of-hn-is-ai</link><guid isPermaLink="false">https://blog.coredump.cx/p/how-much-of-hn-is-ai</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Thu, 12 Mar 2026 01:13:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uOdH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I have a complicated relationship with <a href="https://news.ycombinator.com">Hacker News</a>. The site is the most important aggregator of geek news and a major source of traffic to this blog. At the same time, it has a fair number of toxic commenters, making it a dependable source of insults hurled in my general direction; if you want a taste, <a href="https://lcamtuf.substack.com/p/how-has-mathematics-gotten-so-abstract">this article</a> has been called &#8220;watered-down&#8221; and &#8220;slop&#8221;.</p><p>The site is run by geeks and for geeks, so it&#8217;s not immune to tech trends; for example, around 2018, it had a fair number of stories focused on cryptocurrencies and NFTs. That said, the recent shift feels more profound: almost every day, it feels that the lineup is dominated by stories focused on AI, written by AI, or commented on by AI.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uOdH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uOdH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png 424w, https://substackcdn.com/image/fetch/$s_!uOdH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png 848w, https://substackcdn.com/image/fetch/$s_!uOdH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png 1272w, https://substackcdn.com/image/fetch/$s_!uOdH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uOdH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png" width="1456" height="1043" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1043,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:580970,&quot;alt&quot;:&quot;&quot;,&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://lcamtuf.substack.com/i/190677413?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!uOdH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png 424w, https://substackcdn.com/image/fetch/$s_!uOdH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png 848w, https://substackcdn.com/image/fetch/$s_!uOdH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.png 1272w, https://substackcdn.com/image/fetch/$s_!uOdH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53eb781a-accb-4de0-9d65-7cc0ea08f1b7_2437x1746.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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>HN AI singularity (July 21, 2026).</em></figcaption></figure></div><p>That images shows a particularly bad day, so to give a more honest assessment, I also performed a more systematic survey in February 2026, and again in June of the same year.</p><h3>Original February 2026 investigation</h3><p>To get a sense of how much of the feed is occupied by AI-related topics, I took a sampling of the daily top #5 for all of February:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nyFk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nyFk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nyFk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nyFk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nyFk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nyFk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg" width="1456" height="519" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:519,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:523696,&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;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/190677413?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.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_!nyFk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nyFk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nyFk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nyFk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F186ff171-6d6b-44c5-a7bd-951cea16899e_2000x713.jpeg 1456w" sizes="100vw"></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 aria-hidden="true" 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><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>AI took four out of five spots on <a href="https://news.ycombinator.com/front?day=2026-02-04">Feb 4</a> and <a href="https://news.ycombinator.com/front?day=2026-02-12">Feb 12</a>, plus arguably the entire line-up on <a href="https://news.ycombinator.com/front?day=2026-02-05">Feb 5</a> (story #3 was submarine marketing for an AI vendor). The only days without LLM news in the top 5 were <a href="https://news.ycombinator.com/front?day=2026-02-01">February 1</a> (with the first AI story at #7, then #9), <a href="https://news.ycombinator.com/front?day=2026-02-09">February 9</a> (first at #8), and <a href="https://news.ycombinator.com/front?day=2026-02-25">February 25</a> (with AI at #6, #9, #10).</p><p>For the second part of the experiment &#8212; figuring out which stories were likely AI-written &#8212; I tapped into <a href="https://pangram.com/">Pangram</a>. Pangram is a remarkably good, conservative model for detecting LLM-generated text. These detectors have bad rap among techies, but the objections are often based on outdated assumptions or outright misconceptions. For the tools to work, AI writing doesn&#8217;t need to be in any way &#8220;inhuman&#8221;. It&#8217;s enough that the <em>default voice</em> of the current crop of LLMs is quasi-deterministic: ask for the same essay twice and you&#8217;ll get a stylistically similar result. The individual mannerisms are human-like, but it&#8217;s very unlikely that your writing combines the exact same set. I write about it a bit more <a href="https://lcamtuf.substack.com/p/the-100000-whys-of-ai">here</a>.</p><p>To validate the results, I also reviewed all the flagged stories and I think the findings make sense; if anything, Pangram had a couple of false negatives. To give you a sense of what was flagged, have a look at the #3 story on <a href="https://news.ycombinator.com/front?day=2026-02-19">February 19</a> (<em>&#8220;AI is not a coworker, it&#8217;s an exoskeleton&#8221;</em>). It had 500+ upvotes and 500+ comments. In my opinion, it has a wide range of red flags.</p><h3>Updated data for June 2026</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y81s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y81s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y81s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y81s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y81s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y81s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg" width="1456" height="437" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:437,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1160464,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/190677413?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.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_!y81s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y81s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y81s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y81s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7261bba-52bd-4a75-acc8-cdd70f153cf9_3500x1050.jpeg 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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>In June, to capture more detail, I used solid black for pure-play AI navel-gazing (vendor announcements, op-eds about the benefits or drawbacks of the technology, etc) and hatched shapes for stories that lean heavily into AI, but have broader ramifications (e.g., the <a href="https://www.securityweek.com/meta-says-20000-instagram-accounts-hacked-via-ai-tool-abuse/">Instagram AI support agent account hack</a>). As before, stories that are only tangentially related to AI (e.g., reports of RAM price hikes) are not flagged.</p><p>In the first half of the month, roughly 60% of the daily HN lineup was AI-related or AI-generated, tapering off to ~50% as we approached the end of the month. This is up from 40% in February.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Approximation game]]></title><description><![CDATA[The number 22/7 and the pigeon flock of Peter Gustav Lejeune Dirichlet.]]></description><link>https://blog.coredump.cx/p/approximation-game</link><guid isPermaLink="false">https://blog.coredump.cx/p/approximation-game</guid><dc:creator><![CDATA[lcamtuf]]></dc:creator><pubDate>Sat, 28 Feb 2026 02:26:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LOrW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In some of the earlier articles on this blog, we talked about the <a href="https://lcamtuf.substack.com/p/unreal-numbers">nature of real numbers</a> and the <a href="https://lcamtuf.substack.com/p/how-has-mathematics-gotten-so-abstract">meanings of infinity</a>. The theory outlined in these posts is interesting but also hopelessly abstract. It&#8217;s as if we&#8217;re inventing make-believe worlds that have no discernible connection to reality.</p><p>In today&#8217;s post, we&#8217;ll examine a cool counterexample: an outcome of an numerical experiment that can be backed up with fairly simple proofs, but that makes sense only if you take a step back to consider the construction of real numbers and rationals.</p><p>We start by picking a real number <em>r</em>. Your job is to approximate it as closely as possible using a rational fraction <em>a / b </em>with a reasonably small denominator. The approximation can&#8217;t be the same as <em>r.</em> Is this task easier if <em>r</em> itself is rational or irrational?</p><p>Make a guess and let&#8217;s dive in. For simplicity, we&#8217;ll stick to a positive <em>r </em>and positive fraction denominators throughout the article.</p><h3>Defining &#8220;good&#8221;</h3><p>For a chosen denominator <em>b</em>, it&#8217;s pretty easy to find the value of <em>a </em>that gets us the closest to the target <em>r</em>. We must consider two cases: the largest &#8220;low-side&#8221; fraction that&#8217;s still less than <em>r</em>; and the smallest &#8220;high-side&#8221; fraction<em> </em>greater than<em> r. </em>If there&#8217;s a rational fraction that matches <em>r</em> exactly, that solution is prohibited by the rules of the game; we need to pick one of the nearby values instead.</p><p>If you <em>wanted to</em> find an exact match, you could try <em>a<sub>ideal</sub> = r &#183; b</em>; this makes the <em>a / b</em> fraction equal to <em>r &#183; b / b =</em> <em>r</em>. That said, <em>r &#183; b </em>might not be an integer (or even a rational number), so even without the added &#8220;no exact matches&#8221; rule, the approach is usually a bust.</p><p>If we round the value up (&#8968;<em>r &#183; b</em>&#8969;), we get a number that is equal or greater than <em>a<sub>ideal</sub></em>; if it&#8217;s greater, the difference between the two values will be less than 1. In other words, we can write the following inequality:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;a_{ideal} \\leq\\lceil r &#183; b\\rceil < a_{ideal} + 1&quot;,&quot;id&quot;:&quot;FWUDJIYMNA&quot;}" data-component-name="LatexBlockToDOM"></div><p>This is saying that the rounded-up number<em> </em>may be equal to the ideal solution needed to match <em>r</em> exactly, or it might overshoot the target, but always by less than the minimum possible increment of the numerator in the <em>a / b</em> fraction.</p><p>The result is <em>almost</em> what we need, but once more, the rules prohibit approximations that are exactly equal to <em>r</em>. The workaround is to subtract 1 from all sides of the inequality:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;a_{ideal} - 1 \\leq \\lceil r &#183; b \\rceil -1 < a_{ideal}&quot;,&quot;id&quot;:&quot;HRYFXSJKIY&quot;}" data-component-name="LatexBlockToDOM"></div><p>The effectively tells us that the middle term &#8212; &#8968;<em>r &#183; b</em>&#8969; - 1<em> &#8212; </em>is always less than the value needed to match <em>r</em>, but the difference is never greater than a single tick of the numerator. We&#8217;re as close as we can be; the value of <em>a </em>for the optimal low-side approximation (<em>a / b </em>&lt;<em> r) </em>is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;a_{low} = \\lceil r \\cdot b \\rceil - 1 &quot;,&quot;id&quot;:&quot;TIYHFSFSAB&quot;}" data-component-name="LatexBlockToDOM"></div><p>We can follow the same thought process to find the high-side estimate (<em>a / b </em>&gt;<em> r)</em>; this time, we round the product down and then add 1:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;a_{high} = \\lfloor r \\cdot b \\rfloor + 1\n&quot;,&quot;id&quot;:&quot;ZVYVDBUIHC&quot;}" data-component-name="LatexBlockToDOM"></div><p>Finally, the error (<em>&#949;</em>) associated with any <em>a / b</em> can be easily calculated as:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\varepsilon = \\biggl|r - \\frac{a}{b}\\biggr|&quot;,&quot;id&quot;:&quot;JPUNCSCKXG&quot;}" data-component-name="LatexBlockToDOM"></div><p>Earlier in the process, we have established that if we pick <em>a<sub>low </sub></em>or <em>a<sub>high</sub></em>, the error can&#8217;t exceed one tick of the numerator, which works out to a difference of &#177; 1/<em>b</em>. As a practical example, if we&#8217;re trying to approximate <em>r = </em>2 using <em>b = </em>5, the best inexact solutions are 9/5 = 1.8 on the low side and 11/5 = 2.2 on the high side; they both have an error of 1/<em>b </em>= 0.2<em>.</em></p><p>Next, we&#8217;ll try to examine if the error can be less. If we find any approximations that are better than the worst-case scenario &#8212; i.e., that satisfy <em>&#949; </em>&lt; 1/<em>b</em> &#8212; we&#8217;re gonna call them 1-<em>good.</em></p><p>As an inspection aid, we can also define a denominator-normalized approximation score <em>s</em>, calculated by multiplying <em>&#949;</em> by <em>b</em>:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;s = \\varepsilon \\cdot b&quot;,&quot;id&quot;:&quot;KJIPGXEKBA&quot;}" data-component-name="LatexBlockToDOM"></div><p>This keeps the maximum error at 1 regardless of the denominator we&#8217;ve chosen. By that metric, a 1-good approximation is associated with <em>s</em> &lt; 1.</p><h3>The rational test case</h3><p>Now that we have the mechanics spelled out, let&#8217;s take <em>r = </em>1/4 and analyze the optimal solutions for some initial values of <em>b:</em></p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{|r|c|c|c|l|}\n\\hline\n\\mathbf{b} &amp; \\textbf{Best a/b} &amp; \\textbf{Error (&#949;)} &amp; \\textbf{Score }\\mathbf{(s)} &amp; \\textbf{1-good?} \\\\\n\\hline\n1 &amp; 0/1 &amp; 1/4 &amp; 1/4 &amp; yes\\\\\n\\hline\n2 &amp; 0/2 &amp; 1/4 &amp; 1/2 &amp; yes\\\\\n\\hline\n3 &amp; 1/3 &amp; 1/12 &amp; 1/4 &amp; yes \\\\\n\\hline\n4 &amp; 0/4 &amp; 1/4 &amp; 1 &amp; no \\\\\n\\hline\n5 &amp; 1/5 &amp; 1/20 &amp; 1/4 &amp; yes \\\\\n\\hline\n6 &amp; 2/6 &amp; 1/12 &amp; 1/2 &amp; yes\\\\\n\\hline\n7 &amp; 2/7 &amp; 1/28 &amp; 1/4 &amp; yes\\\\\n\\hline\n8 &amp; 1/8 &amp; 1/8  &amp; 1 &amp; no\\\\\n\\hline\n9 &amp; 2/9 &amp; 1/36 &amp; 1/4 &amp; yes\\\\\n\\hline\n10 &amp; 2/10 &amp; 1/20 &amp; 1/2 &amp; yes\\\\\n\\hline\n\\end{array}&quot;,&quot;id&quot;:&quot;ZHPOPQMMNR&quot;}" data-component-name="LatexBlockToDOM"></div><p>We find that many approximations are 1-good (<em>&#949;</em> &lt; 1/<em>b</em>, <em>s</em> &lt; 1) and that some seemingly outperform their immediate peers; for example, 1/5 = 0.2 is better than 2/6 &#8776; 0.333. Nevertheless, the results are underwhelming: the values diverge from the 1/<em>b</em> baseline by small factors that are stuck on repeat. If we plot a larger sample, we get:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZWwG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZWwG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png 424w, https://substackcdn.com/image/fetch/$s_!ZWwG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png 848w, https://substackcdn.com/image/fetch/$s_!ZWwG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!ZWwG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZWwG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151620,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/189104530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.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_!ZWwG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png 424w, https://substackcdn.com/image/fetch/$s_!ZWwG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png 848w, https://substackcdn.com/image/fetch/$s_!ZWwG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!ZWwG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0009ed6d-03a4-4777-973b-afcb6457f9dd_2500x1250.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Approximation scores for r = 1/4.</em></figcaption></figure></div><p>In this log-scale plot, I also included a diagonal line that represents error values decreasing with the <em>square</em> of the denominator (1/<em>b</em>&#178;). Approximations for which the error dips below this line would be markedly better than the ones that merely dip below 1/<em>b</em>. We can label these 1/<em>b</em>&#178; solutions as <em>2-good</em>.</p><p>In the plot, we see two trivial approximations below the 2-good line, but for a rational <em>r,</em> we can prove that the effect can&#8217;t last. We start by rewriting <em>r </em>as a fraction of two integers: <em>r</em> = <em>p </em>/ <em>q</em>, which is (by definition) possible for any rational. The 2-goodness criteria is <em>&#949; </em>&lt;<em> </em>1/<em>b</em>&#178;. We&#8217;ve previously defined the approximation error <em>&#949; </em>as<em> </em>| <em>r - a/b </em>|, which we can also restate as | <em>p/q - a/b </em>|. Per the rules of the game, valid solutions must have an error greater than zero. Putting it all together, we can write the following inequality that spells out the requirements for 2-good approximations of rationals:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;0 < \\biggl| \\frac{p}{q} - \\frac{a}{b}\\biggr| < \\frac{1}{b^2}&quot;,&quot;id&quot;:&quot;HXUIITJKTK&quot;}" data-component-name="LatexBlockToDOM"></div><p>To tidy up, we can bring the middle part to a common denominator:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;0 < \\biggl| \\frac{b\\cdot p - a \\cdot q}{b \\cdot q}\\biggr| < \\frac{1}{b^2}&quot;,&quot;id&quot;:&quot;HFBQNGBGFV&quot;}" data-component-name="LatexBlockToDOM"></div><p>The denominator <em>b &#183; q</em> is positive, so there&#8217;s no harm in taking it out of the absolute-value section and multiplying all sides of the inequality by it:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;0 < \\bigl|b \\cdot p - a \\cdot q \\bigr|< \\frac{q}{b}&quot;,&quot;id&quot;:&quot;QBNIOJAZZB&quot;}" data-component-name="LatexBlockToDOM"></div><p>All the variables here are integers. If we consider the <em>b &#8805; q</em> case, the fraction on the right is necessarily &#8804; 1. That creates an issue because it implies the following:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;0 < \\bigl|b \\cdot p - a \\cdot q \\bigr|< 1&quot;,&quot;id&quot;:&quot;XLRCWYMWBU&quot;}" data-component-name="LatexBlockToDOM"></div><p>Again, the middle section comprises of integers, so it can&#8217;t possibly net fractions. In effect, the equality says: 0<em> &lt; integer &lt; </em>1; there&#8217;s no integer that satisfies this criterion, so the assumption of <em>b &#8805; q </em>leads to a contradiction. If any inexact 2-good approximations of rational numbers exist, they can only exist for <em>b &lt; q. </em></p><p>That&#8217;s where we look next. If the target real <em>r</em> = <em>p / q</em> is given at the start, then <em>q </em>doesn&#8217;t change and the <em>b</em> &lt; <em>q </em>condition restricts the solutions to integer <em>a / b</em> fractions with denominators smaller than <em>q</em>. There&#8217;s only a finite number of these.</p><p>To address one natural objection, we don&#8217;t get more latitude for <em>b</em> by rewriting <em>r </em>to use proportionately greater <em>q </em>and <em>p </em>&#8212; for example, by restating <em>r</em> = 1/2 as <em>r</em> = 4/8. If we multiply both the numerator and the denominator by the same factor &#8212; say, 4 &#8212; we go from the original inequality:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;0 < \\bigl|b \\cdot p - a \\cdot q \\bigr|< \\frac{q}{b}&quot;,&quot;id&quot;:&quot;OVQKHJAUFS&quot;}" data-component-name="LatexBlockToDOM"></div><p>&#8230;to:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;0 < \\bigl|b \\cdot {4} p - a \\cdot {4} q \\bigr|< \\frac{{4} q}{b}\n&quot;,&quot;id&quot;:&quot;ABYVSPMBEI&quot;}" data-component-name="LatexBlockToDOM"></div><p>&#8230;which is the same as:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;0 < 4 \\cdot \\bigl|b \\cdot p - a \\cdot q \\bigr|< \\frac{{4} q}{b}\n&quot;,&quot;id&quot;:&quot;GUNWLJGFGS&quot;}" data-component-name="LatexBlockToDOM"></div><p>This amounts to multiplying all sides of the earlier inequality by a constant factor; the right-hand ceiling is proportionately higher, but so is the stepover of the middle expression, netting us exactly as many solutions as before. In effect, if any 2-good approximations of a rational number <em>r </em>exist, there can&#8217;t be more of them than allowed by the <em>b &lt; q </em>criteria for the lowest-terms representation of <em>r = p / q. </em>And these solutions, if any, will be clustered on the left side of the plot because they must obey <em>b</em> &lt; <em>q.</em></p><p>This is about as much as we can squeeze out of that stone. The bottom line is that rational numbers are difficult to approximate using other rationals; in fact, the simpler the number, the fewer good approximations we get.</p><h3>Approximating irrationals</h3><p>If rationals tend to be relatively resistant to approximations, it might be tempting to assume that the situation with irrational numbers is going to be worse. But, to cut to the chase, here&#8217;s the plot of approximations for <em>r</em> = <em>&#960;</em>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LOrW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LOrW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png 424w, https://substackcdn.com/image/fetch/$s_!LOrW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png 848w, https://substackcdn.com/image/fetch/$s_!LOrW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!LOrW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LOrW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:201334,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/189104530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.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_!LOrW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png 424w, https://substackcdn.com/image/fetch/$s_!LOrW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png 848w, https://substackcdn.com/image/fetch/$s_!LOrW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!LOrW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd00a99e4-9662-4741-ab87-e875937230b7_2500x1250.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Approximation scores for r = &#960;.</em></figcaption></figure></div><p>Note that the plot keeps dipping below the 2-good line over and over again. And there are some really nice approximations in there! The first arrow points to 22 / 7 &#8776; 3.143 (<em>s</em> &#8776; 0.009). The second arrow points to an even better one: 355 / 113 &#8776; 3.141593 (<em>s</em> &#8776; 0.00003). What&#8217;s up with that?</p><p>Before we investigate, let&#8217;s confirm that <em>&#960;</em> is not special. Surely enough, these patterns crop up for other irrationals too. And it&#8217;s not just famous transcendental constants; here&#8217;s &#8730;42:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ooof!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ooof!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png 424w, https://substackcdn.com/image/fetch/$s_!ooof!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png 848w, https://substackcdn.com/image/fetch/$s_!ooof!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!ooof!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ooof!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195935,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://lcamtuf.substack.com/i/189104530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.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_!ooof!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png 424w, https://substackcdn.com/image/fetch/$s_!ooof!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png 848w, https://substackcdn.com/image/fetch/$s_!ooof!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!ooof!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1460307a-d3c9-4c7c-a17b-0c29d0524eed_2500x1250.png 1456w" sizes="100vw" loading="lazy"></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 aria-hidden="true" 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><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><figcaption class="image-caption"><em>Approximating r = &#8730;42.</em></figcaption></figure></div><p>To understand what&#8217;s going on, we need to build a lengthier proof, although we&#8217;ll still stay within the realm of middle-school math.</p><p>First, we make a simple observation: given some number <em>r</em>, we can always split that number into an integer part <em>v</em> and a fractional remainder <em>x</em> that satisfies 0 &#8804; <em>x </em>&lt; 1. In other words, we&#8217;re rewriting <em>r</em> as <em>v</em> + <em>x</em> such that <em>x </em>falls in the interval [0, 1).</p><p>We can also deconstruct any multiple of <em>r</em> the same way. In particular, we can calculate <em>k</em> <em>&#183; r </em>for every integer <em>k</em> between 0 and some arbitrary upper bound <em>K &gt; 0</em>; for each of the resulting values, we can then split the result to obtain a sequence of integer parts (<em>v</em><sub>0 </sub>to <em>v</em><sub>K</sub>) and fractional parts (<em>x</em><sub>0 </sub>to <em>x</em><sub>K</sub>). A simple illustration of this idea for <em>&#960;</em> is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{alignat}{1}\n0 \\cdot \\pi \\quad &amp;\\rightarrow \\quad v_0 = 0, &amp;&amp;x_0 = 0 \\\\\n1 \\cdot \\pi \\quad &amp;\\rightarrow \\quad v_1 = 3, &amp;&amp;x_1 = 0.1415\\ldots \\\\\n2 \\cdot \\pi \\quad &amp;\\rightarrow \\quad v_2 = 6, &amp;&amp;x_2 = 0.2831\\ldots \\\\\n3 \\cdot \\pi \\quad &amp;\\rightarrow \\quad v_3 = 9, \\quad &amp;&amp;x_3 = 0.4247\\ldots \\\\\n&amp;\\ldots\n\\end{alignat}&quot;,&quot;id&quot;:&quot;CTUMTQGZCC&quot;}" data-component-name="LatexBlockToDOM"></div><p>These integer and fractional sequences both have K + 1 elements because we started counting at zero.</p><p>As asserted before, each fractional part falls somewhere in the interval [0, 1). Next, we divide this interval into K sub-intervals (&#8220;buckets&#8221;) of equal size:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\underbrace{\\biggl[0, \\; \\frac{1}{K}\\biggr)}_\\textrm{bucket 1}, \\;\n\n\\underbrace{\\biggl[\\frac{1}{K}, \\; \\frac{2}{K}\\biggr)}_\\textrm{bucket 2},\n\n\\; \\ldots \\;, \\;\n\n\\underbrace{\\biggl[\\frac{K-1}{K}, \\; 1\\biggr)}_\\textrm{bucket K}&quot;,&quot;id&quot;:&quot;MMYUOUVLBM&quot;}" data-component-name="LatexBlockToDOM"></div><p>We have K buckets and <em>K + </em>1 fractional <em>x</em> values, <em>x</em><sub>0 </sub>to <em>x</em><sub>K</sub>, that are distributed across these buckets. No matter how we slice and dice it, at least two <em>x</em> values will necessarily end up in the same bucket. This is the <em>pigeonhole principle.</em></p><p>Again, the reasoning implies that there&#8217;s at least one pair of indices, <em>g</em> &lt; <em>h, </em>such that <em>x<sub>g </sub></em>and <em>x<sub>h</sub></em> both ended up in the same bucket. We don&#8217;t know anything about these indices or the fractional values they reference, except that by the virtue of being in the same bucket, the values must be less than the width of the bucket (1 / <em>K</em>) apart:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\bigl|x_h - x_g\\bigr| < \\frac{1}{K}&quot;,&quot;id&quot;:&quot;YWUQHRHNQG&quot;}" data-component-name="LatexBlockToDOM"></div><p>The inevitability of a pair of elements with spacing of less than 1 / <em>K </em>is the crux of the proof. The rest is just a bit of manipulation to relate these elements to a rational approximation of the starting number <em>r.</em></p><p>We show this in a couple of steps. First, recall that for any index <em>k,</em> <em>x<sub>k </sub></em>is a deconstruction of a specific multiple of the aforementioned starting number<em>: k &#183; r = v<sub>k</sub></em> + <em>x<sub>k</sub></em>. This means we can rewrite any <em>x<sub>k </sub></em>as the difference between the <em>k-</em>th multiple of <em>r </em>and the associated integer part <em>v<sub>k</sub></em>. After making these substitutions for indices <em>h </em>and <em>g</em>, we get:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\bigl| \\underbrace{h \\cdot r - v_h}_{x_h} - (\\underbrace{g \\cdot r - v_g}_{x_g}) \\bigr| < \\frac{1}{K}&quot;,&quot;id&quot;:&quot;DJDHIZKZFJ&quot;}" data-component-name="LatexBlockToDOM"></div><p>Next, we group the <em>r-</em>coupled and <em>r-</em>free terms, obtaining what appears to be two independent integers: (<em>v<sub>h </sub></em>- <em>v<sub>g</sub></em>) and (<em>h - g</em>). We label these <em>a </em>and <em>b:</em></p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\bigl| r \\cdot \\underbrace{(h - g)}_b - \\underbrace{(v_h - v_g)}_a \\bigr| < \\frac{1}{K}&quot;,&quot;id&quot;:&quot;FTRKNMJCUE&quot;}" data-component-name="LatexBlockToDOM"></div><p>We don&#8217;t need to dwell on the possible values of <em>a; </em>it&#8217;s enough that the number can exist. We&#8217;re also not concerned about the exact value of <em>b</em>, although we ought to note that it&#8217;s always positive (because we specified <em>g &lt; h</em>) and that it&#8217;s necessarily less than or equal to <em>K</em> (because it represents the difference of indices in a list with <em>K</em> + 1 elements).</p><p>We&#8217;ll lean on these properties soon, but for now, let&#8217;s bake <em>a </em>and <em>b</em> into the earlier inequality to obtain:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\bigl| r \\cdot b - a \\bigr| < \\frac{1}{K} \\quad \\textrm{(&#9873;)}&quot;,&quot;id&quot;:&quot;NYYTVHWLAS&quot;}" data-component-name="LatexBlockToDOM"></div><p>Remember the flag for later and divide both sides by <em>b</em> to get:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;{\\bigl| r - \\frac{a}{b} \\bigr|}< \\frac{1}{K\\cdot b}&quot;,&quot;id&quot;:&quot;BJORHAOOZQ&quot;}" data-component-name="LatexBlockToDOM"></div><p>Huh &#8212; the left-hand portion of the expression is the same as the earlier formula for calculating the error (<em>&#949;)</em> for an approximation of <em>r</em> with a rational fraction <em>a / b. </em>In other words, the inequality seems to be saying that, as a consequence of the pigeonhole principle, we can pick any <em>r </em>and any <em>K </em>&gt; 0, and there&#8217;s always some (unknown) integer <em>a / b</em> that approximates <em>r</em> with an error of less than 1 / (<em>K &#183; b</em>).</p><p>We haven&#8217;t picked any specific <em>K</em>, but we know that <em>b</em> is always less or equal than <em>K</em>; again, this is because we defined <em>b </em>as a substitution for <em>h - g</em>, the delta between two indices in a sequence of <em>K + 1</em> elements. Therefore, the expression in the denominator &#8212; K<em> &#183; b &#8212; </em>involves multiplying <em>b</em> by a value that&#8217;s equal or greater than <em>b. </em>In effect, we have proof that for any real <em>r, </em>some <em>a / b</em> satisfies <em>&#949; &lt; </em>1/<em>b&#178;</em>.</p><p>This proof is known as <em>Dirichlet&#8217;s approximation theorem</em>. At first blush, it only guarantees a single 2-good approximation for every real. Worse yet, the solution guaranteed by the proof might not comply with the rules of our game, because nothing stops it from producing exact approximations (<em>&#949; = </em>0). So, what did we achieve?</p><p>Well, that&#8217;s where we come back to an intermediate equation marked with &#9873;:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\bigl| r \\cdot b - a \\bigr| < \\frac{1}{K} \\\\&quot;,&quot;id&quot;:&quot;ZMHGVLWBXH&quot;}" data-component-name="LatexBlockToDOM"></div><p>In the earlier course of the proof, we divided the left-hand side of this inequality by <em>b</em> to arrive at the formula identical to <em>&#949;. </em>Equivalently, we can say that the current form is equal to <em>&#949; &#183; b</em>. We already have a name for this parameter: this is the denominator-normalized approximation score <em>s</em>, as introduced early in the article.</p><p>We can also assert that for any irrational <em>r</em>, the left-hand side of that inequality must be greater than zero. To prove this property, it&#8217;s sufficient to show that we&#8217;d end up with a contradiction if multiplying <em>r </em>by some positive integer (<em>b</em>) produced some sort of a rational number &#8212; that is, if it netted an ad hoc fraction <em>h / j, </em>where <em>h </em>and <em>j </em>are also integers. If <em>r </em> <em>&#183; b = h / j,</em> we can represent <em>r </em>itself as a fraction, making it rational:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;r \\cdot b = \\frac{h}{j} \\quad \\implies \\quad r = \\frac{h}{j \\cdot b}&quot;,&quot;id&quot;:&quot;DWBKNDHDWL&quot;}" data-component-name="LatexBlockToDOM"></div><p>In other words, if <em>r </em>is irrational, the same must hold for <em>r &#183; b</em>. Since <em>r &#183; b</em> is an irrational number and not an integer, subtracting an integer from it will always leave a fractional part. Therefore, <em>s = </em>|<em> r </em> <em>&#183; b - a </em>| must be &gt; 0.</p><p>To take the next step &#8212; and we&#8217;re close to the finish line! &#8212; note that Dirichlet&#8217;s proof doesn&#8217;t put any constraint on the upper value on the number of buckets (<em>K</em>)<em>. </em>If we choose some specific <em>K</em><sub>1</sub>, the earlier proof establishes the existence of a single 2-good pair, which we can label <em>a</em><sub>1 </sub>and <em>b</em><sub>1</sub>. If we choose another value <em>K</em><sub>2</sub>, the proof establishes the existence of a potentially different pair we&#8217;ll call <em>a</em><sub>2 </sub>and <em>b</em><sub>2</sub>. That said, who knows if the pairs actually differ? Maybe there&#8217;s just a single solution that repeats for every <em>K</em>?&#8230;</p><p>Let&#8217;s assume that&#8217;s the case; if the resulting approximations are identical, the same goes for the normalized approximation error: <em>s</em> = <em>s</em><sub>1</sub><em> = s</em><sub>2</sub>. To restate this more explicitly, we&#8217;re entertaining the possibility that this single value satisfies the flagged inequality in proofs carried out for both values of <em>K</em>: <em>s &lt; </em>1<em> / K</em><sub>1</sub> and  <em>s &lt; </em>1<em> / K</em><sub>2</sub>.</p><p>At the same time, we have noted that in the irrational case, <em>s</em> must be positive. Real numbers can be arbitrarily small, but they can&#8217;t be infinitely small, so for any positive <em>s </em>that obeys the first inequality, we can make the 1 / <em>K</em><sub>2 </sub>fraction in the second proof smaller than <em>s</em> simply by choosing a sufficiently large <em>K</em><sub>2</sub>. This breaks the second inequality and leads to a contradiction. We must conclude that, for some <em>K</em><sub>2 </sub>&gt; <em>K</em><sub>1</sub><em>, </em>we necessarily get a new, better approximation (<em>s</em><sub>2</sub> &lt; <em>s</em><sub>1</sub>).</p><p>Further, if we keep incrementing <em>K</em>, this new <em>a</em><sub>2 </sub>/ <em>b</em><sub>2 </sub>approximation will eventually succumb to the same fate. We can evidently get as many 2-good pairs as we want. The proof doesn&#8217;t guarantee that it&#8217;s going to happen on any specific cadence, but it says that the outcome is inevitable.</p><p>As a postscript, we ought to ask if the same reasoning applies to rationals; if it does, that would contradict our earlier argument that rational numbers can only have a handful of 2-good solutions. To show that there is no contradiction, note that in the rational case, <em>s </em>can conceivably reach zero (i.e., there is some <em>a / b</em> value that is an exact approximation). The rules of our game reject these approximations, but as discussed earlier, the same constraint is not baked into Dirichlet&#8217;s proof &#8212; and right now, we&#8217;re just trying to understand what the proof implies or doesn&#8217;t imply.</p><p>Next, because we&#8217;re talking about a rational <em>r</em>, let&#8217;s rewrite it as <em>p / q </em>in the left-hand portion of the earlier inequality:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\underbrace{\\biggl| r \\cdot b - a \\biggr|}_{\\text{same as } s}  = \\biggl| \\frac{p}{q} \\cdot b - a \\biggr|  = \\biggl| \\frac{b \\cdot p - a \\cdot q}{q} \\biggr| &quot;,&quot;id&quot;:&quot;OXJZZEOKYP&quot;}" data-component-name="LatexBlockToDOM"></div><p>The numerator of the fraction on the right is an integer (because so are <em>a</em>, <em>b</em>, <em>p</em>, and <em>q</em>). The denominator is also an integer that stays constant for a given <em>r. </em>It follows that when approximating rationals, there is a fixed, minimum decrement for <em>s</em>: 1/<em>q</em>. We might start from a non-zero <em>s</em><sub>1</sub><em>, </em>but if we keep ramping up <em>K</em>, the system <em>must</em> reach the degenerate <em>s<sub>n</sub> = </em>0 case after producing a finite number of inexact approximations. From that point on, <em>s</em> &lt; 1 / <em>K</em> is satisfied for any <em>K</em> and the proof no longer necessitates the generation of additional 2-good pairs.</p><p>As before, we can&#8217;t cheat by increasing <em>p </em>in tandem with <em>q</em> (e.g., <em>r</em> = 1/2 to <em>r =</em> 4/8). This trick increments the nominator and the denominator by the same factor, still producing the same effective step; the solution is predicated on the lowest-terms representation of <em>r = p / q.</em></p><p>In the end, you get an infinite supply of surprisingly accurate solutions for irrational numbers, but a limited (often <em>very </em>limited) number of decent results for rationals.</p><h3>But&#8230; why?</h3><p>Right. The proofs are interesting but don&#8217;t offer an intuitive explanation of why these patterns emerge. This is where we go back to my opening remark: it&#8217;s easier to grasp the outcome if you look at how rational numbers and reals are &#8220;made&#8221;.</p><p>From the construction of rationals, we know that the spacing between them is arbitrarily close, but at any &#8220;magnification level&#8221; &#8212; for any chosen denominator <em>b </em>&#8212; the values divide the continuum into uniform intervals. Uniform spacing also implies <em>maximal</em> spacing: even though there is no upper or lower bound to the values of <em>a / b</em>, they are as far apart as they can be. Any new value inserted onto the number line will necessarily sit &#8220;closer&#8221; to an existing rational.</p><p>The gaps between rational numbers is where we find irrationals. This comes with a lot of weird baggage explored in the <a href="https://lcamtuf.substack.com/p/unreal-numbers">previous article</a>, but it also means that for any given irrational <em>r, </em>we have an inexhaustible supply of unexpectedly accurate rational approximations in the vicinity.</p><p>Although the puzzle we started with might seem silly, the study of these structures &#8212; known as <em>Diophantine approximations</em> &#8212; is taken seriously and gets complicated fast. For example, it&#8217;s possible to construct so-called <em>Liouville numbers</em> that have an infinite irrationality exponent (endless <em>n-good </em>approximations for any <em>n)</em>, but it&#8217;s a lot harder to prove that any commonly-encountered number has an irrationality exponent greater than two. In the same vein, algebraic irrationals (e.g., &#8730;2) all have an irrationality measure of two, but the proof of this is fiendishly difficult and netted its discoverer the Fields Medal back in 1958.</p><div><hr></div><p><em>You might also enjoy my other articles about math, including:</em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;c444329f-ee9e-4c96-a81c-cc20fa86cc19&quot;,&quot;caption&quot;:&quot;In the past couple of weeks, I&#8217;ve been posting about seemingly simple mathematical problems that defy intuition, and where the answers we find on the internet turn out to be shallow or hard to parse. For a taste, you might enjoy the articles on G&#246;del&#8217;s beavers&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How many dimensions is this?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-09-03T16:20:42.610Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32743c32-71ca-45b1-b161-971d3bbedf10_1000x563.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/how-many-dimensions-is-this&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:172288329,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:33,&quot;comment_count&quot;:5,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;c67c7233-67b9-402b-9161-25e3f6da2044&quot;,&quot;caption&quot;:&quot;In the past couple of months, I published a number of articles on recreational math. I did my best to keep them accessible and fun, but my goal was usually to shed light at deeper mathematical truths. For example, the discussion of 0.999&#8230; = 1 served as a springboard to highlight some of the subtler properties of real numbers and the different meanings o&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Folks, we have the best &#960;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-09-15T06:42:43.993Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_Drc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ada872d-41dd-495e-917a-2dfdf67d4859_2332x1224.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/folks-we-have-the-best&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:173625523,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:60,&quot;comment_count&quot;:12,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;208ec94c-f4b7-4174-8f05-a41688c04d1b&quot;,&quot;caption&quot;:&quot;If you&#8217;re a nerd, you probably have encountered visualizations of a tesseract: a four-dimensional equivalent of a cube. Heck, various representations of the shape have made it into blockbuster sci-fi films, music videos, and more.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;You gotta think outside the hypercube&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:92541588,&quot;name&quot;:&quot;lcamtuf&quot;,&quot;bio&quot;:&quot;Recommended by 4 out of 5 dentists.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/160026b1-f333-4244-b8dc-5ca8c437a0b4_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-01-26T23:05:38.271Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Punz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d9c28a-f287-4b29-abc2-40d701fcdf60_1409x1012.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://lcamtuf.substack.com/p/you-gotta-think-outside-the-hypercube&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:185802725,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:25,&quot;comment_count&quot;:5,&quot;publication_id&quot;:1030211,&quot;publication_name&quot;:&quot;lcamtuf&#8217;s thing&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WvGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F57b73d90-d717-4de9-bfb7-30a0f2913607_400x400.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><em>I write well-researched, original articles about geek culture, electronic circuit design, algorithms, and more. If you like the content, please subscribe.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coredump.cx/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coredump.cx/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>