<?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[The Cantankerous Coder]]></title><description><![CDATA[You kids! Get off of my lawn!]]></description><link>https://www.cantankerouscoder.com</link><image><url>https://substackcdn.com/image/fetch/$s_!1nvj!,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%2F84f28492-d129-442b-b4ce-c1f77be016a3_500x500.png</url><title>The Cantankerous Coder</title><link>https://www.cantankerouscoder.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 03 Apr 2026 20:23:15 GMT</lastBuildDate><atom:link href="https://www.cantankerouscoder.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Charles F. Munat]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[cantankerouscoder@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[cantankerouscoder@substack.com]]></itunes:email><itunes:name><![CDATA[Chas.]]></itunes:name></itunes:owner><itunes:author><![CDATA[Chas.]]></itunes:author><googleplay:owner><![CDATA[cantankerouscoder@substack.com]]></googleplay:owner><googleplay:email><![CDATA[cantankerouscoder@substack.com]]></googleplay:email><googleplay:author><![CDATA[Chas.]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Science as religion]]></title><description><![CDATA[It's worse than you think.]]></description><link>https://www.cantankerouscoder.com/p/science-as-religion</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/science-as-religion</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Sun, 13 Oct 2024 02:14:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1nvj!,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%2F84f28492-d129-442b-b4ce-c1f77be016a3_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Well, obviously I&#8217;ve been busy, as I see it has been nearly a year since my last post. Very sorry about that! I will try to do better (if anyone cares).</p><p>That said, I&#8217;ve no shortage of ideas for essays, so hopefully I can maintain a pace of at least one per month from here on out.</p><p>One subject that has been percolating in my mind for many years now is that of science and its bastard stepchild, technology. I&#8217;ve had a few things to say about technology here&#8212;this is, after all, a tech blog, sort of&#8212;but little to say about the &#8220;science&#8221; behind it.</p><p>Let&#8217;s correct that oversight.</p><h2>Dave&#8217;s not here</h2><p>For half a decade or so, I had a very good friend by the name of David. In many ways, he and I were opposites, but in important ways we were on the same page. And the ways in which we agreed were ways in which we were almost alone in our beliefs.</p><p>This tends to make for tight friendships.</p><p>Eventually, we talked ourselves out and parted ways, but before we did, some striking differences came to the fore. One of these was our individual views on science.</p><p>Dave believed that science is a religion. I agree. But we differed on why.</p><p>The fulcrum was the scientific method. I am pretty sure that David doesn&#8217;t really understand the method&#8212;and that he doesn&#8217;t really want to. One of the things I learned about David over the years is that he had very strong emotional ties to certain perspectives.</p><p>He could be brilliantly analytical. He wrote, frankly, the best political essays I&#8217;ve ever read. And I&#8217;ve read a lot of essays. But, as with most people, there were certain topics where emotion won out and it was pointless to argue with him.</p><h2>The scientific method is perfect &#8230; theoretically</h2><p>My argument&#8212;my <em>disagreement&#8212;</em>with David is that what he called &#8220;science&#8221; and decried was <em>not actually science at all.</em></p><p>Science is the product of the scientific method <em>properly applied.</em></p><p>David thought that all science was religious bullshit because &#8230; well, because it just is. So the scientific method was also bullshit. But I argued that most (not all) science is religious bullshit because so-called &#8220;scientists&#8221; mostly aren&#8217;t scientists at all.</p><p>That is, most people who work in &#8220;science&#8221; and call themselves scientists are actually charlatans to various degrees. And the reason this is so is because <strong>they do not correctly apply the scientific method</strong>. And most of them know that they are cheating, but they have compelling reasons to cheat.</p><p>Most laypeople have no clue what the scientific method is or how it works. If they know about it at all, then they think that it determines whether an hypothesis is true. That&#8217;s wrong.</p><p>The scientific method determines whether an hypothesis is <em>false. </em>The idea is that by eliminating false answers, we can work steadily toward a better and better <strong>approximation of the truth</strong>.</p><p>Note: I did not say toward<em> the truth.</em> I said toward a <em>better and better approximation</em> of the truth.</p><p>If you have something that is clearly falsifiable, but after multiple attempts you are unable to prove it false, well then it <em>might</em> just be true.</p><h2>Most people have binary brains</h2><p>Sadly, most people have binary brains. That is, they see things as either one thing or another. The idea that there might be a continuum along which a thing might be partly one and partly the other is painful to them. They prefer to push things to the extremes.</p><p>All or nothing.</p><p>I have had countless arguments with humans in which I have tried without success to convince them to back off from one or another pole a little. But if I tell them that I do not <em>fully</em> agree with one pole, <em>they immediately claim that I am defending the opposite pole.</em></p><p>We can see this all over social media these days. Some people and ideas (and even nations) have been demonized and others lionized. If you point out either that the lionized nation has done some bad things, or that the demonized nation has done some good things (or didn&#8217;t do some of the bad things), then you are immediately tarred as a bad guy.</p><p>Again, it&#8217;s all or nothing.</p><p>There are only two options in their minds: hero or Hitler. If I do manage to coax them off the ledge, they will say something such as, &#8220;Well, of <em>course</em>, he wasn&#8217;t perfect! No one is.&#8221;</p><p>But the truth is that they will immediately revert to believing that he is/was indeed <em>perfect</em>. There is no middle ground. Everything else goes down the memory hole.</p><p>So when you tell most people that the scientific method does not produce truth <em>but only an approximation to the truth</em> (and then only when done properly), they just don&#8217;t get it. Either &#8220;science&#8221; is true, or it isn&#8217;t. Right?</p><p>But this is the <em>antithesis</em> of the scientific method, which <strong>never</strong> claims that something is absolutely true or false.</p><p>Scientists, especially the good ones, struggle with this all the time. If you actually listen to them, then you will find them saying regularly, &#8220;No, that&#8217;s not what I said.&#8221; That is the sound of a scientist trying to explain shades of gray to a black and white mind. Good luck.</p><h2>The method is not the problem</h2><p>This is where David and I parted ways.</p><p>I said that the scientific method is <strong>the best tool we have for approaching the truth</strong>. Because it is. But that most of what passes as &#8220;science&#8221; is the result of shocking misuse of the tool.</p><p>In fairness, the scientific method is an ideal, not a reality. In <em>theory</em> it works perfectly to move us steadily forward in our understanding of the world. But in <em>practice</em>, it is far from a perfect tool.</p><p>Partly this is a flaw in how humans <em>must</em> use the method. Because of our finite brains, we tend to apply the method by <strong>isolating factors</strong>. If we are testing A, then we try to hold B to Z constant. This is the only way in which we can determine which consequences are directly the result of changing A.</p><p>But that&#8217;s not how the universe works. Nothing is ever really in isolation. Everything is connected. There is always a context. And this context has a significant effect on what happens.</p><p>Also, there are combined effects. Maybe A + B is greater than just the sum of A and B.</p><p>We can test this, too, but we can&#8217;t test <em>every</em> possible combination of factors. That number is infinite or nearly so. And as the universe is in a state of constant change, what works today might not work tomorrow.</p><p>The upshot is that the outcome of the scientific method is always and <em>at best</em> an approximation of the truth under very specific <em>and limited</em> circumstances. We need to keep that in mind continually.</p><p>What this means is that what we believe today might be updated tomorrow. That doesn&#8217;t mean we were &#8220;wrong&#8221; today, just that we weren&#8217;t <em>as right</em> as we might be tomorrow.</p><p>And sometimes we actually go backwards. It&#8217;s not a steady forward progress. There are dead ends and blind alleys.</p><h2>Humans cannot do science</h2><p>We just can&#8217;t.</p><p>One major reason is cognitive bias. How many cognitive biases have we uncovered? It must be hundreds by now. And there is little we can do to work around them.</p><p>These biases corrupt our experiments regardless of our best intentions. We can work around this a bit by having many different teams from different cultures and worldviews repeat the same experiments, but that&#8217;s time consuming and politics comes into play.</p><p>But then politics is involved in <em>every</em> human endeavor. So every scientific experiment takes place in a political context. Does anyone really think that we can ignore that context?</p><p>And every bit as powerful as the political context is the <em>economic</em> context. Most of the &#8220;science&#8221; done today is heavily biased by economic concerns, generally with regard to what kind of <strong>technology</strong> might come out of that science.</p><p>You can see this very clearly in the health industry, where there is plenty of funding to extend and preserve the IP of drugs but little money to find cures. Mitigation, especially if expensive, is a guaranteed steady source of profits. Cure a disease and you get one big bang and then nothing.</p><p>And for all the talk of science for science&#8217; sake, it is obvious that the major funding sources are really only interested in science that leads to new and profitable technologies.</p><p>Finally, there is the human element. Scientists are humans. Shocking, I know. And humans are <em>mediocre</em>. Most teachers are mediocre. Most lawyers are mediocre. Most doctors are mediocre. Why do we keep lying to ourselves that scientists are somehow an exception? Most <em>humans</em> are mediocre. It&#8217;s the definition of mediocre!</p><p>And humans have all sorts of motivations. Some seek fame and prestige. Some want to get rich. Some have ideas to which they are wedded and are determined to &#8220;prove&#8221; true. And all are always worried about funding.</p><p>I have worked with scientists on multiple occasions, and in <em>every</em> instance I watched as they cheated a bit. Some more, some less, but if the data wasn&#8217;t there and they were in danger of losing their funding, then they &#8220;found&#8221; the data. I watched as data that contradicted their findings disappeared while other data was highlighted. Cherry picking, we call it.</p><p>Was this egregious? Not in the instances I saw, although plenty such instances have been revealed in the media. But it was <em>consistent.</em> And there were always rationalizations provided for why it was &#8220;OK&#8221; to do what they were doing.</p><h2>The media isn&#8217;t helping</h2><p>Even when the science is good, the media doesn&#8217;t help. The media is interested in audience numbers. After all, <em>audience is what they&#8217;re selling. </em>Within limits, anything that increases audience is good and anything that doesn&#8217;t is bad.</p><p>What those limits are vary depending on the positioning of that organization. A peer-reviewed journal might (might) be a bit tighter than the <em>New York Times</em>, which is probably considerably tighter than <em>National Enquirer. </em>Some organizations appear to have no limits at all.</p><p>So even when the science is done well, the media may present it in a way that gets it all wrong. At the very least, the media tend to push everything to one or the other pole.</p><p>The consequence of this is that the lay public rushes from one belief to another, with little understanding of <em>why</em> they believe what they believe. And those who reject &#8220;science&#8221;, like my old friend, David, often end up believing the opposite of whatever &#8220;science&#8221; says simply because it&#8217;s the opposite.</p><p>None of these are good approaches to living.</p><p>To make all this clear with my former friend, David, I tried to make a distinction between science in theory and science as it is actually practiced. I used a capital to distinguish the latter: science is the real thing; Science is what the media sells.</p><h2>Why this all sucks</h2><p>David refused to acknowledge the distinction I was making. Science was bullshit in his view. The problem with this is that, despite all its flaws, without science or, at least, Science <em>we have no honest measure for determining what is likely true and what is likely not.</em></p><p>Obviously, the closer we can move Science toward science the better. But even mediocre Science is better&#8212;usually&#8212;than believing whatever you want to believe.</p><p>Sadly, look around. Science has taken such a beating in Western society lately, albeit some of it well deserved, that we are now in a post-science society. Anyone can make any claim, no matter how outrageous, and we are bound not only to take such claims seriously <em>without evidence</em>, but to treat carefully-researched, evidence-based science as just another <em>opinion</em>.</p><p>Science is never opinion because if it were, it would be <em>opinion</em>, not science. By definition!</p><p>Most people have little or no understanding of science, so the destruction of the idea of expertise (the subject of a coming essay) means a regression back into superstition and conspiracy lunacy. I have argued here, for example, about <a href="https://www.cantankerouscoder.com/p/the-best-thing-about-911">how absurd many of the claims of the &#8220;9/11 Truthers&#8221; are</a>.</p><p>Of course, <em>a few</em> of their claims might have some merit. But you can&#8217;t say that. If you grant them a few points, readers immediately rush to the &#8220;true&#8221; pole and believe <strong>all</strong> the nonsense. The sad consequence is that when discussing such issues, one can&#8217;t afford to give an inch.</p><p>We have so many problems as a species, many of which&#8212;climate change, nuclear war, pollution, etc.&#8212;are potentially extinction-level issues. But we are helpless to do anything about them because <strong>we can&#8217;t even have an intelligent conversation about the issues</strong>.</p><p>Both sides&#8212;<strong>both sides</strong>&#8212;refuse to acknowledge anything that contradicts their <em>emotionally-held beliefs</em>. Stalemate. But remember, stalemate means <strong>game over</strong><em><strong>, and no one wins.</strong></em></p><p>Science, done properly, and tempered by wisdom&#8212;another human trait sorely lacking in our modern world&#8212;is our only hope of survival either individually or as a species. To survive, we <em>must</em> learn how to distinguish real science from &#8220;Science&#8221; as entertainment and political/ideological nonsense, and we must act on that knowledge. Wisely.</p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Teams considered harmful]]></title><description><![CDATA[How's that for a clickbait title?]]></description><link>https://www.cantankerouscoder.com/p/teams-considered-harmful</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/teams-considered-harmful</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Wed, 08 Nov 2023 02:32:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!d73v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A friend recently asked me to explain in a bit more detail my radical claim that <strong>the best team size is ONE. </strong>And truly, I should. Because it is not at all obvious, so I&#8217;ve found, just what I could mean by that.</p><p>Let me begin by saying that I&#8217;m talking about <strong>software development teams</strong>, not sports teams. I&#8217;m not a huge fan of sports teams either, but that will have to wait for another post in which I trash competition in general.</p><p>So &#8230; software development teams.</p><h2>Why are there teams?</h2><p>The biggest problem with suggesting that teams are actually harmful to software development is that the pro-team folks have cleverly slid the <a href="https://en.wikipedia.org/wiki/Overton_window">Overton Window</a> to where &#8220;no teams&#8221; is not even conceivable.</p><p>When the team advocates argue about teams, they argue about &#8220;high performing teams&#8221; vs. all other teams. It is never about teams vs. <strong>no teams</strong>. It&#8217;s about how to do teams better. That we must have teams is a <strong>given</strong>.</p><p>So let&#8217;s take a moment to examine the real, unspoken reasons for creating software development teams.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d73v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d73v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg 424w, https://substackcdn.com/image/fetch/$s_!d73v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg 848w, https://substackcdn.com/image/fetch/$s_!d73v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!d73v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d73v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg" width="1456" height="853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:853,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:882222,&quot;alt&quot;:&quot;Teams are about everything but getting work done.&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Teams are about everything but getting work done." title="Teams are about everything but getting work done." srcset="https://substackcdn.com/image/fetch/$s_!d73v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg 424w, https://substackcdn.com/image/fetch/$s_!d73v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg 848w, https://substackcdn.com/image/fetch/$s_!d73v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!d73v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56714802-a0b4-4940-b349-cb5d67450773_4788x2806.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Hint: it&#8217;s not about getting work done. Photo by <a href="https://www.instagram.com/kindelmedia/">kindelmedia</a>.</figcaption></figure></div><h3>Hiring more overpaid managers</h3><p>The first and most important reason for having teams is to group the workers who do all the adding of value into numbers of &#8220;<strong>reports</strong>&#8221;.</p><p>There is a management theory somewhere (Taylorism?) that claims that there is a limit on how many &#8220;reports&#8221; (read: humans) that a single manager can, er, manage. Weirdly, the <strong>maturity</strong> of said &#8220;reports&#8221; doesn&#8217;t appear to have been a factor. It&#8217;s usually an arbitrary number, ignored whenever convenient.</p><p>So we need to divide our organization into divisions, groups, projects, etc. This provides us with a hierarchy of group sizes, which then permits a matching <strong>hierarchy of</strong> <strong>managers</strong>. Ergo, more reports equals more teams equals more overpaid managers.</p><p>One might think that managers are motivated to help the company to achieve its objectives more efficiently. Ha, ha. What planet are you from? Can I go there?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eFCr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eFCr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eFCr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eFCr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eFCr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eFCr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.jpeg" width="1456" height="2181" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2181,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1285446,&quot;alt&quot;:&quot;Adding layer of management means more power, prestige, and money. And lower efficiency.&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Adding layer of management means more power, prestige, and money. And lower efficiency." title="Adding layer of management means more power, prestige, and money. And lower efficiency." srcset="https://substackcdn.com/image/fetch/$s_!eFCr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eFCr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eFCr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eFCr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a982690-be38-4847-9415-bfa0d72452d1_3894x5833.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Layers upon layers upon layers. Always room for more. Photo by <a href="https://www.instagram.com/dreamwood.commercial/">dreamwood</a>.</figcaption></figure></div><p>Managers exist a) to <strong>justify their jobs</strong>, usually by actually <em>interfering</em> with others who are trying to get work done, b) to <strong>accumulate more</strong> power, prestige, and pay &#8211; what Erik Dietrich calls &#8220;carnival cash&#8221; &#8211; and c) to make themselves &#8220;indispensable&#8221;, usually by <strong>hoarding information</strong> instead of sharing it.</p><p>You can argue with me, but the evidence is all on my side. Are there exceptions? Of course. Some managers didn&#8217;t get the memo, and they are actually trying to do good things. <strong>They won&#8217;t last long</strong>.</p><p>Hierarchies &#8211; all hierarchies &#8211; exist for one purpose and one purpose only: to <strong>blame shift</strong>. Why else would we infallibly appoint incompetent, self-involved, and insecure infants to &#8220;lead&#8221; us? It&#8217;s simple: if the leaders are shit, then we think we&#8217;re off the hook for our own stupidity and sloth.</p><p>For the small minority of humans who are actually <strong>competent and caring</strong>, this &#8220;feature&#8221; of humanity is effectively killing us.</p><p>But let&#8217;s be frank: the real reason for teams is to <strong>make life better for managers</strong>. Who cares about productivity? Who cares about the peons? We are not real people to them. You know it&#8217;s true.</p><h3>Compensating for infantilism</h3><p>Ouch! This one is going to hurt. But the sad fact of modern life is that most humans, and I mean most &#8220;<strong>grown ups</strong>&#8221;, remain infantile. Grown up infants. Not adults.</p><p>An adult, simply put, is a mature member of the species that <strong>always does the right thing</strong>. Why? Duh. Because it&#8217;s the <em>right thing.</em> Even asking that question marks one as an infant.</p><p>The adult does the right thing for the same reason that the adult does not pick up their fork when eating and stab themselves in the eye with it. They don&#8217;t have to exercise some kind of <strong>steely will</strong> to avoid stabbing themselves. <em>It never even occurs to them to stab themselves</em>. And if you asked why, they would, rightly, look at you as if you were insane.</p><p>After all, insane is defined as the inability to tell right from wrong. I might add: the irresistible impulse to <strong>engage in self-destructive acts</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W5Qy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W5Qy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.jpeg 424w, https://substackcdn.com/image/fetch/$s_!W5Qy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.jpeg 848w, https://substackcdn.com/image/fetch/$s_!W5Qy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!W5Qy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W5Qy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.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;:1388210,&quot;alt&quot;:&quot;Children need continual if not constant supervision.&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Children need continual if not constant supervision." title="Children need continual if not constant supervision." srcset="https://substackcdn.com/image/fetch/$s_!W5Qy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.jpeg 424w, https://substackcdn.com/image/fetch/$s_!W5Qy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.jpeg 848w, https://substackcdn.com/image/fetch/$s_!W5Qy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!W5Qy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c2d66ba-384c-434d-9df3-00a7655fb77b_5472x3648.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ya can&#8217;t leave them alone for a hot minute. Photo by <a href="https://www.pexels.com/photo/faceless-person-punishing-black-girl-7114747/">Monstera</a>.</figcaption></figure></div><p><strong>Adults manage themselves</strong>. Infants need mommies and daddies. They need to be watched at all times to ensure that they don&#8217;t get themselves in trouble. Or hurt themselves or others.</p><p>Hence, a primary function of teams is to <strong>compensate for the immaturity of the team members</strong><em><strong> </strong></em>by keeping an eye on them. Telling them what to do because they can&#8217;t (or won&#8217;t) figure it out for themselves.</p><h3>Compensating for insecurity</h3><p>Another feature of grown up infants (of all infants, really) is <strong>a deep sense of insecurity</strong>. Maturity is about power: power over the self. That&#8217;s it. The adult is <em>in control</em>. Infants are powerless, and they know it.</p><p>True adults then are, by definition, <em>secure in themselves</em>. Heh. Good luck finding one. Most people are desperately insecure. And insecure people need the safety and support of the tribe. They are <strong>not truly individuals</strong>.</p><p>Unsure of themselves, they need to watch carefully what the other tribal members are doing so that they can make sure they don&#8217;t step out of line. Monkey see, monkey do. It&#8217;s those <strong>mirror neurons</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_v-J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_v-J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_v-J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_v-J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_v-J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_v-J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.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;:1419826,&quot;alt&quot;:&quot;Are we just overdeveloped simians?&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Are we just overdeveloped simians?" title="Are we just overdeveloped simians?" srcset="https://substackcdn.com/image/fetch/$s_!_v-J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_v-J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_v-J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_v-J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab8ed478-06c2-4cef-b366-54a129a3ea76_5472x3648.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Apologies to simians everywhere. Photo by <a href="https://www.instagram.com/a.n.d.r.e.mouton/">Andre Mouton</a>.</figcaption></figure></div><p><a href="https://en.wikipedia.org/wiki/Mimesis">Mimesis</a> isn&#8217;t always negative, but it needs <strong>intellect and wisdom</strong> to intervene between that mimesis and <em>acting upon it</em>. Just copying the crowd leads to ugly disasters. Think mob.</p><p>Teams at work provide team members with <strong>emotional and psychological support</strong> to compensate for their insecurity. Think about it. You are there to <em>get work done</em>. So why all this time wasted on bonding bullshit? Why the games and the silly team names and the sausage rolls and all that nonsense?</p><p>It&#8217;s because like it or not most software development teams are effectively <strong>nurseries</strong>. The team members are not adult enough to support themselves &#8212; to be self-sufficient. Of course, we are never allowed to admit this! Infants always want to be told that they are &#8220;big kids&#8221; now.</p><p>Adults on these teams do their best to work around all this nonsense. The most infantile members of the team do <strong>nothing </strong><em><strong>but</strong></em> <strong>socialize and goof</strong> <strong>off</strong>. And that&#8217;s the purpose of a team: to compensate for and somewhat control this behavior.</p><h2>The lies team advocates tell</h2><p>The biggest lie that advocates for software development teams tell is that it is all about <strong>collaboration</strong>. If they&#8217;re clever enough, they inject some bullshit about the &#8220;wisdom of crowds&#8221; and other pithy nonsense.</p><p>Hint: the &#8220;wisdom of the crowd&#8221; is directly proportional to the <strong>number of members</strong> in the crowd. How much wisdom do you think you&#8217;ll get from half a dozen immature kids?</p><p><strong>Collaboration has nothing to do with teams. </strong>Nothing. Yesterday, I went to the best coffee house in town and had a superb coffee. The barista and I <em>collaborated</em> in the ordering, preparation, and consumption of that coffee. So are we on the same &#8220;team&#8221; now?</p><p>Is my doctor on a &#8220;team&#8221; with all his patients? If so, how come I don&#8217;t know any of them? But every visit my doctor and I collaborate on my health. In fact, I collaborate every day with friends, acquaintances, waiters, chefs, checkout clerks, salespersons,  bus drivers, even lawyers. But none of them has ever suggested that we form a <strong>team</strong>.</p><p><strong>Collaboration and teams are orthogonal</strong>. They have nothing to do with one another. Team members may collaborate, or they may not. My experience shows that teams most often <strong>inhibit collaboration</strong>.</p><h3>Standups are a sick joke</h3><p>Take the standup. Please.</p><p>A common belief is that in the <strong>standup</strong> we each get a chance to speak, and when we do we explain a) what we&#8217;ve done last, b) what we&#8217;re doing next, and c) what blockers we have, if any. There are, of course, variations.</p><p>But I can simply <strong>post this information</strong> to an accessible page and others can access them as they see fit. Asynchronously! Something like this:</p><ul><li><p><strong>Yesterday</strong>: Worked on the fucking Death Star.</p></li><li><p><strong>Today</strong>: Still working on the fucking Death Star.</p></li><li><p><strong>Blockers</strong>: Darth Vader keeps choking me with his mind. What&#8217;s his fucking deal, anyway?</p></li></ul><p>Look! No standup necessary. How inefficient are standups?  Well, consider that probably half of your &#8220;team&#8221; <em>doesn&#8217;t give a rat&#8217;s ass what you&#8217;re doing</em>. It doesn&#8217;t concern them. But they have to stand there (literally) and <strong>pretend to listen</strong>.</p><p>And blockers? Are you for real? If I&#8217;m blocked on something then I should <em>wait for the next standup to do something about it?</em> Why don&#8217;t I just go <strong>find the person</strong> or persons who can unblock me and talk to them?</p><p>Originally, if I remember correctly, standups were supposed to be very brief discussions between<strong> the concerned individuals only</strong> and held exactly when they became necessary. Ten a day if needed, or none for a week or two. <em>That</em> was efficient.</p><p>Now they&#8217;ve morphed into a way for the product owner (or more often a BA) to <strong>keep an eye on the kids</strong>. Maybe you have a Kanban board or equivalent and it&#8217;s all about moving bits of paper (or pixels) across the board. It&#8217;s a big game! But that&#8217;s another thing that could be posted online (isn&#8217;t that what monstrosities such as Jira are for?) and accessed as needed. So why the standup?</p><p>The last job I had (I&#8217;m <strong>gainfully unemployed</strong>, finally), I was on three different &#8220;teams&#8221; over an eighteen month contract. And in all three instances, what I was doing had <em>nothing whatsoever to do with what the rest of the &#8220;team&#8221; was doing.</em></p><p>I was bored shitless (not literally) as they <strong>rambled on and on</strong> about things for which I gave not the tiniest zipless fuck. And then as I rushed through my own standup, I could see their eyes rolling back and their heads beginning to nod. I had to make regular bad jokes just to keep them from becoming comatose.</p><p>So why was I even on these teams? I <strong>collaborated</strong> every day with the key participants: the enterprise architect, the designer, and an expeditor.</p><p>I was on the each team because <strong>the idea that a developer might not be on any team was </strong><em><strong>literally</strong></em><strong> inconceivable</strong>. I <em>had</em> to be on some team. So I was simply randomly assigned to one.</p><p>But I also noticed that the other team members weren&#8217;t getting anything actually <strong>work-related</strong> out of the team either.</p><p>The same can be said for <strong>retros, post-mortems</strong>, and all the rest. The process is there to <strong>reassure management that they are in control</strong>, not to move the work forward. The truth is that all this process actually <strong>impedes work</strong>.</p><h2>Children don&#8217;t need teams; they need supervision</h2><p>So what to do? Well, the first step is to <strong>hire some fucking adults</strong>. Yeah, good luck with that. Adults are thin on the ground and they probably don&#8217;t want to work in your zoo anyway. I sure don&#8217;t. (Whether I&#8217;m an adult or not remains to be seen, but at least I know what one is and I&#8217;m trying.)</p><p>Once you have a significant number of adults (a majority would be nice), then <strong>pair them up</strong> with the children so they can coach, teach, and mentor them. (These are three very different activities.)</p><p>Your immature workers should be maturing up very rapidly. If they are not, figure out why. If it&#8217;s you, fix it. If it&#8217;s them, fire them.</p><p>This doesn&#8217;t mean that these pairs must spend all their time together, although occasional pair programming (or tester/BA/designer equivalent) might be good. It means that the immature developer has a <strong>specific adult</strong> to whom they can turn for help. Kind of like a mom or dad! And it means that a specific adult is responsible for keeping an eye on the immature worker.</p><h3>But what about collaboration?</h3><p>Just as I can collaborate with the electrician who comes to install new light fixtures (or the plumber to fix that drain) to ensure that <strong>the correct work gets done efficiently</strong>, I can collaborate with the <strong>key stakeholders</strong> for whatever work I&#8217;m doing.</p><p>We don&#8217;t need to be on the same &#8220;team&#8221; to do so. I know <strong>who I need to talk to</strong> and when. So I just arrange a time to do so. And that chat lasts precisely as long as it needs to, not some arbitrary multiple of half an hour.</p><p>And I know who needs to <strong>be informed</strong> of any decisions coming out of that chat.</p><p>So say I realize that some design feature isn&#8217;t going to work out. I message the designer and set up a quick chat, typically immediately <strong>unless some worthless meeting is preventing her from doing her actual job</strong>.</p><p>We hash it out quickly. She tells me that she&#8217;ll get me a fix ASAP. I then contact the <strong>expeditor or product owner</strong> or whomever and tell her about the impending change. Perhaps she then checks in with the designer (who has probably talked to her own design lead by then).</p><p>Soon after (my designer was incredibly wonderful), I get an update. A quick chat to make sure we&#8217;re <strong>on the same page</strong>. I contact my expeditor again and explain the change quickly so she&#8217;s aware. Then I implement it.</p><p>If some significant change is coming down the pike, the expeditor or equivalent will inform me. Some general changes can be put out in a post or an email &#8212; the benefit of this is that there is a <strong>written record. </strong>When things are discussed in person, the information is <strong>ephemeral</strong>. I might be distracted for a moment. I might not hear correctly (I&#8217;m half deaf). Whatever the reason, I might leave with the wrong impression.</p><p>So why <em>the fuck</em> do we keep doing things this stupid way? Are tech workers functionally illiterate? Keep the damn memos brief. Bullet points. Solicit comments. Make quick updates. <strong>Done</strong>. No need for a meeting! And we have a record.</p><p><strong>That is how collaboration works</strong>. No team necessary.</p><h2>How to tell if your team is bullshit</h2><p>Teams can work, but they need to be <strong>ad hoc</strong>. That means established for a specific purpose. And I mean <em>specific</em>. Working on a particular product or project is not nearly specific enough.</p><p>Ideally, there is a specific objective, and team members <strong>come and go as needed</strong>. That means that each team member is there for a specific (ad hoc) purpose. They show up when it&#8217;s time to complete that work and leave the moment it is done.</p><p>They do not show up early. They have things to do. They do not stick around when no longer needed while you try to find something else for them to do.</p><p>If there is a block and they are stuck waiting on someone else, then <strong>they go off and do other work until the blocker is removed</strong>. They don&#8217;t stick around and do busywork (or nothing at all but distract the other team members) while they wait.</p><p>So at all times the &#8220;team&#8221; is simply the people <strong>currently working on a specific objective.</strong> Members come and go and sometimes return.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DuLO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DuLO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DuLO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DuLO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DuLO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DuLO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.jpeg" width="1456" height="2115" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2115,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8996427,&quot;alt&quot;:&quot;If one must name a team, the Wu-Tang Clan is a pretty clever choice.&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="If one must name a team, the Wu-Tang Clan is a pretty clever choice." title="If one must name a team, the Wu-Tang Clan is a pretty clever choice." srcset="https://substackcdn.com/image/fetch/$s_!DuLO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DuLO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DuLO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DuLO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb25fccef-7556-4778-9fdc-ba687cd7f5f7_2598x3773.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The ODB. But no one got the joke. Sigh &#8230; Photo by <a href="https://www.deviantart.com/rickmalart/gallery">RickMalArt</a>.</figcaption></figure></div><p>So how do you tell if your team is bullshit? Well, first, is it people <strong>working on specific tasks</strong> and no one not doing so? No? Then bullshit.</p><p>But here are some other big hints:</p><ul><li><p><strong>Your team has a name</strong>. Typically something stupid. What is it with tech workers and really bad puns? The best name for any team I was on was the <strong>Wu-Tang Clan</strong>. That, at least, showed some imagination. And it was funny. As we also had stupid avatars, I promptly chose the <strong>Ol&#8217; Dirty Bastard</strong> as mine. Sadly, most of the team were too young (or white maybe) to know what any of it meant.</p></li><li><p><strong>The size of your team is an arbitrary number</strong>. The ad hoc groups I mention above have a precise non-arbitrary number: as many as needed <em>and not one more</em>. If there is an artificial limit on team size, then that is your biggest clue: <strong>it&#8217;s about &#8220;reports&#8221;</strong>, which means its about management, not getting work done.</p></li><li><p><strong>There are people on your team who don&#8217;t belong there</strong>. This is the classic situation where someone is working on something unique, but despite this they <em>must be assigned to a team</em>. Why? BECAUSE. Weren&#8217;t you listening?</p></li><li><p><strong>There are key stakeholders who should be there, but are on some other team</strong>. This is a sure sign that your team is not <em>ad hoc</em>. It&#8217;s purpose is unclear, which means its real purpose is one or more of the three I explained above: inflate management, compensate for immaturity, compensate for insecurity.</p></li><li><p><strong>Your team is clearly not ad hoc</strong>. It persists even though everything you&#8217;re doing changes. You&#8217;ve finished some feature, or a PI (heaven forbid), or a sprint. And yet the same team carries on with the same members. Why? Certainly not because it is necessary to <strong>get the work done</strong>.</p></li><li><p><strong>Members are added or removed with no thought to the gestalt of the team</strong>. If you&#8217;re really serious about a &#8220;high-performing team&#8221;, then I&#8217;ve got news for you. <strong>It&#8217;s not about process and procedures</strong><em><strong>. </strong></em>It&#8217;s about <strong>synergy</strong>.</p></li></ul><h3>The number one clue that your team is bullshit </h3><p>Ha, ha. What is it? What is it?</p><p>It&#8217;s the last bulleted item above. Team members are added or subtracted <em>arbitrarily</em>, with no thought for how they will <strong>fit</strong> with the team.</p><p>It&#8217;s not just about <strong>skills</strong>! It&#8217;s about <strong>maturity</strong>. It&#8217;s about <strong>work ethic</strong>. It&#8217;s about <strong>personality and character</strong>.</p><p>Some examples might make it clearer.</p><p>I once worked on a remote team composed of several Poles, a couple of Slovenians, a German, and me. (I used to be an American, but even then I was living in Argentina.)</p><p>The Poles and Slovenians <em>hated &#8211; </em><strong>hated</strong> &#8211; the German. And they tormented him continually until he finally quit. And they were just vicious about it.</p><p>They didn&#8217;t like me much, either, and eventually they fired me, which made me jump for joy. Literally. (Friends watching were shocked &#8230; <em>but you were fired! </em>Best. Thing. Ever.)</p><p>A BA I know was running two teams as &#8220;acting&#8221; product owner (i.e., doing the work but not getting the pay or prestige &#8230; or power). </p><p>She had some great folks on those teams. But one of her devs did nothing at all. Worse, actually. What little work he did was so bad that another dev would have to <strong>redo it.</strong> And when he wasn&#8217;t working, which was most of the time, he <strong>interfered with</strong> the devs who <em>were</em> getting work done.</p><p>She complained bitterly to management and to HR. And they did &#8230; wait for it &#8230; <em>nothing at all</em>. Because <strong>management doesn&#8217;t give a flying fuck about you or your team</strong><em><strong>.</strong></em></p><p>Another team I was on brought on a very insecure dev. He quickly decided that he hated me. But he was an <strong>abject coward</strong>, so instead of being up front about it and working it out with me, he was <strong>utterly passive aggressive</strong>.</p><p>For months he pushed my buttons every chance he got, cleverly convincing the rest of the team that he was some superstar (his code was mediocre at best and he was quite lazy) while undercutting me. <strong>No one noticed</strong>. I was ready to quit even though I liked the work when he suddenly quit and left the country. Whew!</p><p>It was like I&#8217;d died an gone to heaven. I pity the people on whatever new team he ended up on. People like that <strong>do not belong in any job</strong> that requires working with human beings. Or monkeys, frankly.</p><p>I could go on and on (and on), but if you&#8217;ve worked on software development teams for any length of time then you have your own <strong>horror stories</strong> (feel free to share).</p><p>But how do such people get on teams? They get there because the people assigning others to these arbitrary teams do so <strong>capriciously</strong>. They simply don&#8217;t give a fuck about whether that person will be a good fit, or even deserves to be employed at all.</p><p>It&#8217;s so much easier to just keep moving some asshole around rather than go through the process of <strong>documenting his assholity</strong> and firing the fucker.</p><p>So to hell with teams. <strong>Value mature workers and adult collaboration.</strong> Let the workers collaborate as needed in <strong>fluid, dynamic, ad hoc groupings</strong>, coming and going as required. If you must hire grown up children, pair them with a mature worker as &#8220;<strong>buddy</strong>&#8221; and do your best to encourage them to mature rapidly. If they cannot or will not, let them go. Structure your contracts to make this possible.</p><p>Will we ever see this? It&#8217;s doubtful. Enterprises are run by managers <strong>for the benefit of managers</strong>, namely themselves. Not for the benefit of the shareholders, the employees, or the customers. Don&#8217;t kid yourself.</p><p>All over the world CEOs are <strong>destroying their companies</strong>, screwing the shareholders, laying off workers by the score (or more), harming their customers, and generally making a mess of things. And yet they are regularly rewarded with bonuses in the tens or <em>hundreds</em> of <strong>millions</strong> of dollars. You just can&#8217;t make this shit up.</p><p>Ergo, don&#8217;t hold your breath. But you heard it here first: <strong>the ideal team size is ONE</strong>.</p><p>There is so much more, but this has gotten long enough. Example? &#8220;There is no I in TEAM&#8221;. What does that mean? It means the <strong>destruction of the individual</strong> and independent, critical thought. Hmm. Why would an exploitative corporation want that?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KnLt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KnLt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KnLt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KnLt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KnLt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KnLt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.jpeg" width="1456" height="972" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:972,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1473140,&quot;alt&quot;:&quot;Many workers if not most are just cogs in the machine. Individuals are crushed.&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Many workers if not most are just cogs in the machine. Individuals are crushed." title="Many workers if not most are just cogs in the machine. Individuals are crushed." srcset="https://substackcdn.com/image/fetch/$s_!KnLt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KnLt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KnLt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KnLt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f0860ea-4886-492a-a763-a7a0a2c088e1_6016x4016.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Are you a person or an interchangeable cog? Photo from Flickr.</figcaption></figure></div><p>Cogs in a wheel. Theirs not to reason why / theirs but to do and die.</p>]]></content:encoded></item><item><title><![CDATA[Craft Code is up]]></title><description><![CDATA[The adventure begins]]></description><link>https://www.cantankerouscoder.com/p/craft-code-is-up</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/craft-code-is-up</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Tue, 07 Nov 2023 01:55:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!o6y3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As I mentioned here recently, I&#8217;ve been a bit slow in posting (OK, a lot slow) because I&#8217;ve been deep in the weeds trying to build as close to the perfect site as I can manage.</p><p>That site is <a href="https://craft-code.dev/">Craft Code</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.cantankerouscoder.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Cantankerous Coder! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Sustainability</h2><p>By perfect I mean, among other criteria, a site that meets <strong>all</strong> of the <a href="https://w3c.github.io/sustyweb/">Web Sustainability Guidelines</a> (WSG: currently still in draft &#8212; I&#8217;m an early adopter). It that&#8217;s a bit too complex, check out the <a href="https://www.sustainablewebmanifesto.com/">Web Sustainability Manifesto</a>. Why not sign it while you&#8217;re there? Get in early.</p><p>There are various tools for checking <em>some</em> of the requirements, especially carbon counts. Typically, most Craft Code pages are around 0.01-0.02 grams carbon for the first load, and less than 0.01 gram on subsequent page loads. Nice!</p><p>One such tester is the <a href="https://www.websitecarbon.com/website/craft-code-dev/">Website Carbon Calculator</a>. According to this, the typical page on Craft-Code.dev is cleaner than <strong>99% of web pages tested. </strong>We take a hit for not using &#8220;green hosting&#8221;, but that&#8217;s not quite so simple. The Craft Code site is served from <a href="https://vercel.com/">Vercel</a>, which uses AWS and, I think, Azure.</p><p>But both Amazon and Microsoft claim to be 90% green. Bullshit? Who knows.? But there&#8217;s more to it. Vercel means we serve from the edge, which <em>saves energy</em>. And we use serverless functions, which are far more efficient than keeping a hosted server running 24/7. Craft Code is a static JAMStack site, so that also saves energy.</p><p>Is it a wash. I discussed this with some sustainability experts (Craft Code is featured on the <a href="https://lowwwcarbon.com/showcase/">lowwwcarbon showcase</a>). They admitted that it&#8217;s arguable, which is how I bypassed the requirement to use green hosting to be listed.</p><p><a href="https://digitalbeacon.co/report/craft-code-dev">Beacon</a> is another site measuring carbon. It measures both first visit and return visits and even gives a grade. All the pages on Craft-Code.dev get an A+. We&#8217;re doing something right. We provide a link to proof at the bottom of every site page, which also raises awareness and is a bit of a challenge to other sites.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o6y3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o6y3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png 424w, https://substackcdn.com/image/fetch/$s_!o6y3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png 848w, https://substackcdn.com/image/fetch/$s_!o6y3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png 1272w, https://substackcdn.com/image/fetch/$s_!o6y3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o6y3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png" width="1456" height="771" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:771,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:373812,&quot;alt&quot;:&quot;Beacon shows 0.018g carbon on first visit, 0.007g on repeat visit, grade A+.&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Beacon shows 0.018g carbon on first visit, 0.007g on repeat visit, grade A+." title="Beacon shows 0.018g carbon on first visit, 0.007g on repeat visit, grade A+." srcset="https://substackcdn.com/image/fetch/$s_!o6y3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png 424w, https://substackcdn.com/image/fetch/$s_!o6y3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png 848w, https://substackcdn.com/image/fetch/$s_!o6y3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.png 1272w, https://substackcdn.com/image/fetch/$s_!o6y3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa4e61b-956a-41bb-9b5b-b27dab27dd8c_2086x1104.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">I&#8217;ll take an A+</figcaption></figure></div><h2>Accessibility (a11y)</h2><p>Of course, if one wants to fulfill the WSG one must first fulfill the <a href="https://www.w3.org/TR/WCAG22/">Web Content Accessibility Guidelines</a> (WCAG) 2.2. My goal is AAA &#8211; the highest level. Much of this can be tested with &#8220;overlays&#8221; such as <a href="https://www.deque.com/axe/devtools/">axe DevTools</a>. I use a pro account and my test show zero errors or issues for AAA compliance. Nice!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aADy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aADy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.png 424w, https://substackcdn.com/image/fetch/$s_!aADy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.png 848w, https://substackcdn.com/image/fetch/$s_!aADy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.png 1272w, https://substackcdn.com/image/fetch/$s_!aADy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aADy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.png" width="953" height="641" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:641,&quot;width&quot;:953,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73732,&quot;alt&quot;:&quot;axe DevTools shows zero issues for Craft-Code.dev on WCAG 2.2 AAA.&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="axe DevTools shows zero issues for Craft-Code.dev on WCAG 2.2 AAA." title="axe DevTools shows zero issues for Craft-Code.dev on WCAG 2.2 AAA." srcset="https://substackcdn.com/image/fetch/$s_!aADy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.png 424w, https://substackcdn.com/image/fetch/$s_!aADy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.png 848w, https://substackcdn.com/image/fetch/$s_!aADy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.png 1272w, https://substackcdn.com/image/fetch/$s_!aADy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00bd18b7-8870-43c0-9842-e31d5f4d35e5_953x641.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Note: WCAG 2.2 AAA</figcaption></figure></div><p>It&#8217;s not enough to use only the overlay, so, of course, I am steadily working (and reworking) my way through the entire list in the <a href="https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1">WCAG Quick Reference</a> to make sure I&#8217;ve done it all.</p><p>But the big items are there:</p><ul><li><p>At least 7.1 color contrast (AAA).</p></li><li><p>The smallest font size is 16px. The font sizes increase as the screen size does. I use the <a href="https://utopia.fyi/type/calculator/">Utopia Fluid Type Scale Generator</a>. </p></li><li><p>The pages are written at a lower secondary school level, but typically even lower. Think 4th grade. This is for people with reading or cognitive disabilities and just makes it simpler for everyone. I use the <a href="https://hemingwayapp.com/">Hemingway Editor</a> to polish the content and get word count, reading time, and grade level. I&#8217;d love to automate this boring task.</p></li><li><p>But that&#8217;s not enough. The site uses a lot of <strong>technical terms</strong>. So I added a <strong>glossary</strong> and linked the terms on each page to their glossary entry (using <code>rel=&#8221;glossary&#8221;</code> and a dotted underscore). And many glossary entries link further to <a href="https://developer.mozilla.org/en-US/">Mozilla Developer Network</a>, primary sources, or Wikipedia for those who want more depth.</p></li><li><p>I created (with some help from a real designer) a <strong>visual language</strong> for the site and implemented it with SVGs (hand-coded). In addition to visual interest and mnemonic/cognitive benefits, the SVGs make the site <em>very fast</em> indeed.</p></li><li><p>The site has a <a href="https://craft-code.dev/feedback">Feedback form</a> to permit users to report bugs and issues, make suggestions, complain, or whatever else trips their triggers.</p></li><li><p>There is a <a href="https://craft-code.dev/faqs">FAQ page</a> and a form that allows users to ask questions. This kind of interaction is, I believe, <strong>essential</strong> to <em>honest</em> accessibility.</p></li><li><p>The pages are <strong>keyboard navigable</strong>. The forms provide clear help. There is a print stylesheet that injects the URL of page links next to the label, and provides a QR code to allow you to go straight to the web page from the printed page. Try it! (The QR code is visible even on the screen page so you can jump to another device.)</p></li><li><p>And much, much more. Nearly <strong>thirty years of experience</strong> and almost a year of detailed thinking, investigation, and trial and error have gone into this site. But the next one (ScratchCode) will take one tenth that time.</p></li></ul><h2>Performance</h2><p>Performance is a key part of sustainability, but also accessibility and UX. I was just reading an article on the psychology of web page performance. TL/dr: it is important!</p><p>I do lots of different checks to ensure that the Craft-Code.dev pages are as fast as possible. One of the earliest is to check <strong>Lighthouse</strong> in private mode. Here is a typical result (for mobile):</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0jBt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0jBt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png 424w, https://substackcdn.com/image/fetch/$s_!0jBt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png 848w, https://substackcdn.com/image/fetch/$s_!0jBt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png 1272w, https://substackcdn.com/image/fetch/$s_!0jBt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0jBt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png" width="526" height="163" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:163,&quot;width&quot;:526,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30826,&quot;alt&quot;:&quot;Lighthouse shows 100% scores for each of performance, accessibility, best practices, and SEO.&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Lighthouse shows 100% scores for each of performance, accessibility, best practices, and SEO." title="Lighthouse shows 100% scores for each of performance, accessibility, best practices, and SEO." srcset="https://substackcdn.com/image/fetch/$s_!0jBt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png 424w, https://substackcdn.com/image/fetch/$s_!0jBt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png 848w, https://substackcdn.com/image/fetch/$s_!0jBt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png 1272w, https://substackcdn.com/image/fetch/$s_!0jBt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14507e56-9be6-45e4-bd80-3e9d1cd5f3cc_526x163.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">I keep trying to improve on this, but it appears to be some kind of limit.</figcaption></figure></div><p>I am currently running through <strong>SEO tests</strong>. Interestingly (and frustratingly) different testers give different advice. How to know which is correct? Are any of them? And they ain&#8217;t cheap, either. The best I&#8217;ve found so far, which appears to be <a href="https://suite.seotesteronline.com/upgrade/choose-plan">SEO Tester Online</a>, is at least 26 euros a <em>month. </em>And<em> </em>that&#8217;s limited to one site.</p><p>You&#8217;re killing me, man. I am unemployed (in pecuniary terms).</p><p>These tools seem to be geared to people who want to make a <em>lot</em> of <strong>money</strong> from their websites. That&#8217;s not my goal at all, but I do want people to <em>find the site</em>. Tough call. That said, SEO is the one area where I&#8217;m happy with &#8220;good enough&#8221;. Will update readers later when I know more.</p><p>But even with these more thorough tools, I&#8217;m very, very close to 100% success. Stay tuned.</p><p>And some of the advice? My headings are too short? Give me a break. I&#8217;m not going to keyword-stuff my headlines (to the detriment of readers) just to indulge the algorithm gods.</p><p>And there is so much more, such as full use of the <code>&lt;picture&gt;</code> element wherever I have raster images. This is <em>one</em> image:</p><pre><code>&lt;picture&gt;
  &lt;source
    media="(min-width: 434px)"
    srcset="/images/optimized/768/rr-temptation.avif 1x, 
      /images/optimized/1536/rr-temptation.avif 2x,     
      /images/optimized/2304/rr-temptation.avif 3x"
    type="image/avif"
  &gt;
  &lt;source
    media="(min-width: 434px)"
    srcset="/images/optimized/768/rr-temptation.webp 1x, 
      /images/optimized/1536/rr-temptation.webp 2x, 
      /images/optimized/2304/rr-temptation.webp 3x"
    type="image/webp"
  &gt;
  &lt;source
    media="(min-width: 434px)"
    srcset="/images/optimized/768/rr-temptation.png 1x, 
      /images/optimized/1536/rr-temptation.png 2x, 
      /images/optimized/2304/rr-temptation.png 3x"
    type="image/png"
  &gt;
  &lt;source
    media="(min-width: 434px)"
    srcset="/images/optimized/768/rr-temptation.jpeg 1x,  
      /images/optimized/1536/rr-temptation.jpeg 2x, 
      /images/optimized/2304/rr-temptation.jpeg 3x"
    type="image/jpeg"
  &gt;
  &lt;source
    media="(max-width: 433px)"
    srcset="/images/optimized/384/rr-temptation.avif 1x, 
      /images/optimized/768/rr-temptation.avif 2x, 
      /images/optimized/1152/rr-temptation.avif 3x"
    type="image/avif"
  &gt;
  &lt;source
    media="(max-width: 433px)"
    srcset="/images/optimized/384/rr-temptation.webp 1x, 
      /images/optimized/768/rr-temptation.webp 2x, 
      /images/optimized/1152/rr-temptation.webp 3x"
    type="image/webp"
  &gt;
  &lt;source
    media="(max-width: 433px)"
    srcset="/images/optimized/384/rr-temptation.png 1x, 
      /images/optimized/768/rr-temptation.png 2x, 
      /images/optimized/1152/rr-temptation.png 3x"
    type="image/png"
  &gt;
  &lt;source
    media="(max-width: 433px)"
    srcset="/images/optimized/384/rr-temptation.jpeg 1x, 
      /images/optimized/768/rr-temptation.jpeg 2x, 
      /images/optimized/1152/rr-temptation.jpeg 3x"
    type="image/jpeg"
  &gt;
  &lt;img
    alt="You can&#700;t beat Russian River&#700;s Temptation ale"
    class="optimized-img"
    height="1603"
    src="/images/optimized/768/rr-temptation.jpeg"
    width="768"
  &gt;
&lt;/picture&gt;</code></pre><p>Yum. Russian River. One of the few things I miss about &#8216;merika.</p><p>That&#8217;s a lot of effort to ensure that the most performant image is loaded. (Note: there is some controversy over whether the <strong>extra cost of processing for AVIF</strong> is compensated for by a smaller size insofar as sustainability is concerned. Am investigating.)</p><h2>Standards compliance</h2><p>I&#8217;m doing my best to write smart, standards-compliant, semantic HTML and standards-compliant CSS. The best validators for this are probably the <a href="https://validator.w3.org/">W3C validators</a>. It&#8217;s a bit tricky, though.</p><p>For HTML, I am 100% standards compliant, I think (I need to retest regularly because I break this a lot). But I do get a complaint about a / in an empty element. I also get a ping on an <code>adapt-symbol</code> attribute, but that&#8217;s just me experimenting. The <a href="https://www.w3.org/WAI/adapt/">WAI-Adapt</a> guidelines are still germinating. </p><p>The irony of getting this slash warning from the folks who brought you XHTML! Granted, I&#8217;m serving the pages as <code>text/html</code>, but that&#8217;s a bit picky, no? And I can&#8217;t help it. I&#8217;m using <a href="https://astro.build/">Astro</a> which means JSX, and that&#8217;s an artifact of JSX. Nothing&#8217;s perfect, I guess.</p><p>The CSS validator is a bit more troubling. I&#8217;m using <a href="https://stylelint.io/">stylelint</a> on every push &#8211; I use <a href="https://www.biomejs.dev/linter">Biome</a> for JS/TS &#8211; so I know the CSS is good. But I also am using some advanced CSS (with fallbacks), such as <code>:has()</code> (<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:has">MDN</a>). The W3C validator doesn&#8217;t recognize it, so I get a slew of errors. But as long as I&#8217;m only getting those errors, then I think I&#8217;m 100% compliant.</p><p>Doesn&#8217;t mean my CSS is worth a shit (see below), but it&#8217;s a start.</p><p>The <a href="https://chrispederick.com/work/web-developer/">Web Developer extension</a> is really helpful for this kind of thing. And it has a (very slow) <a href="https://validator.w3.org/checklink">link checker</a> (W3C again). Maybe run it overnight?</p><h2>The code</h2><p>The Craft-Code.dev site is pure <a href="https://developer.mozilla.org/en-US/docs/Glossary/semantics">semantic HTML</a>, CSS, and JavaScript. There are zero front-end dependencies. I repeat:</p><p><strong>There are zero front-end dependencies.</strong></p><p><strong>There are zero front-end dependencies.</strong></p><p>I do use a polyfill (but almost not at all) for JS Temporal because &#8230; did I mention that I&#8217;m a very early adopter? Hopefully, that will go away soon. JS dates suck.</p><p>But there are no serious front-end libraries or frameworks. No React. No Redux. No Ramda. No RxJS. Also, nothing like MUI &#8211; I built my own Astro component library in the process of building the Craft Code site (I&#8217;ll post a link when it&#8217;s out of alpha).</p><h3>Structure and semantics</h3><p>I pay very close attention to the page structure and the <strong>use of proper HTML Elements</strong>. I&#8217;ve avoided Web Components so far because using Astro gives me a component architecture without having to give up on vanilla code, and it&#8217;s easier than dealing with <strong>shadow</strong> shit.</p><p>Accessibility means using correct landmarks: <code>&lt;header&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;main&gt;</code>, and <code>&lt;footer&gt;</code> mainly, but also <code>&lt;aside&gt;</code> and <code>&lt;section&gt;</code>. Each of these should have a heading (even if it is not visible on the page), and those headings &#8211; <code>&lt;h1&gt;</code> to <code>&lt;h6&gt;</code> &#8211; should be <a href="https://www.w3.org/WAI/tutorials/page-structure/headings/">properly nested</a>.</p><p>Last I checked, the <strong>majority</strong><em><strong> </strong></em>of web pages online failed this simple directive <em>despite being reminded of it continually for more than two decades</em>. So many devs are either stupid or insouciant. Craft Code is not for them.</p><p>A neat toy for checking that you&#8217;ve done this well is the <a href="https://github.com/h5o">HTML Outliner</a> extension. Here is the Craft-Code home page outline:</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-qo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A-qo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.png 424w, https://substackcdn.com/image/fetch/$s_!A-qo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.png 848w, https://substackcdn.com/image/fetch/$s_!A-qo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.png 1272w, https://substackcdn.com/image/fetch/$s_!A-qo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A-qo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.png" width="1004" height="668" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:668,&quot;width&quot;:1004,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:122585,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A-qo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.png 424w, https://substackcdn.com/image/fetch/$s_!A-qo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.png 848w, https://substackcdn.com/image/fetch/$s_!A-qo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.png 1272w, https://substackcdn.com/image/fetch/$s_!A-qo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4c223a1-6d24-4bcf-a363-90cb0a1a87f7_1004x668.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now that&#8217;s <strong>proper nesting</strong>!</p><p>I use the <code>&lt;article&gt;</code> element with <code>&lt;section&gt;</code> elements in it. My various navigation elements all use <code>&lt;nav&gt;</code>. I use lists (typically <code>&lt;ul&gt;</code>) inside the navigation to make the separation of links clear. I never link to the current page.</p><p>My forms use <code>&lt;fieldset&gt;</code> elements freely with <code>&lt;legend&gt;</code>. Important images, code snippets, graphs, etc. are in <code>&lt;figure&gt;</code> elements with <code>&lt;figcaption&gt;</code>. Tables are used for actual <em>tabular</em> data, not for layout and I use the <code>&lt;thead&gt;</code>, <code>&lt;tbody&gt;</code>, and <code>&lt;tfoot&gt;</code> elements (no tables needed so far &#8211; avoid them whenever possible).</p><p>The glossary uses the description list elements &#8211; <code>&lt;dl&gt;</code>, <code>&lt;dt&gt;</code>, and <code>&lt;dd&gt;</code> &#8211; but also the <code>&lt;dfn&gt;</code> and <code>&lt;cite&gt;</code> elements. All links to the glossary use <code>rel=&#8221;glossary&#8221;</code> and the glossary is linked to from the head of every site page.</p><p>Oh, and so much more! Every element on every page has been examined and carefully considered and researched and double-checked. Perfection, remember? Unattainable, but a man can dream.</p><p>I use a ton of metadata. Title, canonical link, charset, viewport, description, keywords, robots, author, publisher, color-scheme, theme-color (light and dark), icon (favicon), &#8220;me&#8221;, and a whole raft of structured data. And OpenGraph and Twitter Card.</p><pre><code>&lt;link rel="me" href="https://x.com/CraftCodeDev"&gt;</code></pre><p><a href="https://www.wmtips.com/tools/html-analyzer/#https://craft-code.dev">Check out the HTML of our pages</a> by element for a full list.</p><h3>Structured (linked) data</h3><p>Using the schemas on <a href="https://schema.org/">schema.org</a>, I have added a plethora of structured data to the pages. These describe the WebSite, WebPage, Article, Quotations, Images, Organizations, Persons, etc.</p><p>Schema.org provides a <a href="https://validator.schema.org/#url=https%3A%2F%2Fcraft-code.dev%2Faxioms%2Fless-is-more">nice validator for structured data</a> (there are others, such as <a href="https://search.google.com/test/rich-results/result?id=tAnGhRomlOCK5aAFKq3Qiw">Google&#8217;s Rich Test Results</a> page). Of course, sometimes they disagree. Hrm.</p><p>By keeping pages relatively short, I keep load times short as well, which gives me room to make the pages <strong>machine-readable</strong>. The small amount of content on each page is misleading. Each page is positively <strong>loaded</strong> with data.</p><h3>Forms</h3><p>There are multiple forms on the site. All of them use the built-in validations via semantic elements such as <code>&lt;input type=&#8221;email&#8221;&gt;</code> or attributes such as <code>size</code>, <code>maxlength</code>, and <code>pattern</code>. The form&#8217;s <code>action</code> attribute points the submission to a Vercel (AWS) serverless function.</p><p>If the submission is a normal HTTP form submission, then the function processes the data and uses HTTP redirects (303) to redirect to error or success pages (yes, I have <a href="https://craft-code.dev/contact/missing-message">separate pages for each error</a>).</p><p>But I also have a JavaScript module that every page with a form loads (pretty much every site page has a form). This script looks for <code>&lt;form&gt;</code> elements and then adds the <code>novalidate</code> attribute and event handlers (using delegation) to check form validity using the element&#8217;s own <code>checkValidity</code> then parses the field&#8217;s <code>validity</code> and uses the field&#8217;s attributes to generate a help message.</p><p>The validities:</p><pre><code>  export const validities = [
    "badInput",
    "customError",
    "patternMismatch",
    "rangeOverflow",
    "rangeUnderflow",
    "stepMismatch",
    "tooLong",
    "tooShort",
    "typeMismatch",
    "valueMissing",
  ]</code></pre><p>The help message is then displayed in the help box under the field label (or in the legend for radio button groups, for example). This help box has the <code>aria-live</code> attribute set so that <strong>screen readers will pick up changes</strong> to the help message.</p><p>It also intercepts the submission and uses a call to <code>fetch</code> to call the same serverless function. (It gets the URL from the form&#8217;s <code>action</code> attribute &#8211; clever, no?) The function sees that the caller is an <strong>XmlHttpRequest</strong> and so responds with JSON and HTTP codes 422, 200, or 204 (or, ack, 500).</p><p>The validator script uses <code>document.createElement</code> and other DOM methods to insert error messages or replace the form with a success message.</p><p>Hence <strong>the forms work and validate even with JavaScript disabled. </strong>But with JS, they are both more helpful and more accessible. Progressive <em>enhancement</em>.</p><p>With JavaScript:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qaTf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qaTf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.png 424w, https://substackcdn.com/image/fetch/$s_!qaTf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.png 848w, https://substackcdn.com/image/fetch/$s_!qaTf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.png 1272w, https://substackcdn.com/image/fetch/$s_!qaTf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qaTf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.png" width="1456" height="684" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:684,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85882,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qaTf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.png 424w, https://substackcdn.com/image/fetch/$s_!qaTf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.png 848w, https://substackcdn.com/image/fetch/$s_!qaTf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.png 1272w, https://substackcdn.com/image/fetch/$s_!qaTf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9400b55d-e586-42da-aebf-e2f90e7a4f61_1498x704.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Without JavaScript:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KNTd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KNTd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.png 424w, https://substackcdn.com/image/fetch/$s_!KNTd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.png 848w, https://substackcdn.com/image/fetch/$s_!KNTd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.png 1272w, https://substackcdn.com/image/fetch/$s_!KNTd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KNTd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.png" width="1456" height="679" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:679,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94487,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KNTd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.png 424w, https://substackcdn.com/image/fetch/$s_!KNTd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.png 848w, https://substackcdn.com/image/fetch/$s_!KNTd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.png 1272w, https://substackcdn.com/image/fetch/$s_!KNTd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c4b84dc-42af-4ee5-a909-94c6d004f68c_1634x762.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Not perfect, but perfectly usable.</p><p>All JavaScript on the Craft Code site is used for <strong>progressive enhancement.</strong> Everything (e.g., the slide-out menu) should work without it, just maybe not as sweetly.</p><p>The slide-out menu is a good example. It works by CSS alone. When you click the menu trigger (hamburger), you are toggling a checkbox input. This uses CSS <code>:has()</code> to open the menu. JS enhances this to toggle a class on body so if your browser doesn&#8217;t yet support <code>:has()</code>, it still works. The only shortcoming is an older browser with no <code>:has()</code> support and JS disabled. But you can still tab to the menu and it opens!</p><p>Is it perfect? Oh, hell no. Compromises everywhere. Robbing Peter to pay Paul. For every three needs, pick two. That sort of thing. And always guessing, guessing.</p><p>With both JS and CSS disabled (think <strong>text-only browser</strong> like Lynx), the menu appears at the bottom of the page:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vX1A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vX1A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.png 424w, https://substackcdn.com/image/fetch/$s_!vX1A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.png 848w, https://substackcdn.com/image/fetch/$s_!vX1A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.png 1272w, https://substackcdn.com/image/fetch/$s_!vX1A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vX1A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.png" width="972" height="1208" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1208,&quot;width&quot;:972,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:181395,&quot;alt&quot;:&quot;The full menu of links to site page appears at the bottom of each page in text-only browsers (or with CSS disabled).&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The full menu of links to site page appears at the bottom of each page in text-only browsers (or with CSS disabled)." title="The full menu of links to site page appears at the bottom of each page in text-only browsers (or with CSS disabled)." srcset="https://substackcdn.com/image/fetch/$s_!vX1A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.png 424w, https://substackcdn.com/image/fetch/$s_!vX1A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.png 848w, https://substackcdn.com/image/fetch/$s_!vX1A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.png 1272w, https://substackcdn.com/image/fetch/$s_!vX1A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4b18f6-a67f-4f84-9f21-c1e72f2681eb_972x1208.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">At the bottom of every page when CSS is disabled.</figcaption></figure></div><p>You can see the menu toggle checkbox (which does nothing on Lynx) at the bottom.</p><h3>It&#8217;s responsive</h3><p>I&#8217;m <strong>not a fan</strong> of &#8220;mobile-first&#8221; design. This is a way to force lazy coders to consider what their desktop sites look like on mobile. That&#8217;s the good.</p><p>But we shouldn&#8217;t need a &#8220;mobile-first&#8221; approach to get us to consider a wide range of screen resolutions, sizes, and aspect ratios. It&#8217;s not binary, dammit! But devs love 1/0 approaches. I prefer to take that mathematically: 1/0 is infinity.</p><p>I&#8217;m still perfecting things on Craft Code (my to do list is huge), but it must work on a phone. Tablets, too.</p><p>The truth, however, is that HTML is responsive by default. Let me repeat that:</p><p><strong>HTML is responsive by default.</strong></p><p>What we as coders do, mostly, is build a perfectly-responsive HTML page/component, and the immediately <strong>use CSS to ruin the responsiveness</strong> because we&#8217;re only checking/prioritizing for a particular screen.</p><p>So here is the Craft Code approach:</p><ol><li><p>Always begin with pure HTML. Use <strong>semantic HTML</strong>. Structure the page properly with landmarks and headings. Check it with accessibility tools. Notice how it works just fine on <em>every</em> browser, even <a href="https://lynx.invisible-island.net/">Lynx</a>, as primitive a browser as you can find. <strong>Build the whole damn site/page/component in HTML alone </strong><em><strong>first</strong></em><strong>.</strong></p><ol><li><p>Think hard about <strong>landmarks</strong>! Use <code>&lt;header&gt;</code>, <code>&lt;main&gt;</code>, and <code>&lt;footer&gt;</code> to divide up the page. Use <code>&lt;nav&gt;</code>, <code>&lt;aside&gt;</code>, and <code>&lt;section&gt;</code> where they make sense. Nest headers <code>&lt;h1&gt;</code> to <code>&lt;h6&gt;</code> properly (you will never really need to go further than <code>&lt;h4&gt;</code> and rarely that far).</p></li><li><p>Use ordered <strong>lists</strong> (<code>&lt;ol&gt;</code>) for lists where the <strong>order</strong> is important, and unordered lists (<code>&lt;ul&gt;)</code> otherwise. For lists where each term is followed by a <strong>description or definition</strong>, use a description list (<code>&lt;dl&gt;</code>) and possibly the <code>&lt;dfn&gt;</code> element. See the <a href="https://craft-code.dev/glossary">Craft Code glossary</a> pages.</p></li><li><p>Use tables for <strong>tabular data</strong>, not for layout. Tabular data generally has column or row headers, so use the right elements and attributes. But try to avoid tables as much as possible (unless very small). They are difficult to grasp and should be a last resort. YAGNI.</p></li><li><p>Use <strong>figures</strong> (<code>&lt;figure&gt;</code>) with captions (<code>&lt;figcaption&gt;</code>) to wrap graphs, charts, images, code snippets, etc.</p></li><li><p>Design <strong>forms</strong> and controls very carefully. There is a great deal of information available on how to design forms properly, including accessibility and usability (UX) concerns. Group controls with <code>&lt;fieldset&gt;</code> and use the <code>&lt;legend&gt;</code> element. Use <code>&lt;label&gt;</code> property and avoid the <code>placeholder</code> attribute. <strong>Do your homework</strong>.</p></li><li><p>Use the <strong>details</strong> element (<code>&lt;details&gt;</code>) with <code>&lt;summary&gt;</code> for digressions and information that can usually be left hidden. With a touch of JavaScript enhancement, these can make good accordion components. We use them on the <a href="https://craft-code.dev/faqs">FAQ page</a> (open all/close all JS enhancement coming soon).</p></li><li><p>Use the <strong>picture</strong> element (<code>&lt;picture&gt;</code>) with <code>&lt;source&gt;</code> elements to provide image options with different codecs, sizes, resolutions, etc. You can use media queries!  (See above code.) Or use the <code>srcset</code> attribute on <code>&lt;img&gt;</code>. Make it as performant as possible. Tools such as <a href="https://developer.chrome.com/docs/lighthouse/overview/">Lighthouse</a> and image optimizers (or services) help.</p></li><li><p>Use the <strong>rel attribute</strong> (e.g., <code>rel=&#8221;external&#8221;</code>, <code>rel=&#8221;glossary&#8221;</code>) on links (<code>&lt;a&gt;</code> and <code>&lt;link&gt;</code>), which makes adding CSS easier as well as helping user agents to understand the links.</p></li><li><p>Spend a good amount of time on <strong>metadata</strong> in the <code>&lt;head&gt;</code> element. Consider all the potential <code>&lt;meta&gt;</code> and <code>&lt;link&gt;</code> elements (charset, viewport, etc.). Add JSON-LD if possible (see <a href="https://schema.org/">schema.org</a>).</p></li></ol></li><li><p>Note that you have, if you inserted your content and maybe a few progressive-enhancement scripts for, say, form elements, <strong>90% of your website done</strong> and <strong>it works on all browsers! No exceptions. </strong>Now it&#8217;s time for CSS.</p><ol><li><p><strong>Use the most basic CSS first</strong>. Check that things work on any and all viewport sizes and both in portrait and landscape orientations. Set your fonts (we use <a href="https://modernfontstacks.com/">Modern Font Stacks</a> for speed).</p></li><li><p>If possible, <strong>test on older browsers</strong>. Use <a href="https://caniuse.com/">caniuse.com</a> to get an idea when various CSS features were implemented in different browsers. Gives you a good idea how many browsers are out there. And many are missing, such as Arc, Brave, Epic, Mullvad, Responsively, Tor, or Vivaldi, to name a few.</p></li><li><p><strong>Progressively enhance your CSS</strong> using newer features, but wrap them in <code>@supports()</code> to avoid messing up the CSS for earlier browsers. You can comment them out temporarily to see the difference.</p></li><li><p>You can use BEM or equivalent if you like. Personally, <strong>I like classes</strong>. I put classes based on the name of the component on each key element. I don&#8217;t need to put long class names. If I need to reach into an component I just use the parent&#8217;s class as well: <code>.subscribe-form .email-input</code>. If you need to override one of these it is <em>easy</em> to increase the specificity by, for example, including a tag name or two: <code>form.subscribe-form input.email-input</code>. In extreme cases, use an ID. Despite what many say, <strong>specificity is your friend.</strong></p></li><li><p>Focus very hard on <strong>not destroying responsiveness!</strong><em><strong> </strong></em>Test, test, test.</p></li><li><p><strong>CSS Properties</strong> are great for theming. Always provide fallbacks (call it your default style).</p></li><li><p><a href="https://piccalil.li/">Andy Bell</a> has an interesting approach, though he seems to have disappeared recently. We appear to be edging apart.. I also like <a href="https://every-layout.dev/">Every Layout</a>. And I&#8217;ve learned some good approaches from <a href="https://www.youtube.com/@KevinPowell">Kevin Powell</a>. Sigh &#8230; so much refactoring to do.</p></li></ol></li><li><p>Finally, <strong>add your JavaScript</strong>. I use TypeScript and <a href="https://astro.build/">Astro</a> to get bundling, a cheap component architecture, and TS transpiling, just as I use <a href="https://vercel.com/">Vercel</a> to get easy serverless functions. By this point the site is <strong>99% done</strong> and you are just adding progressive enhancement. Unless you&#8217;re building some kind of complex app such as a spreadsheet, that is. Or a game. But more on that later.</p><ol><li><p>Use the <a href="https://developer.mozilla.org/en-US/docs/Web/API">Web APIs</a>! Doing the work <strong>natively in the user agent</strong> is <em>much more performant</em> than downloading a huge JS library to do what the browser already knows how to do.</p></li><li><p>For <strong>forms</strong>, you have the <code>validity</code> properties and the <code>FormData</code> object, both of which make forms really easy. Why reinvent the wheel?</p></li><li><p>For <strong>modification of the DOM</strong>, creating elements, adding attributes, inserting and removing them, updating them, etc. is much faster with <code>createElement</code>, etc. If you find it onerous, write wrapper functions! You&#8217;re a programmer, are you not?</p></li><li><p>I have been experimenting with <strong>a very simple pubsub system</strong> using browser events (including custom ones) and event delegation. There are some exceptions, but you can catch almost everything at the document level and use the event object to figure how how to respond. Coming soon?</p></li><li><p><strong>Make sure that everything works without JavaScript</strong>, <em>even if that means trips to the server when JS is disabled.</em></p></li><li><p><strong>Check, check</strong>, <strong>check for accessibility concerns</strong>! Test on older browsers and even Lynx. Make sure your JS &#8220;enhancement&#8221; doesn&#8217;t break things.</p></li><li><p>Keep your JS to a minimum, both for performance reasons and for <strong>sustainability</strong>. Remember, YAGNI: you aren&#8217;t gonna need it. Keep it lean and mean and you won&#8217;t regret it.</p></li></ol></li></ol><p>I am pretty good with semantic HTML, but I&#8217;ve been doing it for decades. That said, I learn something new almost every day.</p><p>Years of working on assembly-line, commodity code in enterprise with React and MUI and similar libraries nearly destroyed my knowledge of CSS, which was never that great. In building Craft Code I have had to <strong>learn or re-learn</strong> an enormous amount. And I&#8217;m still embarrassingly weak.</p><p>So there is lots left to do on the CSS side, but if you wait for perfection before you ship, you will never ship. I&#8217;ve made that mistake too many times. So here it is, warts and all:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rSdU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rSdU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.png 424w, https://substackcdn.com/image/fetch/$s_!rSdU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.png 848w, https://substackcdn.com/image/fetch/$s_!rSdU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.png 1272w, https://substackcdn.com/image/fetch/$s_!rSdU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rSdU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.png" width="480" height="1039" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1039,&quot;width&quot;:480,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152926,&quot;alt&quot;:&quot;The Craft Code site is fully responsive.&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Craft Code site is fully responsive." title="The Craft Code site is fully responsive." srcset="https://substackcdn.com/image/fetch/$s_!rSdU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.png 424w, https://substackcdn.com/image/fetch/$s_!rSdU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.png 848w, https://substackcdn.com/image/fetch/$s_!rSdU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.png 1272w, https://substackcdn.com/image/fetch/$s_!rSdU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69eb8f3b-7337-42f9-ba9a-11c16f7c3e5b_480x1039.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Everything fits</figcaption></figure></div><p>My grasp of <strong>functional JavaScript</strong> is reasonably good. I might even be able to write a monad tutorial (but I won&#8217;t). I gave up on OOP a long time ago (fifteen years now!). I just can&#8217;t see a situation in which it is better than FP, and usually a lot worse. Of course, with JS I am regularly forced to deal with some OO, but I remember enough (SOLID and all that, design patterns, etc.) to get by.</p><p>Ha, ha. My grasp of TypeScript types is <strong>a lot less impressive</strong>. I prefer types to interfaces because, hello, the latter are <strong>mutable</strong>. Not very FP. So far I&#8217;ve gotten by mostly without interfaces, but then I&#8217;m not doing OOP.</p><p>But I still have a lot of <strong>red squiggly lines</strong> in my TS files and I&#8217;ll be damned if I can figure out what the hell is wrong. And huge &#8220;error&#8221; messages filled with ellipses don&#8217;t help.</p><p>(I figured out how to force the ellipses to render the hidden content. Sadly, that didn&#8217;t help much. If it tells me what I&#8217;m missing then it&#8217;s an easy fix. But if it doesn&#8217;t, I&#8217;m often helpless. It&#8217;s trial and error time. I do way, way too much casting. I never had this kind of problem with Scala, so maybe it&#8217;s a TypeScript thing.)</p><p>So for the Craft Code site, here is my <strong>self-completed report card</strong> <em>so far</em>:</p><ul><li><p><strong>HTML</strong>: A or A+</p></li><li><p><strong>CSS</strong>: B-</p></li><li><p><strong>JS</strong>: B+</p></li><li><p><strong>TS</strong>: C</p></li><li><p><strong>Accessibility</strong>: A</p></li><li><p><strong>Performance</strong>: A</p></li><li><p><strong>Sustainability</strong>: B</p></li></ul><p>Sorry, Dad! Please don&#8217;t ground me. This is a lot to learn! I&#8217;m trying.</p><p>Still, here&#8217;s the home page in Lynx:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M94D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M94D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.png 424w, https://substackcdn.com/image/fetch/$s_!M94D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.png 848w, https://substackcdn.com/image/fetch/$s_!M94D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!M94D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M94D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.png" width="1456" height="1408" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1408,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:281843,&quot;alt&quot;:&quot;The Craft Code site works even in the Lynx text-only browser.&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Craft Code site works even in the Lynx text-only browser." title="The Craft Code site works even in the Lynx text-only browser." srcset="https://substackcdn.com/image/fetch/$s_!M94D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.png 424w, https://substackcdn.com/image/fetch/$s_!M94D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.png 848w, https://substackcdn.com/image/fetch/$s_!M94D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!M94D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca91436b-33cd-4af6-bca7-2dabedfc7675_1654x1600.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Even in Lynx</figcaption></figure></div><p>Not bad, eh? That seems pretty workable. Pages load in under a second. They are navigable by keyboard. There are skip links (multiple). Plenty of ARIA labels and describedBys. I&#8217;m pretty happy with it <em>so far.</em></p><p>And that&#8217;s what I&#8217;ve been doing for six months or more. Updates as I move forward, and more Cantankering coming soon now that I have a breather.</p><p>Whew!</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.cantankerouscoder.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Cantankerous Coder! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The best thing about 9/11]]></title><description><![CDATA[It's a wonderful litmus test for identifying morons]]></description><link>https://www.cantankerouscoder.com/p/the-best-thing-about-911</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/the-best-thing-about-911</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Wed, 13 Sep 2023 05:51:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_z93!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Note: if you&#8217;re planning to argue with me, then don&#8217;t waste your time. I&#8217;ve said what I have to say here and I have less than zero interest in your take. And this goes doubly for those who don&#8217;t even bother to read what I&#8217;ve written but just jump straight to knee-jerk reaction. Hell, if I can figure out how to do it, I&#8217;ll just turn comments off.</p></blockquote><p>The best thing about the 9/11 attacks is that whenever the topic comes up, you can learn immediately who among your friends is rational, who is irrational, and who simply isn&#8217;t paying attention.</p><p>I am sick to death of this topic. But it is never, ever going to go away, is it? That&#8217;s because an entire <em>fuck ton</em> of mostly Americans just can&#8217;t believe that the Taliban could pull something like that off, even with Saddam Hussein&#8217;s help.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.cantankerouscoder.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Cantankerous Coder! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Of course, the Taliban and Saddam Hussein had nothing to do with it, but you know what I mean. Talk to any 9/11 Goofer for more than five minutes and they&#8217;ll usually let it slip out: something about camel jockeys and sandals and towel heads, whatever those are.</p><p>Those people are just not good enough to threaten chickenshit Americans with box cutters (not even a decent Bowie knife, for God&#8217;s sake!), take control of a big jet, and then fly it into a building. That takes &#8216;merikin know how! Shit, an American <em>dentist</em> could probably manage it. No way those Saudi <em>engineers</em> could.</p><h2>It ain&#8217;t about evidence</h2><p>So, having established prima facie that it would be impossible for these college educated, highly motivated men to do such a thing, we can safely disregard all the evidence&#8212;and there is a lot of it&#8212;that they actually <em>did</em> do it.</p><p>In place of this obviously false conclusion based on clear evidence that pretty much everyone on Earth saw, we can make innumerable claims based on <strong>no evidence at all</strong>. Oh, there <em>was</em> evidence to support all the crazy 9/11 Goofer theories, of course, but those evil theys (look out for the theys) destroyed it all. The theys must number in the thousands. &#8220;They&#8221; are <em>everywhere!</em></p><p>Take the &#8220;some engineer/general/dentist says&#8221; trope. I love this one. We have to believe everything this gibbering idiot says because <em>he&#8217;s an engineer</em>. Or a general. I was kidding about the dentist, but who knows? Goofers will believe anyone who agrees with them, and no one who doesn&#8217;t.</p><p>Well, I know lots of engineers and many of them are completely full of shit on most topics. Some are utterly incompetent even in their own area of &#8220;expertise&#8221;.</p><p>So why should I trust this guy&#8212;the one who is making money off his outrageous claims? Doesn&#8217;t he fail the cui-bono test?</p><p>And what kind of engineer is he anyway? Are these detailed skills so easily transferrable? Does an electrical engineer&#8212;or a <em>software</em> engineer&#8212;know all about building construction? Or explosives? Or metallurgy?</p><p>But even if these &#8220;experts&#8221; who magically appear just in time to tell us all the foul truth about our government&#8217;s duplicity and treason <em>were</em> experts in not just civil engineering and construction of high rise buildings and large jet crashes into such buildings but also large jet crashes into the <em>very unusual buildings</em> of the WTC&#8212;unlikely as such an event had never occurred before&#8212;so what? We&#8217;re talking a handful of engineers at best.</p><p>Even if a thousand &#8220;engineers&#8221; sign some statement, stop and <em>think</em> for a moment (here is where we leave the 9/11 Goofers behind):</p><ul><li><p>What kind of engineers are they?</p></li><li><p>What access have they had to the sites, the wreckage, and any of the data?</p></li><li><p>How many of them have any actual expertise in this kind of event? (Answer: none.)</p></li><li><p>What percentage of engineers on Earth do they represent?</p></li></ul><p>That last point is particularly illuminating. There are <em>tens of millions of engineers in the world</em>. If 10,000 out of 10,000,000 engineers make some claim, then they represent 0.1% of engineers. And it&#8217;s a lot fewer than 10,000 saying this shit and there are many more than 10,000,000 engineers in the world.</p><p>Can you think of a single group of humans of any significant size that doesn&#8217;t include its percentage of kooks? Do you think engineers are any different? And it&#8217;s a percentage much greater than 0.1, I promise you.</p><p>People believe what they want to believe.</p><h2>The big lie</h2><p>Many have attributed (not quite correctly) to the Nazis and specifically Joseph Goebbels the axiom: <em>if you&#8217;re going to lie, lie big</em>. Well, Goebbels may not have actually said it, but it does seem to work.</p><p>So the first thing the 9/11 Goofers do is start spouting out wild claims. It is pointless to refute these claims, although I&#8217;ll demolish a few just for shits and giggles, as the Goofers are <em>not rational</em>.</p><p>Here are my favorites:</p><ul><li><p>There were bombs in the buildings</p></li><li><p>Building 7 of the WTC is the smoking gun and can only be explained with bombs</p></li><li><p>The planes were flown by remote control</p></li><li><p>It was not a plane, but a missile that hit the pentagon</p></li><li><p>Did we mention bombs in the buildings?</p></li></ul><p>Oh, there is so much more! Just today I read a comment online that said that the buildings were taken out by <strong>nukes.</strong><em><strong> </strong></em>OMG. ROTFL. You <em>really </em>can&#8217;t make this shit up. Oh, wait &#8230; I guess some folks can.</p><p>Why do the Goofers have to keep coming up with bigger lies? Simple: with each passing day it becomes more obvious that their theories are worthless bunk. Rather than admit that they are wrong, they simply double down.</p><p>Baffle &#8216;em with bullshit is the name of the technique, IIRC.</p><p>So I will answer these few one at a time. But I&#8217;m not going to waste time <em>proving</em> them wrong. That&#8217;s what the Goofers want you to do. Then they just keep adding absurd detail and demanding that you prove every single detail wrong. If not, then their claims must be taken wholesale as a given.</p><p>Of course, they need find only one minor, even insignificant discrepancy in the official story and we must then dismiss it entirely and out of hand.</p><p>Now <strong>pay attention here</strong> because I&#8217;m only going to say this once.</p><p><strong>The onus is upon the people making outlandish claims to prove them right</strong><em>.</em></p><p>The government doesn&#8217;t have to <em>prove</em> anything unless it makes claims that go against what everyone saw. Planes hit buildings. Buildings burned. Buildings collapsed. Why? Because they were hit by planes and burned. Duh!</p><p>Only those who make claims <em>contrary</em> to the obvious explanation bear the burden of proof.</p><p>This is the part that the Goofers get all backwards. On purpose. They pretend that all they have to do is appear to poke some hole in the &#8220;official story&#8221;&#8212;often by making absurd claims that contradict what can plainly be seen in dozens of videos of the event from all different angles&#8212;and presto! Their version is <em>proven</em>.</p><p>Cough, cough. That&#8217;s not how proof works, you blithering idiots. You are the ones on the hook to prove with solid evidence <em>not hearsay and wild, unsupported claims</em> that the official story is wrong and that yours is right.</p><p>There has never been a perfect proof of any complex event and there never will be. The best we can do is a <em>preponderance</em> of evidence. And virtually all the evidence points to the official story and effectively none honestly contradicts it.</p><h2>The official story</h2><p>The official story is simple and obvious. Hell, we all saw it&#8212;either with our own eyes, or on the videos shown on repeat for months afterward. Is there anyone on Earth not blind who hasn&#8217;t seen a video of the towers falling? Hard to believe.</p><p>Some hijackers&#8212;nineteen, we&#8217;re told&#8212;hijacked four commercial flights, turned them around, and flew them into buildings, or tried to. Two went to NYC and hit the twin towers of the World Trade Center. A third went to DC and hit the Pentagon. A fourth crashed in Pennsylvania after the passengers apparently tried to overpower the hijackers, as confirmed by numerous cell phone calls from the passengers.</p><p>Note the lack of speculation there. We&#8217;re not guessing at motives. We&#8217;re not making any wild claims about exactly how this all went down. We&#8217;re sticking to the hard facts.</p><p>Within two hours of the strikes on the WTC, both towers had collapsed. Much later, the WTC 7 tower, which had been burning for several hours, collapsed as well. The plane that hit the Pentagon made a big hole and left wreckage everywhere. The plane that went down in Pennsylvania left wreckage strewn across a wide area and caused a large brush fire.</p><p>Now the theory:</p><p>The planes that crashed into the twin towers did severe damage to the supports and ripped fireproofing off of others. The burning fuel ignited everything else on those floors (including the bodies of the victims, BTW). Those fires burned long enough and hot enough to <em>weaken</em> the remaining supports. When the weakened columns could no longer hold the weight of the ~14-29 story building <em>above the crash site</em>, they gave way.</p><p>Then that 14- or 29-story building <em>above the crash site</em> dropped onto the lower floors and began pancaking them one at a time while accelerating downward.</p><p>A similar fate awaited WTC 7, but as it was not as badly damaged, it held up quite a while longer.</p><p>A plane flew into the Pentagon and made a hole. They found the plane parts and the black box. End of story.</p><p>The rest is mostly irrelevant detail, of interest to the investigators and ghouls, but of zero importance to the big picture.</p><h2>Bombs away</h2><p>The first big bomb in the Goofers reasoning is that the WTC towers could not have fallen &#8220;just&#8221; because big, heavy, jet aircraft crashed into them and set them on fire. No way, no how.</p><p>This should be your first clue that no rational thought is involved. Where is there any evidence <em>at all</em> that the planes could <em><strong>not</strong></em> have caused the buildings to collapse? Why not? Exactly zero evidence is presented, just a claim, which we are supposed to accept at face value.</p><p>Did you buy that bullshit the moment you heard it? If so, why? Why are you so eager to believe that it <em>couldn&#8217;t</em> be the collisions and the fires?</p><p>Once you have made that <em>unshakeable</em> assumption&#8212;and doubled down with engineering-speak such as &#8220;near free-fall velocity&#8221; and &#8220;into its own footprint&#8221;&#8212;you&#8217;ve already lost the battle.</p><p>Utter fail. You&#8217;re <a href="https://www.thoughtco.com/begging-the-question-petitio-principii-250337">begging the question</a>. You have assumed up front exactly what you pretend to be trying to prove.</p><p>For the record, it&#8217;s free-fall <em>acceleration.</em> And what do they mean, &#8220;near&#8221;? That could mean anything. And how fast would a building that collapsed because of support failure fall? Would its acceleration be &#8220;near free-fall&#8221; as well?</p><p>You see, if you&#8217;re a 9/11 Goofer, then you already know where you want to end up: it sure wasn&#8217;t some dumb camel-jockeys who pulled this off against the world&#8217;s sole superpower! NO WAY. So it saves time to rule the <em>truth</em> out of bounds first thing.</p><p>Then you just drown everyone in irrelevant details, most of which are entirely fictional. Somebody said something on the interwebs! OMG! <em>There&#8217;s your proof!</em></p><p>The basis for this belief is &#8230; well, the true basis is what I said above: no way them camel-jockeys did this. But we can&#8217;t <em>say</em> that, can we? Not out loud, anyway. So we make up a basis, which is that <em>jet fuel doesn&#8217;t burn hot enough to melt steel.</em></p><p>And that&#8217;s true, but deceptive. It&#8217;s a classic <strong>straw man</strong> because no sane person is claiming that the support columns <em>melted</em>. Ha, ha. You didn&#8217;t see that coming, did you?</p><p>That&#8217;s how the trick works.</p><p>What actually happened is that the support columns <em>weakened</em> until they could no longer support the weight of the 14-29 story building above them. That&#8217;s a lot of weight! Steel weakens appreciably well below the burning temperature of jet fuel.</p><p>Then the supports gave way. Not all at once and not all at the same time. But as the first columns gave, the load was transferred onto the remaining columns, so they gave way even more quickly. Once it started, it all happened very rapidly.</p><p>And when the columns gave way, that huge building, 14-29 stories high, came crashing down onto the top of the building below. That was too much for the weakened supports on that floor, so it gave way and the top story pancaked.</p><p>Then the next and the next and the next, with an ever increasing mass accelerating downward. Resistance was, as they say, <em>futile.</em></p><h2>Buildings are big, heavy things</h2><p>Go stand next to a 14-story building and look up. Now imagine that enormous mass raised up and dropped from several meters onto the top of the building next to it. And with one corner hitting first. What would you expect to happen?</p><p>And this ever-increasing mass as the debris from each successive floor was added to it, with ever-increasing momentum, pancaked floor after floor all the way down. You saw it, didn&#8217;t you? That top section of the building crashing <em>through</em> the bottom section?</p><p>And like popping a paper bag full of confetti, the debris from each pancaked floor blew out the windows, <em>exactly as one would expect, </em>and floor by floor exactly as the collapse proceeded <em>and every video shows.</em></p><p>If you search the Web for videos of the towers collapsing and find a good, clear close up (getting harder every year), you can see this happen in real time.</p><p>Watch the corner of the building where the plane hit. You will see it start to buckle. The top of the tower <em>tilts</em>&#8212;and this long before any imaginary bombs go off. Then the columns give way and the top of the building slams into each floor consecutively, blowing the debris out the windows. <strong>You can watch this happen!</strong></p><p>And an important note: WTC 2 was hit at 9:03 AM and collapsed at 9:58, fifty-five minutes later. But WTC 1 was hit earlier&#8212;at 8:46 AM&#8212;and didn&#8217;t collapse until 10:28, one hundred and two minutes later. Why did the South Tower fall first despite being hit later?</p><p>The answer is simple: look at where the planes hit. WTC 1 was hit around the 96th floor, leaving 14 stories above the damage. WTC 2 was hit around the 81st floor, leaving 29 stories above the damage. Twice as much weight, half as long before the collapse. Coincidence?</p><p>If there were bombs, why not blow each building after a period of time, say fifteen minutes? Why wait? Why the weird time difference? Collapse because of the collisions and fires simply makes more sense, not less.</p><p>And the buildings did <em>not</em> fall &#8220;into their own footprints&#8221;. I guess what the Goofers are claiming, again without any evidence at all, is that the top of the building should have pivoted onto its side and fallen while the bottom section remained standing, like some sort of Road Runner cartoon. Were the bombs made by Acme?</p><p>But don&#8217;t believe me. Believe your own eyes:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_z93!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_z93!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.png 424w, https://substackcdn.com/image/fetch/$s_!_z93!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.png 848w, https://substackcdn.com/image/fetch/$s_!_z93!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.png 1272w, https://substackcdn.com/image/fetch/$s_!_z93!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_z93!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.png" width="944" height="1350" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3922a200-cf82-478f-a359-16c8243641b1_944x1350.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1350,&quot;width&quot;:944,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:622259,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_z93!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.png 424w, https://substackcdn.com/image/fetch/$s_!_z93!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.png 848w, https://substackcdn.com/image/fetch/$s_!_z93!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.png 1272w, https://substackcdn.com/image/fetch/$s_!_z93!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3922a200-cf82-478f-a359-16c8243641b1_944x1350.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Before the collapse the edge of the building is a straight line.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JV_v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JV_v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.png 424w, https://substackcdn.com/image/fetch/$s_!JV_v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.png 848w, https://substackcdn.com/image/fetch/$s_!JV_v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.png 1272w, https://substackcdn.com/image/fetch/$s_!JV_v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JV_v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.png" width="1043" height="1355" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1355,&quot;width&quot;:1043,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:686321,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JV_v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.png 424w, https://substackcdn.com/image/fetch/$s_!JV_v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.png 848w, https://substackcdn.com/image/fetch/$s_!JV_v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.png 1272w, https://substackcdn.com/image/fetch/$s_!JV_v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06755851-0525-44f9-ace5-20b2e94e6392_1043x1355.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The corner finally gives way and the top of the building tilts as the remaining columns snap.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t9Qk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t9Qk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.png 424w, https://substackcdn.com/image/fetch/$s_!t9Qk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.png 848w, https://substackcdn.com/image/fetch/$s_!t9Qk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.png 1272w, https://substackcdn.com/image/fetch/$s_!t9Qk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t9Qk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.png" width="1051" height="1359" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1359,&quot;width&quot;:1051,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:741268,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!t9Qk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.png 424w, https://substackcdn.com/image/fetch/$s_!t9Qk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.png 848w, https://substackcdn.com/image/fetch/$s_!t9Qk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.png 1272w, https://substackcdn.com/image/fetch/$s_!t9Qk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F582ef97e-e965-40f6-bf51-6b9817800099_1051x1359.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Once in full collapse, the significant tilt of the upper stories can easily be seen. And notice how the bottom of the building is untouched as the top comes thundering down. Where are these &#8220;squibs&#8221;? GIVE IT UP, GOOFERS.</figcaption></figure></div><p>Quod erat demonstrandum. 9/11 Goofers, STFU. If it was bombs, <em>why the tilt? </em>Remember: it happens <em>before</em> any &#8220;explosions&#8221;.</p><p>Compare this to videos of actual controlled demolitions. Do they start at the <em>top</em> and then blow up each floor successively as the upper floors fall? Don&#8217;t be ridiculous. They blow out all the supports at once.</p><p>But we shouldn&#8217;t even need to look at these images to understand that the bomb theory is utter bullshit. </p><h2>Use your brain for more than skull filler</h2><p>The day after the attacks, I was chatting with someone online who first mentioned the idea that there were bombs in the buildings. He seemed like an intelligent man, so I considered it.</p><p>And dismissed it after maybe thirty seconds as utter bullshit. Poppycock. Fetid horse manure.</p><p>How was I able to reach this conclusion so quickly? Easy. <em>I used my fucking brain as something other than a paperweight.</em></p><p>The obvious and immediate questions are:</p><ul><li><p>Who planted these bombs? (Answer: too many people to keep a conspiracy secret for twenty-two years.)</p></li><li><p>Why? (Flying planes into the buildings wasn&#8217;t traumatic enough?)</p></li><li><p>How did they do it? (The Goofers always skip this part.)</p></li><li><p>Most importantly, <strong>what would it involve to rig up three enormous buildings that were occupied and guarded 24/7 with explosives from top to bottom without anyone noticing?</strong></p></li></ul><p>When I got to the fourth question, I realized that the first three were unnecessary. What would it involve? Hmm &#8230;</p><p>Tons of explosives hauled in somehow. Removal of walls on all floors, the planting of explosives on the support columns, running wires all up and down the building (what, we&#8217;re going to depend on radio signals getting through?), and then plastering the walls back up, painting them, and all this with <strong>no one noticing</strong>.</p><p>Remember that the claim is that the explosives are set off on the floors sequentially as the top is falling. That is the only way that the debris flying out the windows makes sense. So you&#8217;d have to put bombs on <em>every </em>floor.</p><p>If you believe that that is possible, then you&#8217;ll believe <em>anything</em>, which is kind of the point. You are no longer rational, if you ever were. But even if it were possible, the Goofers have never explained, or even tried to explain, why this insane idea is any more plausible than that the buildings simply fell because the support columns gave out.</p><p>The Goofers never heard of Occam&#8217;s Razor, evidently.</p><p>But the final nail in the coffin of this stupidity is that in twenty-two years, not one single reliable witness has come forward to discuss all the &#8220;maintenance&#8221; work being done on <em>every</em> floor involving ripping out walls, installing something in them, resurfacing them, and painting them.</p><p>Think of all the disruption. The construction dust and debris&#8212;what, they took it out in the elevators? The stink of fresh paint. <em>And somehow not one person noticed this?</em> No one got suspicious after the towers &#8220;blew up&#8221;?</p><p>Oh, wait! I bet they used the Enterprise transporter to <em>beam</em> those explosives into the walls! Yeah &#8230; that&#8217;s the ticket.</p><h2>But &#8230; but &#8230; but &#8230; WTC 7!</h2><p>Oh, dear God. More utter bullshit.</p><p>WTC 7 was a somewhat smaller&#8212;but still enormous (47 stories)&#8212;building near the towers that was hit with debris when the towers fell, igniting fires on some ten floors near the bottom. Those fires burned steadily for seven hours and spread before the building finally collapsed.</p><p>The explanation for why WTC 7 failed is a bit more complex. It wasn&#8217;t the columns themselves that gave way initially, although some were significantly weakened. It was connectors in the floor that allowed the columns to spread the load. When one of those snapped, it started a chain reaction that brought the whole building down.</p><p>This is an eminently reasonable explanation. Why would anyone even question it? Unless they had an <em>ulterior motive</em>, that is.</p><p>But how it collapsed is <em>irrelevant.</em></p><p>What??? How could it be irrelevant? Isn&#8217;t it the key to the <em>entire</em> 9/11 Goofer bullshit?</p><p>Well, it is. So its irrelevance means we can dismiss the 9/11 Goofers as utterly irrational morons and be done with this. <em>Please</em>.</p><p>It&#8217;s irrelevant because we&#8217;ve <em>already determined</em> that there is zero reason to believe that towers 1 and 2 were brought down my anything other than the damage from the collisions and fires and maybe some not-quite-good-enough engineering.</p><p><strong>No one, not even the hijackers, expected the towers to fall.</strong> That they did came as an utter shock to everyone on Earth, <em>this author included</em>. This is, in part, why there has been so much speculation.</p><p>So if there were no bombs in 1 and 2, and no one expected them to fall, then the collapse of WTC 7 would have been extremely suspicious, no? Isn&#8217;t the key to their &#8220;theory&#8221; that WTC 1 and 2 <em>had to fall</em> to provide cover for the <em>real</em> goal: destroying WTC 7?</p><p>Because, I guess, the Bush Administration just really hated that building. Maybe it was sucking up to the towers a bit too much. Or maybe it was an aesthetic fault: they hate granite or something.</p><p>No one died in WTC 7, so what was in those buildings that the government so wanted to get rid of so badly? And why was such key information stored only in one place? And why did they need to destroy a whole building to get rid of it?</p><p>Oh, wait! I know! WTC 7 is where they kept all the proof that 9/11 was an inside job. No wonder we can&#8217;t find any evidence of that these days!</p><p>Then add that the explanation given by the government is entirely satisfactory&#8212;it accounts for all the key events&#8212;and that we&#8217;ve already determined that rigging a huge building with bombs <em>secretly</em> would be incredibly difficult. And, of course, no one has come forward with any real evidence at all to suggest otherwise.</p><p>And <em>it just isn&#8217;t necessary to the explanation. </em>It doesn&#8217;t make the explanation for what happened on 9/11 any more believable. Quite the reverse: it makes it absurd. It&#8217;s absolutely <em>through the looking glass.</em></p><p>How is this claim that thousands of Americans conspired to kill thousands of other innocent Americans, destroy three of their most important buildings, and humiliate America and Americans in front of the whole world <em>more</em> likely than that some very angry bad men got incredibly lucky while the people who were supposed to be watching them were napping?</p><p>Why do so many people prefer to believe the absurd rather than the simple and obvious truth&#8212;a truth they can see with their own eyes? Planes! &#8594; Crash! &#8594; Fire! &#8594; Collapse! Oh, noes!</p><p>There can only be one reason for such irrationality: they are reacting <strong>emotionally: </strong>brain disengaged.</p><p>After all, how many <em>thousands</em> of people&#8212;air traffic controllers, fire fighters, military officials, airport personnel, security guards, police, reporters, etc.&#8212;would have to be in on this massive conspiracy? And not one has blown the whistle since? Did <em>all of them</em> die mysteriously?</p><p>The 9/11 Goofers and their dupes simply do not want to believe that some A-rab hijackers could have pulled this off. Not without help from smart (read: white) American traitors.</p><p>They are so offended by the idea that America got caught with its pants down that they&#8217;d rather believe a fairy tale. They&#8217;d rather believe that Americans were <em>traitors</em> than that they were incompetent and negligent.</p><p>It&#8217;s insanity. And remarkable bigotry.</p><p>As for the planes being flown by remote control, I&#8217;m not even going to bother. Does anyone <em>seriously</em> believe that crap? But I do want to point out the obvious: this claim <em>does away with the A-rab element entirely.</em> How utterly convenient! There were no hijackers! Drone operators in containers in the Nevada desert piloted those planes into the buildings as part of the mega-conspiracy!</p><p>Oh, it&#8217;s all so clear now! Our brilliant, traitorous, white boys.</p><h2>How big a hole does a plane make?</h2><p>We can dispense with this one quickly. Just as the &#8220;bombs in the buildings&#8221; trope begins by eliminating the truth as a possibility right up front, thus ensuring that the wacky nonsense spouted by the 9/11 Goofers will be taken at face value by literally hundreds of millions of not-very-bright humans, we begin the Pentagon story by <em>ruling out the plane</em>.</p><p>Naturally.</p><p>Gosh, doesn&#8217;t that hole look a touch <em>small</em> for such a big aircraft?</p><p>And we&#8217;re off and running! Why, <strong>that hole just isn&#8217;t big enough</strong>. Obviously! No need to measure it. No need to compare it to other holes in similar buildings by similar jets flying at similar speeds. Nah! No need to do complex computer modeling to figure it out, either. No way.</p><p>We&#8217;ll just eyeball it. From <em>photographs</em>. What could go wrong?</p><p>Now that we&#8217;ve <em>ruled out the possibility that it was a commercial jet that hit the building</em>&#8212;begging the question as mentioned above&#8212;we can proceed with all sorts of outlandish nonsense.</p><p>What the 9/11 Goofers seem to miss (because they are desperately trying to miss it) is that this not only doesn&#8217;t answer any questions, it raises an enormous number of <strong>new</strong> questions, for which they have wild guesses and claims but <em>no evidence at all</em>.</p><p>The obvious story is too simple. Planes were hijacked. One was flown into the Pentagon. No way, right? It has to be much more complicated and mysterious than that. Must have been a missile, am I right?</p><p>A few questions:</p><ul><li><p>How did all that debris from an American Airlines flight, including the black box, get to the debris field outside the Pentagon? When did &#8220;they&#8221; sneak that in there?</p></li><li><p>If the Pentagon was hit by a missile, then whose missile? Fired from where? What kind of missile? Where is there <em>any evidence at all that it was a missile?</em></p></li><li><p>Hmm. So then <strong>what happened to the plane and all the passengers?</strong></p></li></ul><p>And WHY? WHY? WHY? Why use a missile when you had a <em>perfectly good, hand-piloted airplane on the way that would do the job at least as well? </em>Remote controlled, too. Right?</p><p>Oh, but so-and-so said he saw a missile. OK, but more than a hundred people saw an American Airlines plane. Why are the majority of witnesses dismissed out of hand as dupes or government agents, but the one or two exceptions taken as the gospel truth?</p><p>Any <em>rational</em> person would dismiss this nonsense immediately because he or she would see that far from explaining anything, this &#8220;theory&#8221; (read: idiocy) introduces a significant number of <em>new</em> and difficult-to-answer questions and <strong>answers no questions at all. </strong>But then there weren&#8217;t really any questions until the Goofers made them up.</p><p>All to exactly zero benefit. I repeat: <em>there weren&#8217;t any questions to begin with!</em></p><p>Four flights were hijacked. Four are accounted for. More than a hundred witnesses saw the plane fly toward the Pentagon and/or hit it. The debris from the plane was all over the scene and was clearly identified at the time and on the spot. Ditto for UA 93 in PA.</p><p>Hmm. How can that debris <em>possibly</em> be explained? Hey! Maybe <strong>a</strong> <strong>fucking American Airlines flight was deliberately crashed into the building!</strong></p><p>What? No! Impossible. Literally everything points to that, so <em>that can&#8217;t possibly be true</em>. It must have been aliens from outer space! No, wait! It was the New York Giants, still angry that they got their asses handed to them in the Super Bowl. Or wait &#8230; maybe GOD blew up the building and He&#8217;s just messin&#8217; with us!</p><h2>I guess you <em>can</em> make this shit up</h2><p>By why do we? Why do so many people insist on obvious fallacies and ignore all evidence to the contrary?</p><p>You might as well ask why we are all going about our daily business as if nothing is wrong in the world despite knowing that our current activities are steadily destroying all life on Earth, and that a horrific bill is coming due.</p><p>It&#8217;s called <em>denial</em>. It&#8217;s a trick we use to get out of cognitive dissonance without having to do anything we don&#8217;t want to do. We just make shit up.</p><p>For example: you steal a large sum of money from your best friend and he finds out. This creates a terrible cognitive dissonance. Either you have to return the money, apologize, and make it up to him&#8212;no way! impossible! MINE!&#8212;or you have to admit that you are a lying, thieving skunk&#8212;also impossible.</p><p>Your are stuck. It&#8217;s a dilemma. But then the obvious &#8220;solution&#8221; occurs to you: simply <em>rewrite the narrative.</em> Just make up a story about how your friend did you some horrible wrong first, and your taking of his money was therefore utterly justified. Yes! That&#8217;s it. <strong>He&#8217;s the bad guy, not you. </strong>It was your money all along!</p><p>This works great for 9/11, too. Some foreigners outsmarted the great American government and made fools of Americans? Impossible. New narrative: <em>we did it to ourselves.</em></p><p>That this makes Americans even <em>more</em> stupid doesn&#8217;t seem to occur to the Goofers. Foreign agents sneaking in and getting lucky is bad enough. But our own people did it right under our own noses? Just how stupid are we? (Rhetorical question.)</p><h2>The worst part: it was a <em>pinprick</em></h2><p>But the worst part of all this is that 9/11 was, in itself, insignificant. We&#8217;ve had floods, fires, hurricanes, etc. that were far worse, and everyone has long forgotten them. But we just can&#8217;t let go of 9/11. It&#8217;s the effrontery of those swarthy evildoers!</p><p>Who did they think they were?</p><p>More Americans die every three weeks, month after month, year after year, because of lack of health care than died on 9/11. But no one gives a shit except their friends and families who are helpless to change anything because humans only care about their own kin. Your kin? Meh.</p><p>More Americans die of gun deaths every three weeks than died on 9/11, more than half of those suicides. No one gives a shit but the survivors. And we loves our guns.</p><p>More Americans died of COVID-19 <strong>on a bad day</strong> than died on 9/11. And there were <em>many</em> bad days.</p><p>Over the past three years, it is probable that more Americans died from COVID than died in all the wars America has ever fought. But half of America couldn&#8217;t be arsed to take even rudimentary precautions and, rather than acting with compassion and intelligence, the government used it as an excuse to ramp up totalitarianism and to boost corporate profits.</p><p>More Americans die every <strong>four days</strong> from medical errors than died on 9/11, but the death toll never abates. No action is taken. No one cares.</p><p>The reason we just can&#8217;t let go of 9/11 is because we all know the truth:</p><p><strong>9/11 exposed the weakness of the American state and the cowardice and bigotry of the American people and their remarkable ignorance and insouciance.</strong></p><p>The US government wants people to think that &#8220;they hate us for our freedoms&#8221;. Which freedoms are those?</p><p>The freedom to die young for lack of health care? The freedom to live in a cardboard box under a bridge? To eat out of dumpsters? To be assaulted and often killed in schools, malls, churches, government offices, etc. so that others can have their deadly toys and imagine themselves tough guys? To die of a fentanyl or oxycontin overdose? To be shot and killed by the cops you called for help?</p><p>9/11 was blowback, pure and simple. It was the chickens coming home to roost. After centuries of robbing, raping, extorting, bullying, and murdering people all over the globe (and many right at home), a few of the victims decided to fight back: to give the Americans a taste of their own medicine. And it turned out to be surprisingly easy.</p><p>The Americans are paper tigers.</p><p>The planners, whoever they really were, must have been ecstatic at their success. Not that the buildings fell down. That was minor. No, they must have been ecstatic that the stupid Americans fell for it. They ripped off their mask and showed the world just how brutal and vile they truly were, not that many had been fooled. In Afghanistan, then Iraq, then Libya and Syria, now in Ukraine and always, always in Gaza.</p><p>There is no recovering from that.</p><p>And in their infantile terror, they rushed to surrender the very freedoms and liberties that they insisted the &#8220;terrorists&#8221; were hating them for. Wow. You <em>really</em> can&#8217;t make this shit up.</p><p>But it was a fucking pinprick! A tiny, insignificant event blown way out of proportion only because <em>it happened to Americans</em>&#8212;the only people who count.</p><h2>Introducing the 9/11-equivalent</h2><p>Here is a little metric I&#8217;ve been using for many years now. I call it the &#8220;9/11-equivalent&#8221;.</p><p>It&#8217;s a simple metric. One 9/11-equivalent is an event that kills the same <em>proportion</em> of a population as that of Americans killed on 9/11.</p><p>The population of the US in 2001 was 285 million people. Not counting the hijackers, 2977 people died on 9/11. Simple arithmetic tells us that this represents 2977 / 285,470,493 * 100 = ~0.001% of the population. That is <em>one thousandth of one percent.</em> Pinprick.</p><p>So let&#8217;s take a look at some of America&#8217;s victims. How about Iraq?</p><p>According to <a href="https://www.lse.ac.uk/international-development/Assets/Documents/PDFs/csrc-occasional-papers/OP1-On-the-Death-Toll-in-Iraq-since-1990.pdf">this study</a>, between 670,000 and 880,000 Iraqi <strong>children under five</strong> died unnecessarily in the twelve years from the 1991 Persian Gulf War and the sanctions regime to the second war in 2003. Note: we&#8217;re only talking Iraqi <em>children</em>. Young children.</p><p>The average population of Iraq during that time was 22 million, so one &#8220;911-equivalent&#8221; would be 22,000,000 * 0.00001 = 220 people. If we take the intermediate number of estimated excess deaths, that would be 775,000 dead. Divide by 220 to get the number of 9/11-equivalents:</p><p>775,000 / 220 = ~3573</p><p><strong>Three</strong><em><strong> thousand</strong></em><strong> five hundred and seventy-three 9/11s!</strong></p><p>There are 105,120 hours in a twelve-year period. Simple division tells us that this represents one 9/11 equivalent every 29 hours or so. Non-stop. <strong>For</strong> <strong>twelve years.</strong><em><strong> And that&#8217;s just children under five.</strong></em> Plenty of adults and older children died, too.</p><p>And those are conservative estimates. Some are several times higher. And the dying didn&#8217;t stop in 2003 with the advent of the second hot war against Iraq, <em>it got worse. </em>It is not difficult at all to come up with an equivalent of <strong>one 9/11 </strong><em><strong>per day</strong></em><strong> for more than two decades</strong>.</p><p>Now imagine that 9/11 happened again on 9/12 and again on 9/13 and again and again, every day. But now both towers are filled with <em>young (white) children.</em></p><p>Would the US have lasted even a week before some foreign country was reduced to a smoldering radioactive wasteland? Can you imagine the US enduring a 9/11 per day for twelve days, let alone twelve (or twenty) years?</p><p>Well, as I said above, Americans already do. Just not <em>al Qaeda</em> 9/11s. But medical error 9/11s, gun violence 9/11s, lack of health care 9/11s, fentanyl 9/11s (one every ten days), etc.? No problema.</p><h2>We can do raw, too</h2><p>You don&#8217;t like the idea of &#8220;equivalency&#8221;? Fine. Use the raw number: 2977. Now the Iraq numbers come out to 260 raw 9/11s, or one every 403.7 hours. That&#8217;s one every 16.8 days.</p><p>So a full-on 9/11 every bit as costly in raw numbers as the US 9/11 and ignoring the population difference every two and a half weeks for <strong>twelve years</strong> without let up. And we&#8217;re still talking <em>only</em> children under five.</p><p>And this same tale can be told all over the world. Fifteen percent (15%!) of the North Korean population died just to keep Korea from reunifying under a communist government&#8212;as if that were any business of the West. An entire nation flattened (and quite a few <em>South</em> Korean dissidents massacred as well). Biological and chemical weapons, especially napalm, widely used. Nukes threatened.</p><p>You&#8217;re either with us or we&#8217;ll kill you, I guess.</p><p>How many millions in Vietnam, Cambodia, Laos? Still dying from dioxins and land mines and who knows what else forty years on. For what? What threat were they to the American people? None at all.</p><p>George H.W. Bush ordered an invasion of Panama&#8212;population about 2.5 million&#8212;in 1989 on absurd pretenses that killed an estimated 2-3000 people, mostly civilians, according to the Central American Human Rights Commission.</p><p>A 9/11-equivalent for Panama is 25 people, so that&#8217;s what? A hundred 9/11-equivalents in just a few days?</p><p>Afghanistan, Iraq, Libya, Syria, now Ukraine and Russia. The list goes on and on and on. Suffering and death on a scale <em>unimaginable</em> to ignorant, self-satisfied, and arrogant Americans. Thousands&#8212;<em>tens of thousands</em>&#8212;of 9/11-equivalents in a never ending river of blood.</p><p>How many Venezuelan civilians have died needlessly from illegal US sanctions? The last number I heard was 40,000. How many 9/11&#8217;s is that?</p><p>I am sorry to see anyone die pointlessly, needlessly. But seriously, &#8216;merikins: <em>man up. </em>Don&#8217;t do the crime if you can&#8217;t do the time.</p><h2>But, but &#8230; the government is <em>lying</em></h2><p>OMFG. You&#8217;re killing me here. The government is <em>lying?</em> Wow. That&#8217;s never happened before.</p><p>Look, the scientists, engineers, etc. who did the studies for NIST, etc. were probably mostly apolitical, disinterested, and reasonably competent actors who did their best to get it right while under severe political pressure.</p><p>But then they had to hand their findings over to politicians. The same politicians that had fucked up so badly that America lost 2977 people and three major buildings, suffered damage to Evil Imperialist Headquarters, not to mention four expensive commercial aircraft. And Americans looked like utter, incompetent fools.</p><p>Can anyone ever really forget George W. Bush&#8217;s deer-in-the-headlights moment when he first heard of the attack? Or the whack-a-mole game he played right after that?</p><p>Clearly, some information needed to be kept secret, such as <em>how to blow up US buildings.</em> But let&#8217;s face it, lots of info was redacted just because it made someone powerful look bad. <em>That&#8217;s how power works. </em>Is anyone really unclear on this?</p><p>So the government was always going to use the studies to whitewash their own incompetence and negligence. Hey, it could have happened to anyone, right? Who knew that people could hijack planes and fly them into buildings? (Oh, yeah. Right. The US knew because it had been discussed shortly before it actually happened.)</p><p>Big side benefit: by lying and hiding things, the government amps up the crazy conspiracy theories. I am always shocked by people who ask why the government doesn&#8217;t just tell the whole truth and stop the conspiracy nuts.</p><p>Are you insane? The 9/11 Goofer conspiracy conspiracy is the best thing the US has had going since the Kennedy assassination. Millions of Americans have wasted billions of hours chasing down absurd minutiae rather than paying attention to what the government is <em>really</em> doing in their names. RIGHT NOW.</p><p>The lying fat cat criminals in power love it. Why would they kill the goose that laid the golden egg? While Americans run around frantically focusing on a pinprick that happened more than two <em>decades</em> ago&#8212;<em>before</em> the first episode of <em>American Idol</em> aired, if you can believe it&#8212;the government continues to consolidate power and steal everything it can get its hands on.</p><h2>It&#8217;s a mafia</h2><p>News flash: The US, <em>like</em> <em>every other nation on Earth</em>, is run by an organized crime syndicate. Being a powerful nation, the US government and the oligarchy they work for specialize in extortion and money laundering.</p><p>Of course, if you&#8217;re the government of a smaller nation, then you specialize in oppressing your own people and serving them up to the big bully nations. But every national government is run by organized crime. Wake up.</p><p>But while crude and evil, they are not <em>entirely</em> stupid. (Just mostly stupid, but that&#8217;s a discussion for another time.) They are, however, utterly <em>venal</em>. They do what gains them money and power regardless of the consequences to others, even their own kin. They are sociopaths, plain and simple. Or they rationalized away their evil acts long ago.</p><p>All they had to do to get a &#8220;new Pearl Harbor&#8221; was just keep offending people in other countries, keep murdering their children, keep destroying their futures, keep stealing their wealth, keep raping their women and <em>sooner or later</em> someone was going to get angry enough to strike at the US itself.</p><p>And because they knew that they were utterly incompetent and negligent at everything except corruption and crime, they also knew that any attack would likely be successful. After all, these are the guys who hadn&#8217;t won a real war since the Soviets beat the crap out of the Germans and then the Americans stole the credit. And the WTC had been bombed before, right? And the Murrah building &#8230;</p><p>Anyone paying attention knew that something big was coming.</p><p>So no need to take the risk of an enormous and complex false flag attack on US soil that might fail and screw them all. Just wait. It would come on its own.</p><p>And it did.</p><p>I doubt that any of the criminals in the government ever thought for a moment that the &#8220;terrorists&#8221; would be so successful. That must have been a shock. But it didn&#8217;t take long for them to turn it to their advantage. And the Americans bought it hook, line, and sinker, the fools.</p><p>Instead of hanging Bush and Cheney and Rumsfeld by their balls for their treasonous incompetence, in a very short period Bush&#8217;s popularity soared into the stratosphere and he became a hero even to many on the ostensible &#8220;left&#8221; (there is no <em>real</em> left in America).</p><p>No bombs, no remote control, no missiles, no other nonsense required. Just a willingness to admit that other people&#8212;not American and not even <em>white&#8212;</em>are capable of acting competently and even bravely in their own interests.</p><p>The one thing that most Westerners just can&#8217;t bring themselves to admit.</p><p>Now can we finally put this 9/11 bullshit to rest?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.cantankerouscoder.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Cantankerous Coder! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Agency? Or impotence?]]></title><description><![CDATA[William Gibson falls flat on his face]]></description><link>https://www.cantankerouscoder.com/p/agency-or-impotence</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/agency-or-impotence</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Thu, 31 Aug 2023 10:35:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NdH2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve enjoyed the books of William Gibson since <em>Neuromancer</em> was first published in 1984. I was twenty-five at the time, and the cyberpunk world depicted in the novel appealed enormously to my cynical twenty-something sensibilities.</p><p>Frankly, though, it was not particularly well-written. Even I could see that.</p><p>But what it lacked in graceful prose and plotting it more than made up for in dystopian fantasy. No one ever achieved satori (or even adulthood) by reading Gibson, but his works were great for the imagination.</p><p>Of the initial trilogy, I think I enjoyed <em>Count Zero</em> the best. It was positively haunting, and left me with a sense of melancholy and wistful sadness. I wished that I could actually <em>see</em> these beautiful and poignant collage boxes, although no doubt the reality would disappoint, and I felt for the lonely 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_!NdH2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NdH2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NdH2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NdH2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NdH2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NdH2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg" width="1456" height="2235" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2235,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1006551,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NdH2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NdH2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NdH2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NdH2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679467a4-14af-479f-874e-b6f41056d96c_1524x2339.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">So much for the acuity of &#8220;critics&#8221;</figcaption></figure></div><p>A couple years back I got around to reading the first book in Gibson&#8217;s latest trilogy, <em>The Peripheral</em>. I&#8217;d enjoyed all his previous books (I&#8217;ve read all his novels and short stories except <em>The Difference Engine</em>), and <em>The Peripheral</em> did not disappoint.</p><p>Not one of his best, but not the least best, either, and his take on a sort of &#8220;virtual&#8221; time travel (which makes it all the more believable) is brilliant. And I just really liked Flynn, and liked her even more in the TV series that came out last year.</p><p>So I was pretty primed to read <em>Agency</em>. I hoped that he would reach his stride and top its predecessor.</p><p><strong>TL;DR: It sucked.</strong> </p><h2>Is the title of <em>Agency</em> a sick joke?</h2><p>Or maybe it is meant as a parody. But I cannot remember ever reading a book &#8212; and I&#8217;ve read some very avant garde books &#8212; in which <em>less</em> happened.</p><p>The set up is great. And then you look for the next thing to happen. Something must, right? It&#8217;s a Gibson novel.</p><p>And you wait and you wait and you wait and then, suddenly, it&#8217;s over and <em>nothing at all happened.</em> Nothing! Unless you count the Steve Jobs-y product announcement that closes the book.</p><p><em>Where is this fucking agency?</em> No one in the book has any agency at all except <em>maybe</em> one character, and that character is absent for three quarters of the book!</p><h2>Here come the spoilers</h2><p>I can&#8217;t explain what&#8217;s wrong with the novel &#8212; and it&#8217;s a lot &#8212; without essentially revealing the entire plot. So if you have any intention of reading <em>Agency</em> and want to preserve the suspense, stop reading here, go read the novel, then come back.</p><p>Note: By &#8220;suspense&#8221; I mean a virtual lack of suspense. The only suspense in <em>Agency</em> comes from wondering <em>when the fuck will something happen here?</em> Then the ending comes rushing up and, hey! It&#8217;s an intellectual coitus interruptus. </p><h2>The setup</h2><p>The initial setting is a largely depopulated London, circa 2136, after a series of apocalyptic crises have killed most life on Earth in something called the &#8220;Jackpot&#8221;.</p><p>The future Londoners, who never go seem to go anywhere (although Canada is mentioned), have gotten access to a device assumed to be a quantum computer and controlled, they suspect, by the Chinese because &#8230; well, I promised myself that I&#8217;d try to avoid getting into the ugly politics of the novel &#8212; and they are ugly as sin &#8212; but essentially because <em>if we don&#8217;t know who did something, then</em> <em>it must be those damn Chinese, right?</em></p><p>So inscrutable!</p><p>Point is, these future folks didn&#8217;t invent this device, don&#8217;t know where it came from, and don&#8217;t know how it works. But with it, they can travel back in time, but only <em>virtually </em>(no physical transfer of matter) and only a certain distance back because it depends also on the technology of the era to which they are &#8220;traveling&#8221;.</p><p>Conveniently, about the furthest back they can go is roughly <em>now. </em>What a coincidence!</p><p>Once they&#8217;ve made contact with this previous era, that era&#8217;s future veers away from the future of the original timeline.</p><p>As a consequence, a new timeline <em>branch</em> is created, and while the future era and the new branch share an identical past <em>up until the point of contact</em>, the future of the branch &#8212; called a &#8220;stub&#8221; by the Londoners &#8212; is its own. The two timelines now diverge in lockstep.</p><p>Of course, the deviation is gradual and many aspects of their individual futures  remain similar or even identical. The trunk and the branch travel forward in time in synchrony &#8212; a year in the &#8220;stub&#8221; is a year in the trunk (future). And there is no going back again: doing so simply creates yet another stub. Damn.</p><p>The trunk and the branch from which it sprouted cannot trade material, but they can trade data. And it is possible to transfer sensory data, too, thus the &#8220;peripherals&#8221;. Peripherals are humanoid (usually) &#8220;bots&#8221; in the future into which the folks in the stub can temporarily transfer their conscious awareness. Their real bodies remain in their stub.</p><p>Once in the peripheral, they can experience the future exactly as if they were there physically &#8211; but as robots (or maybe androids as the peripherals are usually biological). They see, hear, smell, taste, and feel everything (including pain), and they can walk, run, jump, and, of course, fight and fuck. Dreamy, eh?</p><p>Both <em>The Peripheral</em> and <em>Agency</em> involve the creation of stubs: the former in our current near future, and the latter in our very recent past. And both describe a struggle between various actors in the distant future to manipulate and exploit the stubs for their own benefit or pleasure or to prevent such manipulation.</p><h2><em>Agency</em></h2><p>The stub in <em>Agency</em> branches off in 2015, but by the time the novel begins it is 2017. Already there have been two notable deviations from the original timeline (ours) &#8211; the classic &#8220;alternate future&#8221; trope &#8211; and these reveal the political biases of the author, even as he goes out of his way to avoid ever explicitly stating them.</p><p>The two deviations are:</p><ol><li><p>Hillary Clinton won the 2016 presidential election (although he never mentions her &#8212; or Trump &#8211;  by name, it is obvious to whom he refers).</p></li><li><p>The &#8220;remainers&#8221; won the Brexit vote.</p></li></ol><p>I can only imagine that the Trump presidency scared the bejesus out of Gibson, and maybe Brexit did, too. I guess he believed all the hype.</p><p>I remember reading that Gibson threw out the original, nearly completed plot for <em>Agency</em> after Clinton lost the election. The current sludge is the sad result. While Gibson tries to be circumspect, the black-and-white nature of his political views is evident: Clinton is saintly, Trump is pure evil. No actual evidence necessary.</p><p>At one point in her ceaseless meandering, Verity passes a mural in an alley that stinks of piss:</p><blockquote><p>And here it was, Verity assumed, midway between Valencia and Mission, on a prime two-story stretch of smooth brick: a celebration of the president&#8217;s bravery during the campaign, rendered in shiny black and white, like a giant Victorian steel engraving executed by OCD fairies. The president stood smiling, her arms outstretched to America. Her opponent loomed behind her, as he once actually had, Verity herself having watched this debate live. Seeing this now, she recalled her own sickened disbelief at his body language, the shadowing, his deliberate violation of his opponent&#8217;s personal space. &#8220;I don&#8217;t think anyone I know believes there was ever any real chance of him winning,&#8221; she said to Eunice. &#8220;I don&#8217;t know whether I did myself, but I was still scared shitless of it.&#8221; She was looking at how the artist had rendered his hands. Grabby.&#8221;</p></blockquote><p>Did you get that? Grabby. Boy, that sure is original! And sweet smiling Hillary, arms outstretched to hug the whole world. Not a ruthless political operator every bit as much as Trump (more experienced, really). No, a saint, and Trump a devil.</p><p>News flash, Bill: they are <em>both</em> utterly evil, corrupt politicians. Put the Kool-Aid down and back away from the table.</p><p>This is the first novel (if I remember correctly) <em>not</em> set in the future, but in the sort-of present. So it is the first opportunity for Gibson to weigh in on contemporary society and politics.</p><p>Well, shit. Turns out Gibson is a political infant. He should stick to sci-fi fantasies.</p><p>Nothing to see here. Move along &#8230;</p><h2>And it&#8217;s the wrong politics!</h2><p>The worst of it is that not only does Gibson decide to weigh in on political issues, if only obliquely, but also <em>it&#8217;s the wrong politics.</em></p><p>Like most of his readers, Gibson has bought the Western propaganda line entirely and believes that the enemy is <em>over there</em>. It&#8217;s the West against the Axis of Evil! This is the big lie of modern times. Maybe of all times.</p><p>And the domestic enemy is the other party, which is undoubtedly in league with the Axis of Evil, right? It&#8217;s all so simple &#8230; and Orwellian. Where&#8217;s the two minute hate?</p><p>But in real life, the true enemy is the hoarding, wasting, narcissistic, megalomaniacal parasite class of kleptocrats, plutocrats, and oligarchs: the &#8220;superrich&#8221; and their celebrity/political minions, the <em>compradors</em>. And, of course, their propagandists and apologists posing as &#8220;journalists&#8221;.</p><p>It&#8217;s not the Russians who endanger the West. It is the unending, accelerating concentration of resources into fewer and fewer hands and the utter despoliation of the ecosphere steadily killing all life on Earth. These maniacs are driving the West into confrontation with the Russians and the Chinese &#8211; both nuclear superpowers &#8211; because of their insatiable greed and bloodlust.</p><p>It&#8217;s about money and power, of course, not saving the world.</p><p>And it&#8217;s not like those resources are &#8220;trickling down&#8221;. Oh, please! Jeff Bezos <em>primary</em> yacht (he has more than one, of course) is 127 meters long. If you stood it on end it would be a nearly 40-story skyscraper. And its <em>only</em> function is to waste resources and energy while providing obscenely sybaritic luxury to a tiny group of self-obsessed, parasitical pigs.</p><p>Apologies to <em>Sus domesticus</em>.</p><p>Naturally, in Gibson&#8217;s hands the parasite class are our saviors.</p><h2>Elon Musk is not your friend</h2><p>But you&#8217;d never guess that from reading <em>Agency.</em></p><p>The main character is Verity Jane and she&#8217;s known as the &#8220;app-whisperer&#8221;. What this could possibly mean, of course, is never explained &#8211; Gibson explain things? Get real! But more importantly, <em>she never uses this presumptive skill in the story. </em>Not once.</p><p>So what&#8217;s the point? It&#8217;s just a clever label applied to make her seem cool.</p><p>And what is Verity&#8217;s biggest claim to fame? Only that she is the ex-girlfriend of tech boy billionaire, Stetson Howell. Ah! <em>Grimes &#8230;</em></p><p>Verity is hired by a shady outfit (of course) to test a new app which the outfit stole from the CIA and which turns out to be an AI. Verity figures this out almost instantly.</p><p>So much for the Turing Test, eh?</p><p>And what does Verity do once she learns that &#8220;Eunice&#8221; (UNISS) is an AI? Well, she becomes entirely dependent upon &#8220;her&#8221;. Yes, the book actually makes a point of insisting that Eunice is a &#8220;her&#8221; not an &#8220;it&#8221; as apparently AIs have the same genders as humans. Who knew?</p><p>Eunice, of course, is too cool for school. Here she asks Verity about motorcycles:</p><blockquote><p>&#8220;Ever ridden bitch on a big bike?&#8221;</p><p>&#8220;What&#8217;s it got to do with rice cookers?&#8221;</p><p>&#8220;Nothing. On the back, getting boob-jammed if your biker brakes too hard?&#8221;</p><p>&#8220;More than once. Why?&#8221;</p></blockquote><p>An AI that swears. Who could resist?</p><p>Naturally, Verity immediately agrees to obey blindly Eunice&#8217;s every command. Wouldn&#8217;t you?</p><p>Well, yes, yes, apparently. Because in <em>Agency</em> that is what <em>everyone</em> does, without exception. Every single human being contacted by the AI agrees immediately and without reservation to do her bidding <em>and does so</em> even at risk of their own lives.</p><p>Theirs not to make reply, theirs not to reason why, theirs but to do and die. I guess none of them had read Tennyson.</p><p>If Gibson were honest, he&#8217;d have titled his book, <em>Obedience.</em></p><p>I&#8217;d say that you really can&#8217;t make this shit up, but evidently Gibson can.</p><p>And what does Verity need to do? What is it that explains her role as the <em>protagonist</em> of the novel? Um, essentially, she must <em>avoid being killed</em>. That&#8217;s it.</p><p>To this end she spends the entire novel &#8211; and no I&#8217;m not joking &#8211; merely being shuffled from one box to another: from flat to caf&#233; to office to container to, um, barn? Her one task is to narrate this tedious chase while Eunice <strong>entirely off stage</strong> rebuilds herself, and then to bear witness to Eunice&#8217;s &#8220;coming out&#8221; announcement.</p><p>The end.</p><h2>Waiting for Flynn</h2><p>Flynn, the hero of the previous novel, <em>The Peripheral</em>, is mentioned several times but never appears. Too busy being a new mommy, it seems.</p><p>And who does appear? Conner, of course. He&#8217;s the formerly-crippled psychopathic killer who can barely wait to kill more people. And he never loses!</p><p>Now he heads the US Secret Service in his own stub because &#8230; well, because why not? Why not put a psychologically-disturbed, alcoholic, psychopathic mass murderer in charge of protecting the president? What could go wrong?</p><p>Of course, his ability to kill without compunction and to <em>enjoy it </em>is his super power and we&#8217;re supposed to be impressed by it. He&#8217;s a hero, after all. (Yes, there are some serious problems with all of Gibson&#8217;s novels when we consider the morality of his &#8220;heroes&#8221;.)</p><p>Conner travels (sensorially) across stubs to help out in the new stub by protecting Verity &#8211; whose actual value to the plot as we&#8217;ve seen is, hmm, exactly zero. To this end, he kills or wounds a couple dozen people using drones controlled by another drone into which he has transferred himself.</p><p>It&#8217;s never explained, of course, how he projects himself into another <em>stub. </em>I guess it is convenient to the &#8220;plot&#8221;, so he just does it.</p><p>The drone into which he transports himself gets a better description than anything else in the book, which is revealing of Gibson&#8217;s real concerns. In truth, the book appears to exist primarily as a paean to AI and a catalogue of future tech fetishes.</p><p>Just another tech boy masturbation fantasy.</p><p>And, of course, nearly all of this action happens <strong>off stage</strong><em>.</em> Conner shows up, Verity looks away, looks back and oh! A pile of bodies! How did that happen? Heck, it saves the trouble of writing any actual action scenes.</p><p>And &#8230; Lowbeer executes the evil Klept who created the stub. <strong>Off stage</strong>. Then she eliminates another Klept who threatens to remove her. <strong>Off stage</strong>. Eunice&#8217;s bots round up human helpers &#8211; all of whom are told to trust and obey her because <em>they are part of the &#8220;elect&#8221;</em> <em>obviously</em> &#8211; duh! &#8211; and who therefore do so without hesitation or reservation. Not once. And all of it &#8230; <strong>off stage</strong>.</p><p>These human helpers come and go and have &#8220;clever names&#8221; (e.g., Grim Tim), but it&#8217;s never clear <em>what</em> they are doing besides making deliveries and ferrying Verity around. They are essentially furniture.</p><p>Oh, and Hillary Clinton finally does save the world from the threat of nuclear annihilation (created by the careless shoot down of two <em>Russian</em> jets over Syria under her watch). Can you guess where this happens? If you guessed &#8220;<strong>off stage</strong>&#8221;, then you&#8217;re starting to catch on.</p><p>The entire &#8220;pending nuclear war&#8221; is essentially a MacGuffin. No explanation is given for why it is likely (Russians = evil, I guess) or why the US can&#8217;t just say &#8220;sorry&#8221; and offer compensation to the victims&#8217; families. I guess its sole purpose is to &#8220;explain&#8221; why everyone just does what Eunice demands.</p><p>The badass mommy AI is gonna save us all! Hooray for the <em>tech ex machina!</em> </p><h2>Cutting to the chase &#8230; literally</h2><p>So what actually happens in <em>Agency?</em> Well, nothing, really. Eunice disappears and is presumed dead early in the novel, and only reappears very near the end.</p><p>Yes, you read that right. The <strong>main character</strong> and the only one that appears to have any real &#8220;agency&#8221; is <em>missing in action for more than half of the book.</em></p><p>When Eunice <em>is</em> around she mostly chats with Verity in American slang because, you know, she&#8217;s totally cool and really more human than human. Kinda Black, actually &#8211; do AIs have skin color? &#8211; and sexy and <em>not someone to fuck with</em>.</p><p>But she never explains what she&#8217;s doing or why. It&#8217;s mostly just girl talk and girl bonding. I guess if you&#8217;re into that &#8230; but why make a sci-fi novel for that?</p><p>Between Eunice&#8217;s death and her resurrection &#8211; let&#8217;s not miss the symbolism of <em>that</em> &#8211; what does Verity do? Nothing, of course. She hides here, she hides there. She travels by motorcycle, by car, by van &#8211; always as a passive passenger &#8211; and by foot. She receives and sends text messages and phone calls. She is nearly killed more than once, but the threat is removed each time &#8211; off stage. She never actually <em>does</em> anything to move the plot forward.</p><p>If you&#8217;re looking for a primer on modern modes of transport, well, it&#8217;s so-so. But I did learn about &#8220;boob jamming&#8221;. That was a new one.</p><p>Note: throughout, I use the word &#8220;plot&#8221; very loosely.</p><p>Verity is the epitome of the hapless, helpless female. She exists solely to observe and report the coming out of the first fully sentient and autonomous distributed AI. And that might have made a decent (very) short story. But not a novel of <em>four hundred</em> pages.</p><p>At least in <em>Waiting for Godot</em> there is a fascinating and profound conversation along with an ambiguous symbolism that encourages wild speculation as to meaning.</p><p>In comparison, <em>Agency</em> is positively vacuous, reflecting, I suspect, the vacuity of Gibson&#8217;s world view. Beyond the Christ-as-AI and some rude stereotyping of Donald Trump, there is no symbolism in the book. No profound thoughts, either.</p><p>Gibson clearly is what was once called an idiot-savant. In the realm of technological imagination he has few peers. But step just a few centimeters outside that narrow aptitude and he is revealed to be an intellectual idiot.</p><p>None of his political feints, for example, is beyond the ken of a nine-year-old. It&#8217;s politics on the level of finger painting, if that. Grabby? Really?</p><p>And these puerile politics are the raison d&#8217;&#234;tre of the novel! They drive the entire &#8220;plot&#8221;, despite that plot consisting mostly of kicking a can down a road again and again and again.</p><p>The humans in the stub feel helpless in the face of a coming nuclear war and the humans in the future are equally concerned. What can be done? Only Eunice can save them!</p><p>But then it turns out that <em>Hillary</em> saved them &#8211; surprise! &#8211; with virtually no help from Eunice. It&#8217;s about as believable as Elon Musk giving away his entire fortune to spend the rest of his life as a Whirling Dervish. Enlightenment through vertigo.</p><p>And wait &#8230; what was the point again? That not even Eunice has any real agency, <em>but Hillary Clinton does? </em>I&#8217;m so confused &#8230;<em> </em>is this some kind of sick joke? Wait &#8230; am I on hidden camera?</p><p>Even the future peeps have no real agency. They rush to help in the new stub, but so what? Eunice rebuilds herself without their help and everyone else exists only to bear witness. A god is born!</p><p>And, as I said above, the nuclear threat is resolved (temporarily) <strong>off stage</strong> and with no one&#8217;s help.</p><p>What exactly do the future folks do? Well, there is a lame subplot about a threat to Lowbeer&#8217;s life, but that&#8217;s all dealt with &#8230; wait for it &#8230; <strong>off stage</strong><em>.</em> Wilf Netherton returns now married with a young son, to be rushed to the new stub where he &#8230; does nothing.</p><p>His wife gets involved, too. Someone has to remind Wilf not to be a dick! (He&#8217;ll try, he replies.) And she befriends Verity who is clearly bored shitless as her role is to be helpless. Then Wilf&#8217;s wife blurts out the sad truth that the Jackpot is coming!</p><p>OH, NOES!</p><p>There&#8217;s a big kerfuffle then because <strong>the first rule of stubs is you don&#8217;t talk about the Jackpot</strong>. Because, it seems, no one living at the turn of the millennium ever thought for a nanosecond that something really <em>bad</em> might be coming, despite thousands of nuclear weapons in the hands of infants, giant islands of plastic in the oceans (and our bodies), looming climate catastrophe, dying reefs, empty fisheries, the loss of more than half of all animal life, mass extinctions of species, tainted and disappearing water tables, massive pandemics, bioweapons labs run by idiots, etc., etc., etc.</p><p>What? Those things are <em>dangerous?</em> You&#8217;re kidding.</p><p>But don&#8217;t worry. Conner makes it all better by explaining the Jackpot to Verity.</p><p><strong>Off stage</strong>.</p><p>Frankly, the &#8220;Jackpot&#8221; is a ray of hope. <em>Someone</em> <em>survives!</em> Woo hoo! That might be the most absurd hopium in the book. If someone from the future showed up and told me about the Jackpot, then the first thing I&#8217;d blurt out is, &#8220;holy fuck! We <em>survived?</em>&#8221;</p><h2>Humans just can&#8217;t learn from their mistakes</h2><p>The real ugliness of Gibson&#8217;s novel &#8211; and it threads itself through many of his novels now that I think of it &#8211; is his incredibly dystopian and cynical world view. It&#8217;s one thing to say that we&#8217;re acting foolishly and we need to grow up. It&#8217;s another entirely to suggest that we can&#8217;t and that the solution is to remain children forever and to surrender our <em>agency</em> to an AI (or a woman president, or Russian kleptocrats).</p><p>I&#8217;m not talking about the problems he points out. Those are real. I&#8217;m talking about the ugly &#8220;solutions&#8221; he seems to recommend. Embracing his inner autocrat, I guess.</p><p>His future London has survived the &#8220;Jackpot&#8221; somehow, but has it really? The Earth is 80% depopulated (not necessarily a bad thing), but humans have learned essentially <em>nothing</em>.</p><p>Society is run by the Klepts: old Russian mafia families. Oh, look. It&#8217;s the Russians again. Do they ever do anything honest or benevolent? Guess not.</p><p>Turns out that <strong>organized crime</strong> is the best way to run a society! Who knew? Funny then how our <em>current</em> society is run by organized crime families pretending to be legit pillars of society, but that hasn&#8217;t proved to be particularly healthy for life on Earth.</p><p>I guess future crime families are smarter. Or maybe more moral? Hmm.</p><p>But worry not because those nasty Rooskies are prevented from getting too far out of line by Lowbeer, a <em>single</em> individual transgendered female cop more than 130 years old who knows everything about everybody (thanks to tame AIs called, insidiously, the &#8220;aunties&#8221;) and who can act with <strong>utter impunity</strong>. Because that always works out so well.</p><p>Everyone is terrified of Lowbeer &#8211; and with good reason &#8211; but we&#8217;re to believe that decades of absolute power has not corrupted her in the least &#8211; just the opposite &#8211; and that she acts selflessly with the best interests of all of humanity at heart. In short, if she disappears you, then you must have deserved it.</p><p>Kleptocracy, plutocracy, authoritarianism, totalitarianism, forever capitalism, consumerism, and rampant technophilia are all we have to look forward to.</p><p>There is so much more to dislike about this novel, but I&#8217;ll stop there. No need to pile it on. Let&#8217;s hope Gibson recovers his sanity and returns to form in the final installment of his trilogy. But I&#8217;m not going to hold my breath.</p>]]></content:encoded></item><item><title><![CDATA[Apologies]]></title><description><![CDATA[I've been very busy]]></description><link>https://www.cantankerouscoder.com/p/apologies</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/apologies</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Mon, 28 Aug 2023 01:32:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZkeI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It has been a few months since I last posted here, and not for lack of wanting to or potential topics.</p><p>But I want to move CC off of Substack and onto my own site running on Vercel. I&#8217;m also heavily involved in several other projects:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.cantankerouscoder.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Cantankerous Coder! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><ul><li><p>A site promoting &#8220;craft coding&#8221; as a response to all the hype around AI</p></li><li><p>A site teaching web development from scratch using the craft code approach</p></li><li><p>A site explaining the methodology for teaching/learning used (I have my own detailed methodology)</p></li><li><p>A personal philosophical site composed as a love letter to my partner, Hannah</p></li></ul><p>That&#8217;s a lot of work to hand code! I&#8217;m keeping the sites fairly similar, but still &#8230; too much duplication. And, um, I am doing this as a solo coder, with only a bit of advice from a couple of designers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZkeI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZkeI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZkeI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZkeI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZkeI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZkeI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:328362,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZkeI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZkeI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZkeI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZkeI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8781e8c-2bc9-4b7b-90aa-ce393657784f_1600x1200.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Busy building things &#8230;</figcaption></figure></div><p>So the obvious solution was to build a component library. One of my goals with this code is no client-side dependencies other than my own code. And the most efficient component library would obviously be one that met my needs exactly.</p><p>I also wanted the component library to make it easy to add metadata/microdata using either linked data or item-props or whatever. And I wanted the components to be 100% accessible, i.e., AAA on WCAG 2.2. Oh, and I wanted everything to work as plain HTML, with or without the CSS or JavaScript (but then to be progressively enhanced as CSS and JavaScript became available).</p><p>Heh, heh. This is a massive undertaking. And I have to do all the design, UX, etc. work as well. I&#8217;m keeping it simple, as one of my rules is &#8220;keep it simple&#8221; and one of my axioms is &#8220;less is more&#8221;. But even kept very simple, it is still gargantuan. Fortunately, I am able to leverage some work I did for pay over the past few years.</p><p>The component library is very nearly ready. I have some CSS tweaks and a few JS scripts to add. And there is a very powerful JS validation engine that needs a bit of a refactor, but isn&#8217;t really necessary yet.</p><p>I plan to debut the new Cantankerous Coder site roughly simultaneously with the Craft Code site, and then spend the rest of the year working on the training and pedagogy sites. The philisophical site will come along as time permits.</p><p>I will post here when the new Cantankerous Coder site is available and will send an email with a subscribe link to all current subscribers on this list when the time comes. The domain will be moved to the new site. The Substack version will eventually be retired.</p><p>If you&#8217;re still out there you hardy few, thanks much for your patience. I will try to make posts weekly or fortnightly until the new sites are up and then more often still. I&#8217;ve got plenty of cantankering built up.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.cantankerouscoder.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Cantankerous Coder! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Bye, teams!]]></title><description><![CDATA[Great BAs make teams unnecessary. No, really.]]></description><link>https://www.cantankerouscoder.com/p/bye-teams</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/bye-teams</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Wed, 17 May 2023 10:47:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oeqs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My partner is an Agile software business analyst. Until I met her, if you'd asked me, I would have told you that in my experience BAs were blockers, not helpers. The BAs with whom I worked <em>at best</em> stayed mostly out of the way; at worst, they actively made my job as a dev more difficult with absurd metrics and processes.</p><p>T-shirt sizing? Really? I&#8217;m surprised that it&#8217;s not <em>wet</em> t-shirt sizing.</p><p>But my partner changed all that. Watching her work was a revelation. Not only was she not getting in the way, but she was <strong>making things hum</strong>. I had to eat a bit of crow. Luckily, it wasn't as nasty as I've been told. Tasted like chicken.</p><p>She has been sharing her knowledge, skills, and ideas via her consulting web site, <a href="https://jimmyco.io/">jimmyco.io</a> as well. She publishes articles monthly, and, as I am her editor and proofreader (and occasionally her muse), I get to read them&#8212;typically several times and at different stages, so I get to see her ideas emerge and evolve.</p><p><a href="https://jimmyco.io/jimmy-thinks">Two articles that she published recently</a> really got me thinking. The first was about how <a href="https://jimmyco.io/jimmy-thinks/ba-as-team-infrastructure/">BAs function as a sort of </a><strong><a href="https://jimmyco.io/jimmy-thinks/ba-as-team-infrastructure/">team infrastructure</a></strong>. She makes the analogy to network infrastructure, with BAs acting as cache, router, and logger while providing filtering, queueing, ordering, sorting, mapping, parsing, conversion, etc.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oeqs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oeqs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oeqs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oeqs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oeqs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oeqs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.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;:3459939,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oeqs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oeqs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oeqs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oeqs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99a0fcfd-410a-4e41-81a0-94e472548fc0_6000x4000.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Infrastructure FTW.</figcaption></figure></div><p>You get the picture.</p><p>I should repeat here that Hannah is an &#8220;<strong>Agile Software BA</strong>&#8220;. There are many different types of BAs&#8212;a big problem with the role IMO as it is too loosely defined. Maybe split it up and name the parts better? "<strong>BA as team infrastructure</strong>" applies to the Agile BA. For the rest, YMMV.</p><p>What struck me about this is that I had always focused on the <strong>analysis</strong> part of BA work: breaking things down into small parts and working with each in isolation. What I had never considered was that there was a complementary function that BAs perform: <strong>synthesis</strong>.</p><p>How Hegelian! Who knew?</p><p>Then her next article began to experiment with <strong><a href="https://jimmyco.io/jimmy-thinks/systems-thinking-rabbit-hole/">systems thinking and the use of Current and Future Reality Trees</a></strong> for BA work. And as I was proofreading, I was thinking, "How many times have I told her not to split infinitives?" Ha, ha. Joking.  What I was actually thinking was, "<strong>This is fucking brilliant</strong>". But don&#8217;t tell her I said that.</p><h2>Management FTL</h2><p>I have written more than once about what a <strong>bad idea</strong> software teams are for business. In the process, I have probably antagonized almost everyone I know in the industry, but, hey! <strong>A boy should do what he does best, no?</strong></p><p>It may be possible to create a worthwhile team, but why bother? What does it get you that you cannot get without it? It is an obvious failure to follow Occam's Razor: <strong>do not needlessly multiply entities</strong>. Or, as Mies van der Rohe counseled us: <strong>less is more</strong>.</p><p>Why are these simple concepts so difficult for humans to grok and apply?</p><p>What happens more often than not with teams is that they are chosen virtually arbitrarily (read: <strong>utterly capriciously</strong>). No one seems to know what the point is. It is simply assumed that we <em>must have teams</em>.</p><p>Sometimes they are organized by product, or by feature, or by project. Sometimes they are organized by service. But I remain unconvinced that these contexts are reason enough to force people to work together.</p><p>And there is an enormous amount of nonsense out there about "high performing teams" and how teams make everything better. I have worked on many teams and <em>with</em> many more, and <strong>I have yet to see a single &#8220;high performing&#8221; team</strong>. Maybe what they mean is "not totally worthless". I might have seen one of those.</p><p>It is all utter bullshit. Sorry to point out that <strong>the emperor is naked</strong>, but, well, his junk is hanging out. Look for yourself. It ain't pretty.</p><p>Besides, pointing out hypocrisy and stupidity is what I do best.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dqr8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dqr8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Dqr8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Dqr8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Dqr8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dqr8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.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;:3426535,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Dqr8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Dqr8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Dqr8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Dqr8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d2c1ed0-f702-4b68-b7f5-e402d90d60c4_6000x4000.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A high-performing team at work.</figcaption></figure></div><h2>The case of the vanishing adult</h2><p>The real reason businesses create software development teams is to <strong>manage the immaturity of their workers</strong>&#8212;immaturity that they <em>nurture and perpetuate</em> because mature workers might wake up and figure out how badly they are getting fucked by management and the company.</p><p>Then they might quit, start their own companies, organize unions, demand benefits and better wages (or control of the company), or&#8212;shudder&#8212;worse. <em>Can't have that</em>.</p><h2>It's about the reports</h2><p>Teams exist to group workers into a manageable number of "<strong>reports</strong>". Kind of a giveaway, isn't it? It&#8217;s not about getting work done or &#8220;delivering value to the customer&#8221; (ROTFL). It&#8217;s about <strong>reporting</strong> up the chain of demand.</p><p>Then we add layers of useless "management" in a pyramid shape to <strong>keep an eye on those troublesome toddlers</strong>. And toddlers to watch the toddlers. Hell, it&#8217;s toddlers all the way down!</p><p>Hmm. As ye seek, so shall ye find.</p><p>Seriously: no way that smart, mature adult devs, testers, designers, etc. could work together like, well, <em>adults</em> to accomplish their goals, right? We must shove managers down their throats to get in the way of everything and impose arbitrary and capricious constraints&#8212;as is their wont.</p><p>Teams actually help to <strong>justify</strong> managers because they are virtually always organized with no thought whatsoever to <strong>whether these particular humans will work well together</strong>. Or whether they have <strong>the right mix of skills</strong> needed for the job. And often, whether <strong>they have anything whatsoever to do with the product</strong>.</p><p>I have repeatedly worked on greenfield projects where I was the sole dev, only to be stuck in a convenient "team" <em>so they could keep an eye on me</em>. As if my product and productivity weren't readily evident.</p><p>I had to be on <em>some</em> team, right? The alternative was unthinkable. Rogue dev!</p><p>It pissed me off, and it antagonized my &#8220;teammates&#8221; as well. What a waste of time and effort! How remarkably <strong>disrespectful</strong> <em>to the very people the company depended on for its success.</em></p><p>That meant insanely stupid and wasteful stand ups, retros, refining sessions, code reviews, and more where they didn't know what I was doing and <em>did not give a flying fuck</em>&#8212;and who can blame them? And I felt the same way about what they were doing.</p><p>The standup, rather than being a quick ad hoc gathering of only those currently working on a specific goal to check coordination becomes an inspection where the boss checks to see that you are working hard enough.</p><p>Kind of like how you have to drive across town, destroying the environment, to sit in an ugly office under fluorescent lights in plastic boxes just so your boss can walk by and see that you are slaving away. And they use the same &#8220;collaboration&#8221; lie to justify it. How insulting.</p><h2>First, we kill all the managers ...</h2><p>Sorry, managers, but I've met maybe two in my entire, <em>decades-long</em> career who I thought were worth a shit. And we could have made do without those two as well, much as I liked them.</p><p>There is certainly a skill to managing. And a very different skill to leading. But I have never understood why &#8220;managing&#8221; implied a hierarchy with the manager &#8220;above&#8221; those &#8220;managed&#8221;. I need testers and designers and more to do my job. That doesn&#8217;t mean that I&#8217;m above or below them.</p><p>Oh, but it&#8217;s about <em>bossing</em>, right? But why does anyone need to be bossed? Aren&#8217;t we all on the same side? If one of us is not pulling their weight, then the group as a whole can straighten their ass out. It is quite effective.</p><p>But being immature infants, most members of the team can't figure out how to play well together, so the BA comes in&#8212;if the BA is worth a damn&#8212;and makes it all run. <a href="https://jimmyco.io/jimmy-thinks/ba-as-team-infrastructure/">See Hannah's article for the details of how</a>.</p><p>But as I read her <em>next</em> article about CRTs and FRTs and applying <em>systems</em> <em>thinking</em> to BA work, I realized that <strong>this is the answer</strong>!</p><p><strong>Fuck teams!</strong> All we need is reasonably mature workers <em>and smart BAs</em> to make the group work together as a whole, like a crew team racing in perfect synchronization. And the BAs aren&#8217;t <em>above</em> the other workers. If anything, they are <em>below</em>, providing a foundation&#8212;that infrastructure&#8212;on which everything else depends.</p><p>Think about it. Mature adult devs can collaborate and coordinate without help. Then the BA works to <em>facilitate </em>(not control) those efforts. Everything runs smoothly, and we can finally defenestrate the &#8220;managers&#8221;.</p><p>The BA should, as Hannah does, see their role as a <em>service</em> role, not a management role: provide the grease that makes the machinery sing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fuen!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fuen!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Fuen!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Fuen!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Fuen!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fuen!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.jpeg" width="1456" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:564033,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fuen!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Fuen!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Fuen!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Fuen!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F286a963b-b984-41cc-a5f1-2ccf54a8d271_1600x722.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">When this works, it is incredible.</figcaption></figure></div><p>Again, think about it. Does the BA, in making &#8220;her&#8221; team hum, work only with the members of <em>that</em> team? NO. She is interacting with all sorts of teams.</p><p><strong>So  then what is the point of these team boundaries so arbitrarily drawn?</strong> Other then to impose managers (product owners, what have you) on workers, what use do they serve?</p><p>We can assign work to individuals without regard for an arbitrary team. We can provide the infrastructure for those individuals to collaborate on a just-in-time ad hoc basis company wide.</p><p>The BA doesn't really give a damn who is on what team&#8212;she works with designers, scrum masters, other BAs, product owners, legal, and even upper management. She connects it all together and <strong>makes the flow </strong><em><strong>flow</strong></em>. She simply <strong>gets shit done</strong>.</p><p>Thus the true and <strong>only</strong> reason for teams is <em>control by management.</em> Just admit it.</p><h2>It's the synergy, stupid</h2><p><strong>Current and Future Reality Trees</strong>, systems thinking, BA as "infrastructure"&#8212;these are all just ways to work <em>holistically</em>. The BA is the supreme generalist-polymath-intelligencer-<strong>roadway</strong> that makes the whole thing work.</p><p>Not to say that you can't make it work <em>without</em> a BA, but then only if those duties have been distributed to others in the workforce. Better to collect them in one or more <strong>nodes </strong>(central locations)&#8212;the BAs&#8212;so they are more visible, comprehensible, tweakable.</p><p>And if we do away with pointless "teams", then we also do away with the stupid limitation of each BA to a <em>specific</em> team and we can set them loose to focus on specific <strong>outcomes</strong> without regard for arbitrary boundaries. This is what they do best.</p><p>I had a conversation a few years back with a very bright CEO who was reorganizing his business around "<strong>self-organizing teams</strong>". It was interesting and pretty revolutionary, but, I suspect, bound to fail because <strong>the point of a team is to be surveilled and controlled by a manager</strong>, not to be self-organizing or self-managing.</p><p>If you're going to be self-organizing, then why do you need teams at all? Let people <strong>self-organize on an ad hoc basis</strong>, with members of the <em>ad hoc</em> <em>group</em> coming and going as their talents are needed.</p><p>And use smart, capable BAs to provide the "<strong>infrastructure</strong>" that makes the whole thing flow smoothly. They keep that <a href="https://en.wikipedia.org/wiki/Reynolds_number">Reynolds number</a> low.</p>]]></content:encoded></item><item><title><![CDATA[Life in our tech dystopia]]></title><description><![CDATA[Isn't 6000+ years of this shit enough?]]></description><link>https://www.cantankerouscoder.com/p/life-in-our-tech-dystopia</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/life-in-our-tech-dystopia</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Sun, 07 May 2023 00:31:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qj-T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You might have noticed if you&#8217;ve read a few of my polemics here that I tend to take a <strong>rather dark view of humanity</strong> and our society.</p><p>As you might imagine, I get a lot of shit for that. People think I&#8217;ve got it all wrong. &#8220;There is a lot of good in the world,&#8221; they say.</p><p>Well, duh. Of course there is. How else would we be able to recognize the bad?</p><p>But seriously, my life is pretty sweet. I&#8217;ve got plenty of health issues, but those are a consequence of potentially stupid decisions on my part in my youth. I say potentially because I did have a shit ton of good times, so maybe it was worth it. Everyone dies eventually, right?</p><p>Beyond those somatic annoyances, however, I am living the good life, or what&#8217;s left of it as I can&#8217;t eat my favorite dishes anymore, can&#8217;t hear for shit, and can&#8217;t do other things I&#8217;ll leave unspecified here, but which I used to enjoy greatly.</p><p>I guess I reached my quotas a bit early. I always was a go-getter.</p><h2>The Golden Billion</h2><p>But I am one of the &#8220;<strong>Golden Billion</strong>&#8221;: that 13% of the world&#8217;s population that lives in the West (or in my case somewhere near the South Pole). I&#8217;m an educated, experienced, and widely (if not wildly) talented individual who has always been able (well, until recently) to acquire and hold decent (a relative term) jobs.</p><p>I have traveled and lived all over the world leaving a trail of greenhouse gases. Just follow the carbon dioxide.</p><p>At times I&#8217;ve made more money than I knew what to do with (bearing in mind that my needs are modest). And while I have been homeless once or twice, couch surfing or living out of my car, it was my own doing, and I always had friends and family to fall back on if things got really desperate.</p><p>In short, I am one of the very lucky few.</p><p><strong>And so are the people who keep telling me that the world is really a &#8220;good&#8221; place.</strong> The fuck do they 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_!qj-T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qj-T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png 424w, https://substackcdn.com/image/fetch/$s_!qj-T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png 848w, https://substackcdn.com/image/fetch/$s_!qj-T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png 1272w, https://substackcdn.com/image/fetch/$s_!qj-T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qj-T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png" width="1456" height="643" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:643,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:451754,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qj-T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png 424w, https://substackcdn.com/image/fetch/$s_!qj-T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png 848w, https://substackcdn.com/image/fetch/$s_!qj-T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.png 1272w, https://substackcdn.com/image/fetch/$s_!qj-T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd7d425-7dec-4276-9b95-7fbe0b79392c_2560x1130.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Human Development Index (HDI) rankings for 2011: blue = high; red = low. <a href="https://commons.wikimedia.org/wiki/File:UN_HDI_2011_North_South.svg">Wikimedia</a></figcaption></figure></div><h2>Localization fantasies</h2><p>Take one of these people. Any one. OK, now put them back. Please.</p><p>Were they robbed today? Yesterday? Last week? Any time recently? Were they raped? Murdered? Lost a kid? Maimed in a car crash?</p><p>No, no, no, and no. Things are going OK for them <strong>at the moment</strong>. Unless they are in the US, of course. In that case, they should probably avoid churches, malls, schools, and nightclubs. Just sayin&#8217;.</p><p>But this is a <strong>localized</strong> experience. They undoubtedly live in a safe city, where bombs are not falling daily. Probably where bombs have <em>never</em> fallen in their lifetimes. Where crime is low and the most you have to worry about is someone stealing your bike.</p><p>They have jobs. They make decent money. They drive a nice car, live in a nice home. They go to the gym and the pub and even to the movies or the ballpark.</p><p>Hell, where I live the cops (mostly) don&#8217;t carry guns and you can still, I think, fly domestically without going through <em>any security at all</em>. Ha, ha. It&#8217;s 1950 all over again!</p><p>The &#8220;good world&#8221; folks are most likely not being sex-trafficked, either. But it&#8217;s all <strong>local</strong>.</p><p><strong>Globally, things are a bit different.</strong> But if you can&#8217;t see it, hear it, <strong>smell it</strong>, then you can pretend that it&#8217;s not really happening. Oh, but it makes for titillating videos, no? How many of us now spend our days watching videos on Telegram or Bitchute of real people being really tortured and murdered?</p><p>Don&#8217;t pretend that this voyeurism isn&#8217;t widespread. It is <a href="https://en.wikipedia.org/wiki/Death_drive#Mortido_and_Destrudo">Thanatos</a> writ large.</p><p>These <a href="https://en.wikipedia.org/wiki/Pollyanna_principle">Pollyannas</a> have not been force conscripted by the secret police, given a few hours of training, handed a rifle, and then sent off to the front where their life expectancy is measured in <em>hours</em>.</p><p>But what happens if we pull the camera back, take a wider view? Anything else going on here? Anything else at all on this big blue globe?</p><p><strong>How many human beings are being raped while you read this?</strong> How many are being robbed? Beaten? Tortured? Murdered? Maimed? Harassed? Molested?</p><p>Hundreds? Thousands? Tens of thousands? Enough to fill a large stadium or two?</p><p><strong>How many people are</strong> <strong>doing the raping, robbing, torturing, murdering</strong>? How many are cheating on spouses and lovers? Abusing their kids or spouses&#8212;or elderly parents? Terrorizing humans or animals? Leaving gum on the sidewalk, for Christ&#8217;s sake! (Not in Singapore, I bet.)</p><p>But all this horror somehow <strong>does not count</strong> because in <em>your</em> safe little space everything is alright for <em>you?</em> Is it really only all about <em>you?</em></p><p>Doh! Of course it is.</p><p>So you keep voting in the vile infants, supporting the &#8220;tough on crime&#8221; torture policies, going to work to keep the mass extinction juggernaut running smoothly, spewing carbon everywhere like there is no tomorrow&#8212;ensuring that there actually <em>is no tomorrow</em>, paying your taxes to support rape and murder all over the globe, cheering on the bread and circuses, and pretending that <strong>all of the suffering, death, and destruction </strong><em><strong>has</strong> <strong>nothing to do with you</strong></em>, right?</p><p>Hey, we just want to have fun, no?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PGvV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PGvV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.jpeg 424w, https://substackcdn.com/image/fetch/$s_!PGvV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.jpeg 848w, https://substackcdn.com/image/fetch/$s_!PGvV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!PGvV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PGvV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.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;:727058,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PGvV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.jpeg 424w, https://substackcdn.com/image/fetch/$s_!PGvV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.jpeg 848w, https://substackcdn.com/image/fetch/$s_!PGvV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!PGvV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a071564-c606-4d14-9548-a4ea8471ae47_5472x3648.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Mistah Kurtz &#8211; he dead</figcaption></figure></div><h2>Darkness at noon</h2><p><strong>When did the world grow so dark?</strong> As an infamous professor once said to my father, &#8220;I think they call it the &#8216;Pleistocene Era&#8217;&#8221;. He was referring to something else, but we can borrow his answer here.</p><p>Humans are predators and we prey, also, on our own. Always have.</p><p>Back in the days of &#8220;primitive&#8221; tribes (as if we aren&#8217;t more primitive than ever these days), we solved this to some degree by creating the &#8220;<strong>other</strong>&#8221;: that tribe <em>over there</em> who were clearly monsters, sub-humans, beasts.</p><p>More often than not we called ourselves the &#8220;humans&#8221;. Them, not so much. It&#8217;s a bit of a giveaway, no?</p><p>This clever naming allowed us to rob and rape and kill to our hearts&#8217; content without having to feel bad about it. <strong>Cognitive dissonance begone!</strong> After all, &#8220;they&#8221; are <em>monsters</em>. We can do anything we like to them because <strong>monsters have no rights at all</strong>.</p><p>It&#8217;s a rule <em>we</em> made up.</p><p>In the &#8220;West&#8221; these days, we have names for these monsters. We call them &#8220;Russians&#8221; and &#8220;Chinese&#8221; and &#8220;Iranians&#8221; and &#8220;Cubans&#8221; and &#8220;Venezuelans&#8221; and so forth. And they are so obviously evil and subhuman that we don&#8217;t even have to listen to their stories or to consider our culpability it what was done to them.</p><p>We can just murder them wholesale, destroy their futures and their children&#8217;s futures, and then pat ourselves on the back for a <em>job well done</em>.</p><p>Hopefully we do this without robbing, raping, and killing our <em>fellow</em> tribe members, although this system wasn&#8217;t quite as foolproof as we might have hoped. There is always someone who apparently didn&#8217;t get the memo.</p><p>Hard not to bring those brutal habits home, as the US is now learning. Or failing to learn as it were.</p><p>We even had regular upheavals where we&#8217;d have to &#8220;sacrifice&#8221; (i.e., &#8220;make sacred&#8221;, ouch) one of our own tribe. <a href="https://en.wikipedia.org/wiki/Ren%C3%A9_Girard">Ren&#233; Girard</a> in his brilliant book, <em><a href="https://en.wikipedia.org/wiki/Things_Hidden_Since_the_Foundation_of_the_World">Things Hidden since the Foundation of the World</a></em>, goes into striking detail re our &#8220;inhumanity&#8221; to each other.</p><p>Damn that <a href="https://en.wikipedia.org/wiki/Mimetic_theory">mimesis</a>.</p><p>Or consider the work of the <a href="https://en.wikipedia.org/wiki/Psychohistory">psychohistorians</a> for another perspective. Not for the timid. Don&#8217;t say I didn&#8217;t warn you.</p><p>Whatever one may think of the psychohistorians&#8212;and having had some interactions with <a href="https://en.wikipedia.org/wiki/Lloyd_deMause">Lloyd deMause</a> back in the day, I can confirm that he was a truly arrogant asshole&#8212;much of the <em>evidence</em> they report is easily shown to be true.</p><p>Draw what conclusions you may, it is the evidence that is truly damning. <strong>What kind of rational, compassionate, and enlightened species </strong><em><strong>regularly sacrifices</strong></em><strong> </strong><em><strong>their own children</strong></em><strong> to imaginary beings?</strong> Answer: none.</p><p>My conclusion: <strong>we are neither rational nor compassionate, and very far indeed from enlightened.</strong></p><p>Good news! Now we mostly murder <em>the children of others</em>. Some 40,000 <strong>per day</strong> last I heard. But don&#8217;t worry because <em>no one gives a flying fuck. </em>Exactly zero fucks given!</p><p>We are <em>not</em> nice animals. Never have been. Although we&#8217;ve sometimes shown surprising potential for enlightenment, the moment that one of us appears about to attain it, we murder that person, often brutally.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hADh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hADh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hADh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hADh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hADh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hADh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.jpeg" width="1456" height="2184" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2184,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2769900,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hADh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hADh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hADh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hADh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0fb3a62-5827-4572-8d73-df0147cf6a04_3648x5472.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">What could go wrong?</figcaption></figure></div><h2>Babies with razor blades</h2><p>The problem is that our &#8220;intelligence&#8221; has far outstripped our wisdom and our empathy. <strong>Our tools have become immensely powerful, but our ability to control ourselves has changed little if at all.</strong> We simply refuse to grow up.</p><p>The <em>homo sapiens sapiens</em> [sic] of a quarter million years ago had a brain not significantly different from that of the kid born today.</p><p>I&#8217;ve said it elsewhere but I&#8217;ll say it again: <strong>every new &#8220;advance&#8221; in technology is immediately put to use to create new weapons</strong>. And to stimulate new <em>artificial and unnecessary</em> consumer demand.</p><p>But it&#8217;s more than that. I&#8217;ve also mentioned <a href="http://www.artandpopularculture.com/Paul_Virilio">Paul Virilio</a> and his brilliant recognition of the <a href="http://www.artandpopularculture.com/Integral_accident">integral accident</a>: that one cannot invent the ship without also inventing the shipwreck.</p><p>No railroads without derailments (heard about any of those lately?); no automobiles without pile ups; no airplanes without plane crashes.</p><p>There simply is <strong>no such thing as a free lunch</strong>. You do not get to eat your cake and have it, too. These clich&#233;s exist for a reason.</p><p>So it is that automobiles and airplanes have helped to destroy the family: the core of our social structure. Where once generations of the same family lived all in a single dwelling&#8202;&#8212;&#8202;even extended families&#8202;&#8212;&#8202;or an easy walk from each other, now my family, for example, is distributed all over the world. As are so many others.</p><p>And we can kid ourselves that with aircraft and Zoom and email we can &#8220;stay connected&#8221;, but it&#8217;s all nonsense. I haven&#8217;t seen any of my family is six years except in two dimensions on a display. Some I will never actually see again. I&#8217;ve lost count of the friends who have faded away.</p><p>That might be OK if we took Stephen Stills&#8217;s advice and loved the ones we&#8217;re with, but we rarely do. Instead, <strong>we become more and more isolated and alone</strong>. But we have our &#8220;toys&#8221; to keep us company. Smart phones, robots even, and now AI.</p><p>It only took one real pandemic&#8212;the first of many, I promise you&#8212;to drive us into isolated little worlds. Instead of coming together like an old-style barn building effort, we upped our brutality and callousness. And our paranoia.</p><p><strong>&#8220;Smart&#8221; phones are making us stupid</strong>. <strong>&#8220;Social&#8221; media is making us </strong><em><strong>anti</strong></em><strong>-social</strong>. We&#8217;re all just &#8220;influencers&#8221; pumping up our &#8220;brands&#8221; and collecting &#8220;likes&#8221; now. What effect do you think AI will have on all this? Will it reverse it or accelerate it?</p><p>My guess is that it will finish us off entirely. Artificial &#8220;intelligence&#8221; will make us <em>un-</em>intelligent. After all, <strong>why learn to think if the machine can do it for you?</strong></p><p>What will be the point of learning <em>anything at all</em> if ChatGPT and its like can do it faster and better? Why bother with school, education? Once AI can build and improve itself, why are we needed at all?</p><p>But at that point, what is their left for us to <em>do</em> but <strong>consume</strong>? Is this really the destiny we want for ourselves? Frankly, I&#8217;d rather be a battery.</p><p>When I was a kid, some &#8220;futurists&#8221; suggested that eventually we&#8217;d evolve into a creature with one arm and a single big thumb: that was all we would need to keep pushing the button to make things happen.</p><p>Typically unimaginative, of course. A recent article showed that it is possible to train AI (or what passes for it) to <strong>read our minds</strong>. Ha, ha. So long privacy &#8230; forever.</p><p><strong>How will we be any different than one of B.F. Skinner&#8217;s rats pushing the lever that delivers a jolt of pleasure to the brain over and over and over again ad infinitum?</strong></p><p>Oh, yeah. <strong>We won&#8217;t need a lever.</strong></p><p>If railroads gave us derailments and automobiles pile ups (and both contributed to the destruction of the family and society), <strong>what will the &#8220;integral accident&#8221; of AI be?</strong></p><p>And shouldn&#8217;t we ask that question <em>now</em>, before we go all in?</p><p><strong>Shouldn&#8217;t we have been asking that question for the past 6000+ years?</strong></p><p>And then <em>acting</em> on the answers instead of turning away and brushing them off?</p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[How to be a great dev]]></title><description><![CDATA[And more: how to be a great human being]]></description><link>https://www.cantankerouscoder.com/p/how-to-be-a-great-dev</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/how-to-be-a-great-dev</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Sat, 29 Apr 2023 05:16:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R1yn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There are several concepts that are integral to being both a great software developer and, frankly, a great human being. Most of these do double duty.</p><p>In short:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.cantankerouscoder.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Cantankerous Coder! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><ol><li><p>There ain&#8217;t no such thing as a free lunch</p></li><li><p>Look down that road</p></li><li><p>Less is more</p></li><li><p>Murder your darlings</p></li><li><p>Code just in time</p></li><li><p>The Seven Ps</p></li></ol><p>These are closely related and often overlap.</p><p>The most important practice for any dev (or human) is to fully grok the significance of a phrase popularized in part by the sci-fi author <a href="https://en.wikipedia.org/wiki/Robert_A._Heinlein">Robert Heinlein</a> in his best work, <em><a href="https://en.wikipedia.org/wiki/The_Moon_Is_a_Harsh_Mistress">The Moon Is a Harsh Mistress</a></em>. He called it <strong>TANSTAAFL</strong>:</p><h2>There ain&#8217;t no such thing as a free lunch</h2><p>There are many other similar formulations in English, each spotlighting a different aspect:</p><ul><li><p>To eat one&#8217;s cake and have it to&#8224;</p></li><li><p>A &#8220;get out of jail free&#8221; card (<a href="https://en.wikipedia.org/wiki/Get_Out_of_Jail_Free_card">Monopoly</a>)</p></li><li><p>Something for nothing</p></li></ul><p>You can probably think of others.</p><p>Eating one&#8217;s cake but still having it is like the goose that laid the golden egg. Essentially, you don&#8217;t have to pay for the cake again by buying another one, you can just keep eating it forever. Sweet!</p><p>Getting out of jail free means not being <strong>held accountable for your actions</strong>. This is the number one aspiration of all infants. You get to do the crime but you <em>don&#8217;t</em> have to do the time. Sorry, <a href="https://en.wikipedia.org/wiki/Baretta">Baretta</a>.</p><p>But then Robert Blake came very close to proving this true, escaping a criminal charge for murder but losing the civil case. Nice try, Robert. You should have watched your show.</p><p>But all of these idioms essentially reduce down to the third one: <strong>something for nothing</strong>.</p><p><em>There is no such thing</em>. Despite fervent belief by most humans:</p><p><strong>No one ever gets away with anything.</strong></p><p>Never. There is <em>always</em> a cost, a consequence, even if it is merely the destruction of your soul. You cannot commit rape without becoming a rapist, and you cannot commit murder without becoming a murderer. And that shit don&#8217;t wash off. Ask Lady Macbeth.</p><blockquote><p>Yet who would have thought the old man to have had so much blood in him?</p></blockquote><p><a href="https://en.wikipedia.org/wiki/Paul_Virilio">Paul Virilio</a>, the French cultural theorist and &#230;sthetic philosopher, coined the term <strong><a href="https://en.wikipedia.org/wiki/Paul_Virilio#The_integral_accident">the integral accident</a></strong><em><strong> </strong></em>to describe a phenomenon he had observed, namely, that <em>there is no such thing as a free lunch.</em></p><p>Virilio noted that:</p><blockquote><p>When you invent the ship, you also invent the shipwreck; when you invent the plane you also invent the plane crash; and when you invent electricity, you invent electrocution ... Every technology carries its own negativity, which is invented at the same time as technical progress.</p></blockquote><p>An example of this viewed from the opposite pole is <a href="https://en.wikipedia.org/wiki/Newton%27s_laws_of_motion#Third">Isaac Newton&#8217;s Third Law of Motion</a>:</p><blockquote><p>To every action, there is always opposed an equal reaction.</p></blockquote><p><strong>There is a cost to every action</strong> (and, often, a cost to every <em>failure</em> to take action).</p><p>Too often devs (and humans in general) act <strong>without thought for the consequences</strong> or the costs. These costs are not limited to the price paid for a product or service, but include also the <strong><a href="https://en.wikipedia.org/wiki/Opportunity_cost">opportunity costs</a></strong>: the others options you gave up when you chose one.</p><p><strong>The first rule of life </strong><em><strong>and</strong></em><strong> software development is: Look before you leap. Consider the consequences of your actions and of </strong><em><strong>not</strong></em><strong> taking those actions </strong><em><strong>before</strong></em><strong> you act (or choose not to act).</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R1yn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R1yn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg 424w, https://substackcdn.com/image/fetch/$s_!R1yn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg 848w, https://substackcdn.com/image/fetch/$s_!R1yn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!R1yn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R1yn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg" width="1456" height="999" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:999,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:481973,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R1yn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg 424w, https://substackcdn.com/image/fetch/$s_!R1yn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg 848w, https://substackcdn.com/image/fetch/$s_!R1yn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!R1yn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F956cfd9c-418e-4ab4-bf5f-bc8f39c83390_1920x1318.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Look down that road before you travel it</h2><p>I have mentioned elsewhere that <a href="https://en.wikipedia.org/wiki/William_S._Burroughs">William S. Burroughs</a>, the seminal <a href="https://en.wikipedia.org/wiki/Beat_Generation">Beat Generation</a> writer, admonished his readers in the foreword to one of his books (I thought it might be <em><a href="https://en.wikipedia.org/wiki/Junkie_(novel)">Junkie</a></em>, but damned if I can find it now), to &#8220;<strong>look down that road</strong>&#8221; before choosing heroin addiction.</p><p>That turns out to be excellent advice in all areas of life, not just drug use.</p><p>It is not enough to limit ourselves to the <strong>proximate</strong> costs of our activities. We need to keep Virilio&#8217;s &#8220;integral accident&#8221; firmly in mind and <strong>consider the long term consequences of everything we do</strong><em><strong>.</strong></em></p><p>For example,  when the inventors of Facebook (whoever they really were) came up with the idea, did they stop to consider the long term effects of social media?</p><p><strong>Did they discuss the proliferation of propaganda, online bullying, echo chambers, censorship, the end of privacy, the global surveillance state, the effect on society and interpersonal relationships, etc.?</strong> Or did they think only of how cool their app would be and how filthy rich they were all going to get?</p><p>I think we can guess the answer to that, and we are all worse off for it. After all, the app began as a way for college upperclassmen to identify potential freshman date rape victims. Why do you think it is called &#8220;face&#8221; book?</p><p>That said, it took a woman to help invent Tinder.</p><p>Most devs, and perhaps most humans, are gleefully engaged in activities that have gruesome consequences for others, and for themselves, right up to and including the extinction of the human race. But we never <strong>look down that road</strong> to see what it is we are creating.</p><p>We just assume that we&#8217;ll be given a <strong>get out of jail free card</strong><em><strong>. </strong></em>Good luck with that.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1jZ0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1jZ0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1jZ0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1jZ0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1jZ0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1jZ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.jpeg" width="1456" height="2040" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2040,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1233804,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1jZ0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1jZ0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1jZ0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1jZ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cf199e9-2607-49c3-9b9f-e5b7f609e262_2854x3998.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Less is more</h2><p>The architect <a href="https://en.wikipedia.org/wiki/Ludwig_Mies_van_der_Rohe">Ludwig Mies van der Rohe</a> coined the phrase &#8220;<a href="https://en.wikipedia.org/wiki/Minimalism#Design,_architecture,_and_spaces">less is more</a>&#8221; in reference to minimalist architecture.</p><p>Actually, the phrase can be traced back to the German poet <a href="https://en.wikipedia.org/wiki/Christoph_Martin_Wieland">Christoph Martin Wieland</a> who wrote &#8220;<em>Und minder ist oft mehr, wie Lessings Prinz uns lehrt</em>&#8220; (And less is often more, as <a href="https://en.wikipedia.org/wiki/Gotthold_Ephraim_Lessing">Lessing's</a> Prince teaches us) via <a href="https://en.wikipedia.org/wiki/Robert_Browning">Robert Browning&#8217;s</a> poem <em><a href="https://en.wikipedia.org/wiki/Men_and_Women_(poetry_collection)">Men and Women</a></em> (1855): &#8221;Well, less is more, Lucrezia&#8221;. </p><p>The idea is, simply, that one should not build anything not needed for the accomplishment of the goal. This presumes, of course, that you considered the cost and <em>looked down that road</em> before you set the goal. Yeah, how likely is that?</p><p>This idea of not adding <strong>gratuitous</strong> features was captured by <a href="https://en.wikipedia.org/wiki/William_of_Ockham">William of Ockham</a>, who put it simply (if he did indeed say this):</p><blockquote><p>Do not needlessly multiply entities.</p></blockquote><p>This is known as <a href="https://en.wikipedia.org/wiki/Occam%27s_razor">Occam&#8217;s razor</a> in philosophy where it is a &#8220;problem-solving principle&#8221;, but its applications range so much more widely.</p><p>It is often mis-paraphrased as &#8220;the simplest solution is the right one&#8221;. But that is wrong. Utterly wrong. It has left out the key word in his admonition, which is &#8220;<strong>needlessly</strong>&#8221;.</p><p>Hence it is not enjoining us to pick the simplest &#8220;solution&#8221;, but <strong>the simplest solution </strong><em><strong>all else being equal</strong></em>. In other words, if the simpler solution does not solve the problem equally as well, then it is <em>not</em> the better solution.</p><p>That&#8217;s important.</p><p>What Ockham is really saying is, <strong>less is more</strong>: add only <em>necessary</em> features to your product or service <strong>and then stop</strong>. Add nothing more than is necessary to accomplish the goal.</p><p>As I like to put it: <strong>no gratuitous nothing.</strong></p><h2>Murder your darlings</h2><p>This is another oft misattributed quotation. The true original author was <a href="https://en.wikipedia.org/wiki/Arthur_Quiller-Couch">Arthur Quiller-Couch</a>. He wrote:</p><blockquote><p>If you here require a practical rule of me, I will present you with this: &#8216;Whenever you feel an impulse to perpetrate a piece of exceptionally fine writing, obey it&#8212;whole-heartedly&#8212;and delete it before sending your manuscript to press. <strong>Murder your darlings</strong>&#8217;.</p></blockquote><p>He was referring to writing, but this applies equally well to all creative efforts, including especially coding.</p><p>We get our egos attached to certain turns of phrase or certain ideas or certain lines of code, and our critical faculties fail. Those lines of code have no business being there, <strong>but we just like them so much we can&#8217;t let go.</strong></p><p>LET GO. <em>Murder your darlings</em>.</p><p>If you can&#8217;t rationally justify the inclusion of some object or idea, then <strong>leave it out</strong>. You may think it is oh-so-cool.  I promise you that the <em>next</em> dev will think it is <strong>self-indulgent</strong> <strong>junk</strong>.</p><p>Be ruthless. To hell with Ruth.</p><p>As many wits have commented in different forms over the centuries, the way to sculpt an elephant is to get a block of marble and chip away anything that doesn&#8217;t look like an elephant.</p><p>Easier said than done. But a good way to refactor is to keep removing bits of code and check if everything still works. If it doesn&#8217;t, put the code back. If it does, repeat the process until there is nothing else to remove that doesn&#8217;t affect the functionality.</p><p><strong>And the best way to refactor is continually, as you code</strong>. Keep it lean as you go.</p><h2>Do it &#8220;just in time&#8221;</h2><p>I have mentioned many times&#8212;perhaps because it was a <strong>life-altering event</strong>&#8212;something that Guillermo Rauch said to me more than a decade ago as I was showing him my &#8220;darlings&#8221;, namely, an absurdly overengineered app of which I was stupidly proud:</p><blockquote><p>Oh, Charles! <em>Never write a line of code until you have to.</em></p></blockquote><p>That moment was an earth-shaking epiphany for me. Let&#8217;s just say the lights lit up and sirens sounded.</p><p>The irony is that I had been saying this same thing for nearly two decades, but in reference to learning:</p><blockquote><p><strong>Never learn anything until you have to</strong>.</p></blockquote><p>In short, given the <strong>longevity</strong> of most knowledge and skills, especially in coding, which can be measured almost in microseconds, don&#8217;t learn anything until just before you need it.</p><p>Learn too soon and it will rust, bust, and collect dust; learn to late and, well, it&#8217;s too late. Rather than learning &#8220;just in case&#8221; or &#8220;just too late&#8221;, learn &#8220;just in time&#8221;.</p><p>Why the hell had it never occurred to me to apply that <em>to my coding?</em></p><p>Well, to be fair, I was a sole entrepreneur back then, so the jobs I got tended to be fairly simple. How then to learn more powerful approaches? So I overengineered on purpose.</p><p>Of course, this was also violating my &#8220;learn just in time&#8221; principle, but I was so eager to try tools such as RabbitMQ that it mattered not that I had no use for a message queue.</p><p>In short, I forgot to <strong>murder my darlings</strong><em><strong>.</strong></em></p><p>Once I began to apply his advice, which I now call &#8220;<a href="https://www.cantankerouscoder.com/p/the-tao-of-just-in-time-coding">just-in-time coding</a>&#8221;, <strong>my coding improved dramatically and I became far more effective and efficient</strong>.</p><p>But I must admit that <em>unlearning past bad behavior was quite onerous</em> and I often caught myself looking longingly at powerful tech that I <em>absolutely did not need</em>.</p><p><strong>Never write a line of code until you must</strong><em><strong>.</strong></em></p><h2>The Seven Ps</h2><p>This is one more practice that is often forgotten. I originally heard this in a <a href="https://en.wikipedia.org/wiki/Dirty_Harry">Dirty Harry</a> movie (damned if I can remember which, but I can hear Clint Eastwood saying it) as the &#8220;Six Ps&#8221;: </p><blockquote><p>You forgot the Six Ps: Proper planning prevents piss poor performance.</p></blockquote><p>Years later, I discovered that some use the <em>Seven</em> Ps: <strong>proper planning </strong><em><strong>and preparation</strong></em><strong> prevents piss poor performance</strong>. I am not sure that the &#8220;preparation&#8221; really adds much, but just to be sure, I am going with the Seven Ps here.</p><p>Too many devs get excited and <strong>jump straight to coding</strong>. Coding, prototyping, and wire-framing can help with planning, but planning is the key to successful coding.</p><p>I&#8217;m not talking waterfall here: that&#8217;s about <em>specification</em>, not planning.</p><p>Planning, asking around, looking to see how others have done it, considering your options: all these make for better code. And sometimes reveal that you don&#8217;t need to code at all.</p><p>So there are seven best practices that can make you a great coder. More importantly, all of them can equally be applied to life itself, and can make you a happier, healthier, better human being. Have fun with them.</p><p>&#8224; &#8221;To eat one&#8217;s cake and have it to&#8221; is often said backwards, probably more often than not. But it is easy to have a piece of cake and then eat it. It is quite a bit trickier to <em>eat</em> a piece of cake <em>but still have it.</em> Putting it the right way around makes the intent clearer.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.cantankerouscoder.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Cantankerous Coder! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Star Dreck]]></title><description><![CDATA[Where toddlers boldly go...]]></description><link>https://www.cantankerouscoder.com/p/star-dreck</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/star-dreck</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Sun, 23 Apr 2023 05:20:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JJPk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I discovered <em>Star Trek </em>in syndication on a black-and-white TV shortly after it was cancelled for a second time. I remember rushing home from fifth grade to watch the show every afternoon. <strong>&#8220;Balance of Terror&#8221;</strong> remains my favorite. I rewatched it recently and it holds up pretty well.</p><p>I was part of that <strong>cult following</strong> that sprang up around 1970. I loved <em>Star Trek.</em></p><p>I remember clearly the day that I watched the show at a friend&#8217;s house. They had a <em>color</em> television. I was shocked! It had never occurred to me that they had brightly-colored uniforms, or that they were different colors, or that those colors were determined by their job descriptions: gold for &#8220;command&#8221;, blue for &#8220;science&#8221;, red for &#8220;expendable&#8221;.</p><p>But even at twelve years old, I could see that <strong>the show was patently ridiculous</strong>. The contradictions were manifold. Many of the episodes were just plain silly, and I am not limiting myself to &#8220;The Trouble with Tribbles&#8221;.</p><p>In 1976, I attended a <em><strong>Star Trek</strong></em><strong> convention</strong> in New York City at Rockefeller Center. Despite being only seventeen years old, I managed through my father&#8217;s company to get hold of a <strong>press pass</strong>, and I travelled with one of his writers who was a big Trekkie, ostensibly as his photographer despite not carrying a camera. But no one questioned it.</p><p>My greatest memory from that event&#8212;other than the near-riot that occurred when it turned out the event was oversold and the building managers turned <em>all</em> the escalators to <em>down</em> escalators (watching people try to run <em>up</em> them remains a cherished memory)&#8212;was how utterly <strong>pathetic</strong> the whole thing was.</p><p>In truth, it pretty much ended my career as a Trekkie. I&#8217;d been drifting away for some time because, well, people do sometimes grow up. But watching <em>grown men</em>, ostensibly &#8220;adults&#8221;, <em>fawn over</em> third-rate actors, and listening to those selfsame mostly-failed actors brag about their sad &#339;uvre (or lack thereof), wow. That was disillusioning.</p><p>Hello, folks! <strong>It&#8217;s a fucking fantasy.</strong> And not even a very good one. It is shockingly lacking in imagination, as was evident to me even then. <strong>It is not Shakespeare, for fuck&#8217;s sake.</strong></p><p>To be more precise, it is an <strong>adolescent boy&#8217;s masturbation fantasy</strong>. So why are so many &#8220;grown ups&#8221; more interested than even the teenagers?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JJPk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JJPk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JJPk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JJPk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JJPk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JJPk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.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;:5138129,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JJPk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JJPk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JJPk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JJPk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db290dd-2b02-4a8e-9a5b-b8b611d22cdb_2943x1962.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Aren&#8217;t these folks a bit old to be playing dress up? [<a href="https://www.flickr.com/photos/27261720@N00/2714381405">Jason Scragz</a>]</figcaption></figure></div><p>Want proof? At least in the early days, four out of five Trekkies identified as male. It was one big circle jerk.</p><p>And that brings up another point. <em>Star Trek</em> is <strong>infantile and ridiculous</strong>. Oops! Sorry, but it just is. So why do so many people take it so fucking seriously? <strong>It&#8217;s like a religion.</strong> Maybe it <em>is</em> a religion. It is certainly a <strong>fetish</strong> of the technophilia religion.</p><p>This is nowhere more evident than in the pathetic insistence of &#8220;fans&#8221; that they are &#8220;Trekkers&#8221;, not &#8220;Trekkies&#8221;. When I was a kid, we were all Trekkies and no one had a problem with it. But we were <em>kids</em>.</p><p>But when it was pointed out repeatedly by <strong>actual adults</strong> (now effectively extinct) to the overgrown children who so desperately wanted to <em>be</em> Captain Kirk or Mr. Spock that they were, ahem, <strong>overgrown children</strong>, well, they got their panties in a knot and demanded to be taken seriously. No, seriously. Hence, &#8220;Trekk<em>ers</em>&#8221;.</p><p>So desperate is the need to be taken seriously that there are numerous articles <strong>even in </strong><em><strong>peer-reviewed,</strong></em><strong> ostensibly-science-oriented journals</strong> calling <em>Star Trek </em>fandom a &#8220;cultural phenomenon&#8221;. Book smarts and maturity are not directly correlated. Actually, they may be <em>inversely</em> correlated.</p><p>Frankly, I think that <strong>Peter Pan Syndrome</strong> and <strong>wishful thinking</strong> to the point of <strong>dementia</strong> should more rightly be filed under the <a href="https://www.psychiatry.org/psychiatrists/practice/dsm">DSM</a> than as  &#8220;cultural phenomenon&#8221;.</p><p>I wish I could say that this is a modern disease brought on by our impending doom and a desire to wish it away, or to deny that our technology, far from saving us, is accelerating our rush to extinction, but I&#8217;d be lying. People have always been this pathetically puerile. Cf. Plato.</p><h2>It&#8217;s the technology, stupid</h2><p><strong>Science fiction or fantasy?</strong> Which is it?</p><p>Well, let&#8217;s take a look at the &#8220;science&#8221; of <em>Star Trek</em>. I&#8217;ll begin with the most obvious problems. I am no expert on the later shows, but I&#8217;ve seen enough episodes of all of them to note that these egregious errors have never really been addressed, although plenty of <strong>desperate rationalizing</strong> has been attempted.</p><p>But first let&#8217;s consider the difference between <em>science</em> fiction and <em>fantasy</em>. For my purposes, I&#8217;ll keep it simple: science fiction imagines <em>possible</em> futures while remaining <strong>true to the laws of nature</strong>. Fantasy has no such limitation. Anything goes, and usually does.</p><p>True, most fantasy these days is about enormous tits, obscenely disproportionate musculature, and, oddly, <em>swords.</em> Something about penetration? Go figure.</p><p>But science fiction claims to be more believable than all that. More serious. More, um, <strong>intellectual</strong>.</p><p>So is <em>Star Trek</em> or any of its various sequels science fiction? Or is it pure fantasy?</p><p>Let us begin with the most obvious problems, commented on endlessly everywhere and just as studiously ignored.</p><ol><li><p><strong>Space ships don&#8217;t go </strong><em><strong>whoosh.</strong></em> There is no medium in space for the propagation of sound. When creating the sequels, there was some discussion about this, I believe. They stuck with the whoosh. Really.</p></li><li><p>If your space ship can accelerate suddenly to &#8220;warp speed&#8221; or even high &#8220;impulse&#8221; speed, then you either need some kind of field that negates inertia, or you will <strong>need to replace the entire crew after each maneuver</strong>. When the ship is hit by weapons of some sort, the crew are tossed around like ice cubes in a cocktail shaker. Um&#8230; no. We&#8217;re gonna need a big hose.</p></li><li><p>Aside from occasional carpet-covered-in-puke (&#8220;The Devil in the Dark&#8221;) or stuffed-animal-based &#8220;life forms&#8221; (&#8220;Tribbles&#8221; again), <strong>a surprising number of planets have </strong><em><strong>humanoid</strong></em><strong> life forms</strong>. Wow! What imagination! What are the odds? My favorite is the good-mime/bad-mime planet.</p></li><li><p>The &#8220;science&#8221; varies widely from episode to episode and series to series based on  the needs of the plot&#8212;the writing is incredibly lazy and unimaginative. Maybe it&#8217;s just me, but <strong>I don&#8217;t think that science actually works that way</strong>.</p></li></ol><h2>Humans have no imagination at all</h2><p>It&#8217;s obvious to anyone paying attention that the vast majority of homo sapiens sapiens have <strong>no imagination at all</strong>. None, really.</p><p>Go back through history and inventory all the &#8220;monsters&#8221; that humans have dreamt up. Are they unique, original creations? Or are they <strong>nothing more than mash-ups?</strong></p><p>Need a monster? Take the head of a gerbil, paste it to the body of a kangaroo, and add the tail of a donkey. Done! Scary, too.</p><p>Snakes for hair? Yup. Half human, half goat&#8212;um, how is this different from most human males? Horse with horn? Old news. Eagle + human, horse + human, bird + human, fish + human, fly + human: been there, done that, running out of options.</p><p>You want true imagination? Read the eponymous second part of Isaac Asimov&#8217;s <em>The Gods Themselves. </em>Hard and soft bodies; <strong>three &#8220;sexes&#8221; represented by the Rationals, Emotionals, and Parentals</strong>; mutability and the ability to &#8220;melt&#8221; with solid objects. There is even a different concept of time.</p><p>True, it is still pretty derivative&#8212;obviously a product of the whole <strong>left brain/right brain</strong> <strong>era</strong>&#8212;but it is <em>light years</em> beyond most sad &#8220;sci-fi&#8221;.</p><p>Or consider the brilliant trilogy by <strong>Octavia Butler</strong>&#8212;for my money<strong> the most imaginative science fiction writer of all time</strong>&#8212;in which she imagines the Oankali, who perceive the world through sensory tentacles all over their bodies making them look a bit like mobile trees.</p><p>The Oankali also have three sexes: <strong>male, female, and &#8220;ooloi&#8221;.</strong> The latter are necessary for the former two to mate, and they have the ability to perceive and alter genetic material. Their space ships are essentially living things.</p><p>The Oankali have <strong>a biological imperative to evolve by interbreeding with alien species.</strong><em><strong> </strong></em>Wow. Maybe you <em>can</em> make that shit up. Xenogenesis FTW.</p><p>So what is imagination? I would say that it is <strong>not</strong> the ability to dream up <em>impossible</em> things, but to dream up <strong>utterly</strong> <strong>new concepts and technologies</strong> <em><strong>that are within the realm of possibility</strong></em><strong>. </strong>And then to <em>form an image </em>in the mind<em>&#8212;</em>hence <em>image</em>-ination&#8212;of how such concepts and technologies would play out.</p><p>Ignoring the impossibility of an idea is <strong>cheating</strong>. We call that <em>fantasy.</em> &#8220;Science&#8221; fiction should have nothing to do with it.</p><p>Imagination thus means the ability to imagine the <strong>consequences and ramifications </strong>of any new idea: anticipating, as it were, Virilio&#8217;s &#8220;integral accident&#8221;.</p><h2>Just how fucking stupid is <em>Star Dreck?</em></h2><p>Well, on a scale of one to ten, with ten being utterly imbecilic, I&#8217;d have to say&#8230; <em>eleven.</em></p><p>Let&#8217;s take the most obvious problem, discussed endlessly by idiot Trekkies who recognize the problem and desperately work to <em>make it go away</em>. Whole forests have gone to the blade to write treatises trying to work around the science mumbo-jumbo perpetrated by <em>Star Dreck</em> and it&#8217;s ilk.</p><p>Thomas Aquinas had nothing on Trekkies.</p><p>The biggest problem is, of course, the <strong>transporter</strong>. The problems with this technology were actually discussed <em>before</em> it was first introduced, but the &#8220;plot&#8221; (I&#8217;m using the term very loosely) required that our heroes don&#8217;t spend most of their time just getting from point A to point B, let alone point X, Y, or Z.</p><p>This is also the reason for the <strong>warp drive</strong>. Where&#8217;s the fun if Kirk <em>and his kids and his grandkids</em> all die before they get even to the very first planet&#8212;which, naturally, turns out to be barren? Not much of a show.</p><p>But the transporter, more than perhaps any other element in the show, acts mostly to &#8220;<strong>transport&#8221; the show (heh) from the sci-fi genre deep into fantasy and magic.</strong></p><p>The technical issues aren&#8217;t even the worst of it. But let&#8217;s start with them.</p><p><strong>How the fuck is this thing supposed to work?</strong></p><p>Well, <a href="https://gamerant.com/star-trek-transporter-technology-explained/">gamerant.com</a> offers this explanation:</p><blockquote><p><em>Star Trek </em>transporter tech works by breaking down matter such as living organisms, cargo, even gas or liquid-based matter into an energy pattern, in a process that the show calls &#8220;dematerialization.&#8221; Once each atom is broken down into this pattern, it is &#8220;beamed&#8221; across to another transporter pad, where it is converted back into matter. This is aptly named &#8220;rematerialization.&#8221;</p></blockquote><p>Oh! Of course! It&#8217;s all so clear now! Except I&#8217;m pretty sure you don&#8217;t need that second transporter pad.</p><p>I recently saw a comic that neatly exposes the shell game attempted above:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oKRu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb841c6b8-68dc-49a3-931a-6e67488d615d_960x620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oKRu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb841c6b8-68dc-49a3-931a-6e67488d615d_960x620.png 424w, https://substackcdn.com/image/fetch/$s_!oKRu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb841c6b8-68dc-49a3-931a-6e67488d615d_960x620.png 848w, https://substackcdn.com/image/fetch/$s_!oKRu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb841c6b8-68dc-49a3-931a-6e67488d615d_960x620.png 1272w, https://substackcdn.com/image/fetch/$s_!oKRu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb841c6b8-68dc-49a3-931a-6e67488d615d_960x620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oKRu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb841c6b8-68dc-49a3-931a-6e67488d615d_960x620.png" width="960" height="620" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b841c6b8-68dc-49a3-931a-6e67488d615d_960x620.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:620,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:225762,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oKRu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb841c6b8-68dc-49a3-931a-6e67488d615d_960x620.png 424w, https://substackcdn.com/image/fetch/$s_!oKRu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb841c6b8-68dc-49a3-931a-6e67488d615d_960x620.png 848w, https://substackcdn.com/image/fetch/$s_!oKRu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb841c6b8-68dc-49a3-931a-6e67488d615d_960x620.png 1272w, https://substackcdn.com/image/fetch/$s_!oKRu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb841c6b8-68dc-49a3-931a-6e67488d615d_960x620.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The <em>Star Trek</em> transporter explained&#8230;</figcaption></figure></div><p>The key word in the above description is <strong>pattern</strong>. We&#8217;ll come back to that. But first let us address some simple and obvious issues.</p><ol><li><p>How does this complete conversion of matter to energy occur? How do sparkly lights &#8220;break down&#8221; matter? Doesn&#8217;t that require, um, nuclear processes? More importantly, <strong>does it hurt?</strong></p></li><li><p>What kind of energy is this &#8220;beam&#8221;, and <strong>how does it transmit this incredibly complex &#8220;pattern&#8221; over long distances and through solid rock?</strong> Oh, but they&#8217;ve upped the ante! Now it can transport humans from a planet to a starship half a galaxy away and <em>traveling at &#8220;warp&#8221; speed.</em> Again, I guess you <em><strong>can</strong></em> &#8220;make this shit up&#8221;.</p></li><li><p>Most importantly, how the hell is the energy-to-matter &#8220;rematerializing&#8221; accomplished <em>at a distance and without a receiver?</em></p></li></ol><p>But we can solve all of this with a very special scientific method called <strong>&#8220;hand waving&#8221;</strong>. No, really, it works! Try it. You can hand wave almost anything away if you just try hard enough. Then a miracle occurs.</p><p>But there is one thing you can&#8217;t just wave away, and that is the <strong>ramifications of such a technology</strong>. The most obvious of which is this:</p><p><strong>If we can break people down into patterns at time t1, and put them back together again at time t2, then we must have stored that pattern for at least a duration of t2 - t1.</strong></p><p>Based on a careful scientific evaluation of the original show and spot checks on sequels, that delta can be anywhere from a few seconds to several minutes or even hours, days, weeks, <em>years</em>.</p><p>Oh, but the pattern degrades after just a few seconds! It has to or there will be inconvenient questions like the ones below. Except all we have to do is <strong>use the plasma stream to amplify the charge in the buffer to keep those patterns from degrading</strong><em><strong>.</strong></em> Easy peasy.</p><p>I know that is true because at some point the plot required it to be true.</p><p>An infant could do it. Actually, <em>only an infant can do it.</em></p><h2>About those ramifications</h2><p>So, we can murder you into a pattern and store you, temporarily at least, in the transporter until we resurrect a <em>new copy of you</em> somewhere else. These copies can be bifurcated occasionally into &#8220;good you&#8221; and &#8220;bad you&#8221; because everyone knows that good and evil are not the result of poor decisions, but are somatic and stored in our cells. Damned evil cells. I&#8217;m pretty sure mine are in my liver.</p><p><strong>So, um, why does anyone ever die in </strong><em><strong>Star Dreck?</strong></em></p><p>After all, we can just <strong>use the pattern to create a new you</strong>. Sure, like any backup copy, it will be the you of whenever the last backup was made, but that&#8217;s better than nothing right? Your wife and kids will understand, won&#8217;t they?</p><p>Actually, what is to stop us from creating <strong>hundreds or thousands of copies</strong> of you? Wow, that would be a terrific help with the housework, homework, plain old work, etc. except &#8230; we&#8217;d have to feed them all. Sigh &#8230; nothing&#8217;s perfect.</p><p>Oh, but it&#8217;s impossible to store those patterns because if it isn&#8217;t, then it reveals that <em><strong>Star Trek</strong> </em><strong>is utter poppycock and has about as much relation to real science as the &#8220;man in the moon&#8221;.</strong></p><p><em><strong>Star Trek </strong></em><strong>is fantasy, folks</strong>. Not science. Get over it.</p><p>Oh, there is so much more, but this is getting tedious. For example, why can the replicator in the galley make both organic and inorganic matter (again, from generic &#8220;energy&#8221;, apparently), but can&#8217;t make &#8220;dilithium crystals&#8221; or &#8220;phasers&#8221; when you need them?</p><p>Oh, right. It is <strong>plot-blocked</strong>. You heard it here first, folks! Plot blocking!</p><p>So the biggest problem with the show is that it is sold as &#8220;science&#8221; fiction despite being actually quite <strong>anti-science</strong>. It is an <em>insult to real science</em>. And it doesn&#8217;t even <em>attempt</em> to hide this, if we&#8217;re honest.</p><p>But then anti-intellectualism is part and parcel of consumer capitalism. We can have consumers or critical thinkers, but not both.</p><p>And that helps to convince a gullible audience to <strong>mistake magic and magical thinking for science</strong>. And that leads directly to science-as-religion, or more accurately, a <strong>cargo cult</strong><em><strong>.</strong></em></p><p>Yup, science is the <strong>gift that keeps on giving.</strong> The magical god in the sky that rains cool shit such as iPhones and AI on us&#8212;comped, of course, &#8216;cause we&#8217;re VIPs&#8212;and will soon herald the coming of the <em>tech ex machina</em> and the arrival of paradise! Why bother maturing into adults when Science with a capital S will save us from our infantile selves?</p><p>In this, <em>Star Dreck</em> and its cousin, <em>Star Bores</em>, usher us happily to our doom, <strong>smiling and waving as we fast approach the rotating knives</strong>. Look at me, everyone! I&#8217;m going to <em>paradise.</em></p><h2>What about the cultural critique?</h2><p>OK, so maybe <em>Star Dreck</em> is a bit short on scientific realism, but <strong>what about its critique of human culture and stupidity?</strong></p><p>Um, what critique?</p><p>Gene Roddenberry was a remarkable man. He managed to retain his <strong>infantile philosophy of life</strong> right up to the very end. A rather flexible philosophy as expressed by Roddenberry himself when discussing making a statement in the show in favor of &#8220;Christian&#8221; views:</p><blockquote><p>I am interested in a statement couched in dollars and cents of what this means to the Roddenberry treasury&#8230;</p></blockquote><p>Whoops. Well, it was <strong>show business</strong>, after all. Roddenberry considered himself a humanist, but he bent easily.</p><p>For example, the episode about &#8220;sun&#8221; worshippers&#8212;odd that such an advanced technological society should have such a primitive [sic] religion. Until Uhura enlightens Captain Kirk: <strong>"It's not the sun up in the sky. It's the Son of God."</strong> [&#8220;Bread and Circuses&#8221;]</p><p>Cough, cough, gag. Not &#8220;primitive&#8221; at all, then.</p><p><strong>Kirk is really into bestiality.</strong> He&#8217;ll fuck anything with a vagina (or similar orifice), it seems, and usually does. It is shocking, really, how many alien species, many of whom <strong>apparently</strong> <strong>wear only lingerie</strong>, are attracted to bombast and wooden overacting. There&#8217;s no accounting for taste, I guess.</p><p>Spock is utterly unemotional and logical, because ignoring the insights that emotion, and specifically empathy, can bring is, well, utterly logical, right? Except, of course, that <strong>Spock is not the least bit logical and even less unemotional</strong>. His &#8220;logic&#8221; is utterly specious. It is whatever drives the flimsy plot forward.</p><p>What&#8217;s more, his logic is proven worthless over and over again by the &#8220;humans&#8221; who show that the seven deadly sins are the secret to triumphing over adversaries. Fuck diplomacy. Boring! Wrath, lust, gluttony &#8230; bring it on!</p><p>Even as a teenager I regularly reacted to Spock&#8217;s &#8220;logic&#8221; with &#8220;Say what??? How the fuck did you come up with that?&#8221;</p><p>Somehow he can calculate odds to several decimal places <em>without even considering all the facts</em>. I am fairly certain that <strong>Spock is banned everywhere in Vegas</strong>.</p><p>Dashiell Hammett this is not. It&#8217;s not even Agatha Christie.</p><p>Bones? Don&#8217;t get me started. He&#8217;s a ham, not an actor! A one-joke guy. The straight man (pun intended) stuck in the middle of <strong>the Kirk-Spock homoerotic dance</strong>.</p><h2>But it gets worse and worse and worse</h2><p>Roddenberry was widely viewed as a peacenik and an idealist stuck in the Sixties zeitgeist. Bah. He was an utter hypocrite.</p><p>Ironic, then, that a general cheer went up (respectfully, of course) when he kicked the bucket and <em>Deep Space Nine</em> finally had permission to get <strong>downright naughty</strong>. If &#8220;playing doctor&#8221; and showing girls your pee-pee is your idea of &#8220;naughty&#8221;, I guess. Still infantile.</p><p>Another grave disappointment, although the pilot had one truly great idea with Sisko emotionally stuck in the moment that his wife died, returning to it over and over again. That made me cry.</p><p>But it was all downhill from there, with Frodo the Fungus, er, Ferengi, and that weird dude that can take on any shape <em>regardless of mass</em>. Um, I might be mixing up fantasies a bit.</p><p>Almost as bad as when they invented a &#8220;female&#8221; captain to <strong>prove that the franchise</strong> <strong>remained as sexist and misogynist as ever</strong>. Pay no attention to the scantily clad nymphos, er, women or the satyriasis of the most famous captain in Star-fleece. We got a woman in charge now!</p><p>Except we put her in charge and then <strong>threw her ship to the other end of the galaxy where she could safely do her womanish things without polluting the pure masturbatory joy of the rest of the &#8220;galaxy&#8221;.</strong></p><p>And the best part? Ha, ha. <strong>Captain Janeway is a man! </strong></p><p>No, for reals. She may be the female sex, <em>but she is the masculine gender</em>. You see we can&#8217;t have any soft, emotional, empathetic women in charge! Oh, hell, no. She needs to man up, to be more man than men, to be the Hillary Clinton or the Madeleine Albright of the Star-fleece. A sheep in wolves&#8217; clothing.</p><p>Even at the ass end of the galaxy, she is still prohibited from being <em>feminine.</em></p><p>Oh, and while we can never, never, never admit that Kirk and Spock were a gay couple, Janeway absolutely <em>must</em> be a lesbian. Captains can never be cocksuckers, am I right? <strong>It&#8217;s about </strong><em><strong>domination</strong></em><strong>, not submission.</strong></p><p>Sadly, she wasn&#8217;t all that great in bed. Seems she only got seven out of nine.</p><p>But that&#8217;s not even the worst part. The worst part is that <strong>the franchise is utterly pro-militarism, authoritarianism, and even totalitarianism</strong>. Frankly, this may be where the current Orwellian, one-size-fits-all, our-way-or-the-highway cultural fascism got its start.</p><p>Think I&#8217;m joking? Riddle me this then: In the world centuries hence, humans have given up on money and violence and work together like, oh, a Sixties hippie commune to benefit all of humanity, right? We are all equal, except, of course, that as usual some are a little <em>more</em> equal than others.</p><p>But hey, it&#8217;s a <strong>meritocracy</strong>, right? Hmm. Maybe Roddenberry was a secret libertarian. He clearly had some seriously repressed sexual obsessions, a well-known marker for libertarianism.</p><p>Let me set you straight once and for all.</p><p>The Enterprise, in whatever version, is not a scientific survey ship. It is a <strong>heavily-armed military vessel</strong>. The crew are not a group of colleagues of equal rank. They are a highly regimented caste system with the alpha &#8220;man&#8221; on top, and everyone expected to obey him.</p><p>And they run around blowing shit up and killing species <em>in direct violation of their &#8220;prime directive&#8221;, which I can only conclude is the 24th century equivalent of the &#8220;rule-based order&#8221;.</em></p><p>Ditto for Voyager. And <em>Deep Space Nine</em> is, frankly, a military outpost. After all, Star-fleece is a military organization run by admirals, no? And the <em>commander</em> of Deep Space Nine is an officer who commands other officers. Sir, yes sir. Make it so!</p><p>The alpha-worship would do well as an emetic in an emergency.</p><p>Where is the anarchist commune? Forget it. The world of <em>Star Trek</em> is <strong>tribal and hierarchical</strong>, just like our own. Coincidence? How are the &#8220;science/medical&#8221; staff any different from the Crips and the &#8220;engineering/security&#8221; staff any different from Bloods?</p><blockquote><p>I&#8217;m a nightmare walkin&#8217;, psychopath talkin&#8217;, king of my jungle, just a gangster stalkin&#8217; &#8230; my colors, my honor, my colors, my all.</p></blockquote><p>Hello! They are all wearing <strong>uniforms</strong>. Uniform clothing is for <strong>uniform people</strong>. You go along with the tribal shibboleths or we&#8217;ll burn your ass at the stake.</p><p><strong>Remember all those times when Picard took a vote to decide whether to risk all life in the known universe?</strong> Yeah, me neither. He is the new Adam with the authority that goeth before a fall.</p><p><em>This</em> is our glorious future? This is the best we can imagine for ourselves?</p><p>What is obvious from <em>Star Trek</em> and its inescapable clones is that <strong>humans are incapable of evolving</strong>. We just want flashier tech.</p><p>At least <em>Firefly</em> got that right: Shiny! Let&#8217;s be bad guys.</p><p>And this is no accident. <em>Star Trek</em> is a <strong>commodity</strong>, created to be sold to gullible suckers. A techno-masturbation fantasy. <strong>No one wants to watch an advanced, wise species that exposes our utter infantility and stupidity</strong><em><strong>. </strong></em>Oh, fuck, no.</p><p>When the &#8220;advanced&#8221; species does <strong>show</strong> up, they are quickly <strong>shown</strong> up by the barbaric human race. Straw men, all.</p><p>Let&#8217;s take the stupidest and most infantile of us and project them into a make-believe, magical future where the laws of physics (and of credulity) are broken at will and we will all have <strong>the shiniest toys and no responsibilities</strong>. Or accountability, of course.</p><p>Let&#8217;s also pretend that we are going to <strong>make it to the 24th century</strong><em><strong> </strong></em>without destroying ourselves and probably all life on Earth. But then a realistic show about a planet devoid of life and covered in plastic, toxins, and radioactive particles doesn&#8217;t make for much drama, honest though it may be.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IMa-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IMa-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IMa-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IMa-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IMa-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IMa-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.jpeg" width="1456" height="1541" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1541,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1950804,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IMa-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IMa-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IMa-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IMa-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa94b7fe2-0b34-43ea-9305-b75fabf2c4e5_4000x4233.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">This is the good shit.</figcaption></figure></div><p>And so, <em>Star Trek</em> and its ugly cousin, <em>Star Wars</em> are <strong>nothing more than narcotics for intellectually dishonest, emotionally stunted infants</strong>. Every bit as addictive as fentanyl, and even more destructive because they <strong>help us to turn away</strong>, to pretend that we are <em>not</em> destroying our world and ourselves along with it.</p><p>But you don&#8217;t buy that. Ha, ha. Clearly, I&#8217;m demented. Everything is going to be fine. There&#8217;s no need for you to wake up. Back to sleep now.</p><h2>Turn that shit <em>off</em></h2><p>If you want some reasonable examples of true imagination (beyond the Asimov and Butler ones already mentioned), try <em><strong>Outer Limits</strong></em> or <em><strong>Rod Serling&#8217;s Twilight Zone</strong></em>. Both are light years beyond <em>Star Dreck</em>.</p><p>Hell, <em><strong>Firefly</strong></em> beat the hell out of <em>Star Trek</em>. There was more sparkling wit, humor, and intelligence in a single episode than it all the dreary <em>Trek</em> franchise. And more respect for science, as well. And without all the fucking smug pretentiousness.</p><p>Naturally, it was canceled before the end of the first (aborted) season and they couldn&#8217;t even be arsed to show the episodes in the right order.</p><p>Or in the movies, check out <em><strong>Arrival</strong></em>, probably the greatest science fiction film of all time, hence largely ignored. Yeah, I like <em><strong>2001: A Space Odyssey</strong></em>, too, but <em>Arrival</em> beats the hell out of it. <em><strong>Moon</strong></em> is also quite good, if desperately sad.</p><p>And, of course, <em>&#1057;&#1086;&#1083;&#1103;&#1088;&#1080;&#1089;</em> (<strong>Solaris</strong>), the 1972 film, or Tartovsky&#8217;s 1979 <em><strong>Stalker</strong></em> (the book, <em><strong>Roadside Picnic</strong></em>, is even better)&#8212;another possible nominee for best sci-fi film ever.</p><p>Imagine if advanced aliens came to Earth <em>and they didn&#8217;t even recognize humans as sentient!</em> Ha, ha. Brilliant.</p><p>And while the original <em><strong>Blade Runner</strong></em>, even in its &#8220;final&#8221; form, is a kitschy mess (although well ahead of its time) and Ford can only barely eclipse Shatner in the &#8220;acting&#8221; department, the 2017 sequel, <em><strong>Blade Runner 2049</strong></em>, is an intellectual masterpiece and a deeply moving <strong>love story</strong>, although that seems to have gone over the heads of most viewers who came for the adolescent boy masturbation fantasy and bitched afterward that it was &#8220;too slow&#8221;.</p><p>I could write dozens more articles on everything just so wrong with <em>Star Trek </em>and its bastard offspring, but this will have to do for now.</p>]]></content:encoded></item><item><title><![CDATA[Tech is a suicide cult]]></title><description><![CDATA[Tech is our end-times religion. Admit it.]]></description><link>https://www.cantankerouscoder.com/p/tech-is-a-suicide-cult</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/tech-is-a-suicide-cult</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Thu, 13 Apr 2023 01:09:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2Slf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my ongoing effort to piss off pretty much everyone in the tech industry by raining on their parade &#8212; <em>our</em> parade, really, as I am also in the tech industry &#8212; I thought I&#8217;d point out a few more unpleasant truths. Go, me!</p><p>Let me begin by saying that <strong>technophobes</strong> appear to be a dying breed. Nearing extinction, really. And as the tech industry is pretty much self-selecting, we can safely assume that virtually everyone in the industry is a <strong>technophile</strong>.</p><p>Technophilia is clearly a religion. Unfortunately, there is no agreed-upon definition of religion, so we&#8217;ll have to define it first. Fortunately, I am more than up to the task.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2Slf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2Slf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2Slf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2Slf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2Slf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2Slf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.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;:2714253,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2Slf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2Slf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2Slf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2Slf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60485a90-d92e-41f5-b362-962fe0ae4eab_4024x2683.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Maybe if we wore funny clothing and makeup it would be more obvious?</figcaption></figure></div><h2>What is religion?</h2><p>For the purposes of this polemic, and defining the term <em>loosely</em> as that is how it is often used today, let us define religion thus:</p><blockquote><p>Religion is a set of beliefs held by faith&#8212;ergo without need for evidence or proof&#8212;considered by adherents not only to be <strong>true</strong>, but also to be the <strong>&#8220;one&#8221;</strong> truth.</p></blockquote><p>Of course, religions often include features of the &#8220;supernatural&#8221;, rules for ethical and moral behavior, rituals, ceremonies, fetishes, and more. Most, if not all, of these are found in technophilia.</p><p>Religious zealots of all faiths are remarkably unable or unwilling to acknowledge that their religion might just be a steaming puddle of horse piss. It is simply <em>obvious</em> that they are correct and everyone who disagrees is an idiot.</p><p>If you are foolish enough to <em>prove</em> that their beliefs are steaming horse piss, they will most often kill you. It&#8217;s the easiest way to deal with inconvenient information: kill the messenger. Humans are nothing if not lazy.</p><h2>How is technophilia a religion?</h2><p>Oh, let me count the ways!</p><p>The most obvious evidence for technophilia as a religion is that the belief that tech is good and will solve all our problems rests entirely on blind faith.</p><p>I know. You&#8217;re shocked! How can I say that?</p><p>Well, all the evidence&#8212;when we actually look at <em>all</em> the evidence&#8212;shows clearly that tech is rapidly destroying all life on Earth and any chance for future generations.</p><p>Technophiles, of course, avoid any evidence that doesn&#8217;t support their faith in tech as our lord and savior. I think they call this &#8220;cherry picking&#8221;.</p><p>Life, apparently, actually <em>is</em> a bowl of cherries.</p><p>By &#8220;tech&#8221; of course I am referring to <em>all</em> of modern technology since the industrial revolution of a few centuries ago, not just the Internet, AI, social media, or even computers.</p><p>Automobiles, aircraft, railroads, steamships, nuclear-powered submarines, telephones, radio, television, robotics, CNC machines, genetic engineering, etc.&#8212;all of it is technology. And this includes the hundreds of thousands of new chemicals we&#8217;ve created, the biological agents hidden in our biolabs, and so much more.</p><p>Yes, medicine, too.</p><h2>Whoever has ears, let them hear</h2><p>Whoa! That&#8217;s a big claim about tech. Where is my evidence to support it?</p><p>Ha, ha! Sorry, but I&#8217;m not falling for that one. I stopped falling for it years ago.</p><p>True believers <em>always</em> demand evidence to prove that their beliefs are just plain stupid. But if you make the mistake of actually providing this evidence, it will have exactly zero effect.</p><p>They will ignore it.</p><p>Of course they ignore it! The evidence has been <strong>right in front of their faces all along</strong>. You really can&#8217;t miss it, <em>unless you are missing it deliberately<strong>.</strong></em></p><p>You see this a lot with conspiracy nuts. They will state a piece of &#8220;evidence&#8221; (virtually always laughable), and then I will utterly demolish that &#8220;evidence&#8221;. And they will admit it: &#8220;OK, maybe you&#8217;re right about that one, but what about&#8230;&#8221;</p><p>And then they will go through all their absurd &#8220;evidence&#8221;&#8212;almost always &#8220;someone on the Internet said&#8221; with no proof at all, or the proof has mysteriously vanished because&#8230; &#8220;them&#8221;&#8212;and I will demolish each claim in turn. And they will actually <em>admit</em> that I&#8217;ve demolished each claim.</p><p>So when they run out of arguments, the discussion is over and they give up their conspiracy theory, right? I&#8217;ve destroyed every argument they&#8217;ve put forth, and usually presented a dozen counter arguments <em>none of which they could rebut.</em></p><p>Slam dunk!</p><p>But that is <strong>never</strong> what happens, and I went down this road dozens of times before I wised up. I&#8217;m a slow learner, I guess. What happens is this: <strong>they start all over again with their first piece of &#8220;evidence&#8221; exactly as if we hadn&#8217;t already disproved it conclusively</strong><em><strong>.</strong></em></p><p>After the second or third time around&#8212;did I mention that I&#8217;m slow?&#8212;I generally wake up and recognize the pattern.</p><p>These people are <strong>hermetically sealed</strong>. No new information is ever going to penetrate their brains because they desperately don&#8217;t want it to do so. Game over.</p><p>So I no longer provide evidence. I am not <em>arguing</em> here. I don&#8217;t expect to convince <em>even one single person</em> that what I&#8217;m saying is true. I am just saying it because <strong>someone needs to say it</strong>.</p><p>Arguments require <strong>adults</strong>, and none remain.</p><p>Maybe if some intelligent alien species comes to Earth someday they will discover that not every human was a blind, blithering idiot. Hey, a boy can dream.</p><h2>The truth is out there</h2><p>That technology is leading directly and ever more rapidly to our doom is so obvious and inescapable that the technophiles must be exhausted by the non-stop energy loss they incur trying to block it all out.</p><p>The oceans are warming islands of plastic and the reefs are rapidly dying off. The fisheries are nearly barren. The lands are more and more desertified, clean water is becoming scarce, toxic chemicals are everywhere in the environment&#8212;including in our bodies.</p><p>Oh, look! Most of the mammals and even more of the insects have disappeared! Did they find a better planet? I hope so.</p><p>We&#8217;ve weaponized every bit of our technology&#8212;chemical, biological, genetic, nuclear, etc. and many of us <em>can&#8217;t wait</em> to use these horrific weapons. Everyone loves a dystopia, right? Tank girl, FTW!</p><p>And the concomitant destruction of human intelligence&#8212;tech makes us stupider, not smarter&#8212;and maturity&#8212;tech infantilizes us&#8212;are ensuring that their <strong>is no escape from our fate</strong>.</p><p>It doesn&#8217;t take five minutes to find more than enough evidence to support my claim that tech <em>in the hands of infants</em>&#8212;which is all of us&#8212;is killing us. Not in some distant, may-never-come future, but <em>right fucking now</em>.</p><p>We are dying <strong>right now.</strong></p><h2>It is a suicide cult</h2><p>A cult is a group of people who surrender their individual responsibility to complete obedience to a leader or ideology.</p><p>This is proof positive of infantilism. The desire to surrender responsibility for our own actions and to defer to a mommy or daddy is a desire to <strong>return to infancy</strong>.</p><p>Tech <em>is</em> the mommy or daddy. Or both. We look to it both to comfort us and to save us from ourselves.</p><p>Whenever I point to the obvious&#8212;that we are committing autogenocide as a species&#8212;the immediate response I get <em>without fail</em> is that <strong>more tech will solve it</strong>. Even though <strong>more tech has never done anything but</strong> <strong>make it much, much worse</strong><em><strong>.</strong></em></p><p>What is that if not a return to infancy and blind faith that mommy and daddy will make it all OK?</p><p>How utterly pathetic! If an intelligent alien species ever really does show up, I&#8217;m going to die of embarrassment on the spot. How could we even begin to explain how badly we&#8217;ve shit the bed? (Thought experiment: try explaining it.)</p><p>Everyone in tech sees this. Everyone knows it. But we <em>love</em> tech and we sure as shit don&#8217;t want to grow the fuck up and be responsible adults, so we clench our eyes shut and cover our ears and shout, &#8220;I can&#8217;t hear you!&#8221; And we hope that the inevitable can be postponed just a little bit longer.</p><p>We <em>know</em> we&#8217;re fucked, but we&#8217;re not going to do a damn thing to avoid it. We&#8217;ll fiddle instead as the Earth burns. Hell, we&#8217;ll probably watch and <em>applaud.</em></p><p>If that&#8217;s not a suicide cult, my friends&#8212;if I have any friends left at this point&#8212;then what is it?</p><p></p><p>OK, I left out any discussion of the other proofs that technophilia is a religion. I will leave these as an exercise for the reader, as the one proof above is already sufficient. </p><p>But anyone willing to take a look can find ample evidence of fetishism, ritual, ceremony, mob &#8220;justice&#8221;, a belief in the supernatural (see <em>Star Trek, Star Wars,</em> and every other egregious offense to science), etc. There is even a &#8220;tech ethics&#8221;, at least in the West, and severe punishment for all transgressors.</p><p>And don&#8217;t get me started on this absurd belief in &#8220;progress&#8221;. If this is progress, then what does regress look like?</p><p></p>]]></content:encoded></item><item><title><![CDATA[The Tao of just-in-time coding]]></title><description><![CDATA[The uncarved block... of code]]></description><link>https://www.cantankerouscoder.com/p/the-tao-of-just-in-time-coding</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/the-tao-of-just-in-time-coding</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Wed, 05 Apr 2023 20:44:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3l-l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I have long advocated for <strong>just-in-time learning</strong> as the most efficient way to learn. And ever since Guillermo Rauch admonished me to &#8220;never write a line of code before you have to&#8221;, I have been promoting <strong>just-in-time coding</strong> as well.</p><p>But it took a discussion with the inestimable <a href="https://fauve.substack.com/">Col Perks</a> on the topic of Heidegger and mental models to make me realize that the entire &#8220;just-in-time&#8221; approach has been perfectly elucidated for at least 2500 years.</p><p>And on some subconscious level I&#8217;ve known this all along, but it wasn&#8217;t until just now that I made the conscious connection.</p><h2>Pu: the uncarved block</h2><p>One of the more important ideas enumerated in the book, <em>Tao Te Ching</em>&#8212;meaning <em>The Classic on the Way and its Power or Virtue</em> and often now spelled phonetically as <em>Dao De Jing</em>&#8212;is that of <em>Pu</em>, the &#8220;unhewn wood&#8221;, sometimes mistranslated as &#8220;simplicity&#8221;.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3l-l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3l-l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3l-l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3l-l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3l-l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3l-l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg" width="1001" height="1500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1500,&quot;width&quot;:1001,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79063,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3l-l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3l-l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3l-l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3l-l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed75426f-3b6c-4ca7-bf8b-e0a60eb010ab_1001x1500.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The uncarved block?</figcaption></figure></div><p>It has nothing to do with simplicity.</p><p>What it signifies is <strong>potential</strong>. The idea, itself, is indeed simple: objects exist as <em>potential</em> before they are reified into <em>concrete</em> objects.</p><p>If you are irredeemably Western, perhaps you can conceptualize Potential as the mind of God in which He [sic] creates objects in His [sic] <strong>image</strong><em><strong>.</strong></em><strong> </strong>Then reifies them&#8212;makes them real.</p><p>And the lesson that Pu bestows upon us is that once the potential precipitates into the concrete object, <em>there is no going back.</em> Once the uncarved, unhewn block of wood becomes a bowl or a spoon or a bust of Elon Musk, it&#8217;s all over. The die is cast.</p><p>And so the <em>Tao Te Ching</em> prompts us to remain the uncarved block&#8212;as potential&#8212;for as long as possible: <strong>do not prematurely reify thyself</strong>.</p><p>This is, now that I think of the two side by side, precisely the message behind just-in-time coding, or <em>never writing a line of code before we have to.</em></p><p><strong>Before</strong> we write the code, it remains potential, and we can quickly pivot to a very different object/outcome.</p><p>But <strong>after</strong> we have written the code, that potential has precipitated into reality, where it cannot readily be changed.</p><p>Not that it can&#8217;t be modified, but if we later decide that we should have taken another path, reified a different object, then we probably are best off simply discarding our code&#8212;and our effort&#8212;and starting over.</p><h2>You aren&#8217;t going to need it</h2><p>Coders&#8212;who are mostly mewling infants who never saw an acronym they couldn&#8217;t immediately embrace, adopt, and overuse&#8212;have rejiggered &#8220;Pu&#8221; to &#8220;YAGNI&#8221;: You aren&#8217;t gonna need it.</p><p>&#8220;Ain&#8217;t&#8221; if you are being arch. And when ain&#8217;t they?</p><p>But this is nothing more than a restatement of the ancient principle of Pu. The imagined benefit of YAGNI, despite wasting three extra characters, is that we can pretend that <strong>we</strong> just made it up. Ha, ha! Why give credit to the ancient Chinese when we can just hoard it all to ourselves? I say poo to that.</p><p>Sadly, and in keeping with the current zeitgeist, YAGNI is often used in a sarcastic or snarky manner. But there is nothing snarky about Pu, and the ancient Chinese don&#8217;t give a rat&#8217;s ass about your infantile gibbering.</p><h2>Remain in Potential until the last moment</h2><p>OK, for all you Star Trek fanboys and fangirls out there, think of it this way: remain cloaked as long as you can, and then de-cloak only briefly to fire the damn weapon.</p><p>My partner is a business analyst (and no Trekker) and she often talks about the &#8220;<strong>problem space</strong>&#8221; vs. the &#8220;<strong>solution space</strong>&#8221; and how so many people in the tech industry are in an awful hurry to leap to the solution space.</p><p>Ditto for programmers who get tired of &#8220;thinking&#8221; after about fifteen seconds and jump straight to writing the code.</p><p>And I realized that it&#8217;s all just <em>Pu</em> again. The &#8220;problem space&#8221; is <em>Pu.</em> It is the space in which potential is preserved. Any solution is possible.</p><p>The &#8220;solution space&#8221; is where the reification happens: the infinite possibilities of Potential are reified into a single Actual: the place where you end up with a wooden bust of Elon Musk. Damn.</p><p>In physics, I think they call this the <strong>collapse of the wave function.</strong><em><strong> </strong></em>From a world of varied probabilities to a single answer with probability 1 and everything else now probability 0. And this was before Heisenberg started dealing blue meth and knocking on doors.</p><p>My partner&#8217;s frustration is the same as mine (and Guillermo&#8217;s): why the hell are we rushing to solutions <em>before we have to?</em> </p><p><strong>Be the uncarved block</strong>, the unhewn wood. Stick to the potential until you absolutely must embrace the actual. Code <em>and learn</em> <strong>just in time</strong>. More often than not, you will never get there. And so you will avoid a lot of wasted effort.</p><p>You aren&#8217;t going to need it.</p>]]></content:encoded></item><item><title><![CDATA[You are not going to Mars]]></title><description><![CDATA[No, you really aren't]]></description><link>https://www.cantankerouscoder.com/p/you-are-not-going-to-mars</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/you-are-not-going-to-mars</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Tue, 04 Apr 2023 02:55:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_2KJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It astonishes me&#8212;but then I&#8217;m beginning to suspect that I am easily astonished&#8212;how many young people think that they are going to go to Mars, or even live there.</p><p>Many are probably just deluded: living in a fantasy world. But what explains the others? I can only presume that the problem is the &#8220;new math&#8221;. People just can&#8217;t do &#8216;rithmetic anymore.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_2KJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_2KJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_2KJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_2KJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_2KJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_2KJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:740919,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_2KJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_2KJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_2KJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_2KJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2256a62-5047-4cbe-8c43-16a49b11888f_3840x2160.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Doing the math(s)</h2><p>It&#8217;s not really mathematics. It&#8217;s just arithmetic.</p><p>There are currently a little over eight <em>billion</em> humans on Earth. That&#8217;s a lot. Too many.</p><p>So let&#8217;s assume there&#8217;s a big die off. Maybe a few billion, and only five billion survive. Wow. That&#8217;s a lot of dead bodies. Where will we put them all?</p><p>(Note how, like you, dear reader, I immediately assumed that I would be among the survivors. It is this optimism that keeps us from doing anything to avoid catastrophe&#8212;we assume that it will happen to someone else. So who cares?)</p><p>Most humans have no concept of numbers. We can maybe get to seven. On a good day. And a billion is a <em>very big number</em>, although still not big enough for the &#252;ber-parasites who want everything for themselves and nothing for anyone else (cf. &#8220;vile maxim&#8221;). No, they need <em>hundreds</em> of billions.</p><p>Fuck, why not <em>trillions?</em> Let&#8217;s go for it!</p><p>So let&#8217;s put it in perspective, as they say.</p><p>Suppose your job is to count to a billion. You count seconds. And you count eight hours a day, five days a week, fifty weeks of the year. Boring job, I know, but somebody&#8217;s gotta do it.</p><p>Let&#8217;s see. Arithmetic. So, 3600 seconds per hour, 40 hours per week is 40 &#215; 3600 = 144,000 seconds of counting per work week. How long until we reach, say, a <em>million?</em></p><p>It will take you 1,000,000 &#247; 144,000 &#8776; 6.94 weeks. Easy peasy, no? So you&#8217;ll reach a million in just under seven weeks of work. Whew!</p><p>Still with me, or did all those numbers scare you off? Now&#8230; how long to reach a <strong>billion</strong>?</p><p>Again, I am astonished by how few people can answer this simple question at all, let alone without having to think hard about it. We should be able to do this in our sleep as we <em>already know the number for a million</em>: 6.944.</p><p>A billion is a thousand millions, so it would take a <em>thousand times longer</em> than it took to count to a million. 1000 &#215; 6.944 = 6,944. See how we moved the decimal point three places to the left? Is any of this coming back to you? No?</p><p>What a waste of education.</p><p>Now, 6944 &#247; 52 weeks/year (approximately) is ~ 134.</p><p>Years.</p><p>If you count seconds for forty hours per week, then you&#8217;ll reach a million in under <strong>two months</strong>. But to count to a <em>billion</em> would take you <strong>two lifetimes</strong><em>. </em>And a million was already a very big number.</p><p>Is this starting to sink in?</p><h2>About those people</h2><p>So we&#8217;re down to five billion humans on Earth, thanks to some big die-offs (coming soon to a planet near you). But we don&#8217;t care because <em>we&#8217;re going to live on Mars!</em></p><p>So what are the odds? Let&#8217;s see.</p><p>If we&#8217;re really lucky, then in the next few decades we <em>might</em> manage to get a few dozen people to Mars after a whole bunch have died trying. Or died on Mars. Or died trying to get back from Mars.</p><p>And then it will take decades more to create a livable habitat on Mars, if that is even possible (don&#8217;t bet on it). And how many humans will that habitat support say, half a century from now, if we get there at all? (And how old will you be? Too fuckin&#8217; old.)</p><p>A few hundred? A thousand? Ten thousand?</p><p>Let&#8217;s be generous and take that ten thousand number. So what percentage is that of the five billion remaining humans on Earth? Oh, for fuck&#8217;s sake! Now we have to do <em>percentages?</em> Will this arithmetic never end?</p><p>OK, fine, I&#8217;ll do it for you. 10,000 &#247; 5,000,000,000 &#215; 100 = 0.0002%.</p><p>Ooo. Wait. That can&#8217;t be right can it?</p><p><strong>Oh, yes it can</strong>. It is. That means for a population of five billion on Earth, putting ten <em>thousand </em>on Mars (seriously, no fucking way that&#8217;s ever happening) means that precisely one person in <em>half a million</em> (500,000) gets to go to Mars, with probably less than a 50/50 chance of surviving the trip and the first year on the planet.</p><p>The other 499,999 get to die a slow, miserable death here in the cesspool we&#8217;ve made of our once-pristine planet. This is the group you will be in.</p><p><strong>Two people out of every </strong><em><strong>million</strong></em>. Those odds sound familiar. Oh, right. That&#8217;s not far from the odds that you&#8217;re going to win the Megaturds lottery and live richly ever after. In short: zero. I hate to break it to you, but we are <em>never</em> going to win that big lottery. Someone might. <em>But not us.</em></p><p>We&#8217;re not going to Mars, either.</p><h2>Star Trek is a FANTASY</h2><p>Star Trek&#8212;and its kissing cousin, Star Wars&#8212;is a <strong>fantasy</strong>. <em>It is not even science fiction.</em> I know this comes as a terrible shock to, well, everyone, but stop wailing &#8220;no, no, no!&#8221; for a moment and just think about it.</p><p>The masturbatory dreams of emotionally-retarded physicists aside, there is no&#8212;zero&#8212;scientific or rational basis for any of that shit. There simply isn&#8217;t. Just try explaining the transporter, for example (at least Star Wars avoided that goofiness).</p><p>Well, it breaks the body down into some kind of instruction set (does it hurt?), sends that to a remote location <em>where there is no receiver</em> and then constructs a new copy of the person from, hmm, available materials, I guess. Which doesn&#8217;t account for why they can &#8220;beam&#8221; people into the vacuum of space. Fantastic, right?</p><p>Exactly. Fantasy-ic.</p><p>Or how they jump start the life functions on the other end. Or how it works without a receiver. Or, oh, <em>a million other things. </em>At least <em>Altered Carbon</em> got this part right!</p><p>But that&#8217;s only the half of it. Not even half. If we can store people as instruction sets and then create a new copy of them anywhere we want, then why can&#8217;t we create two, five, ten, a <em>thousand</em> copies? (<em>Altered Carbon</em> got this right, too.)</p><p>Oh, they&#8217;ve explored this in the show, of course, but then promptly forgot about it when it no longer served the plot.</p><p>For that matter, why is it that anyone ever <em>dies</em> in Star Trek? Can&#8217;t you just make a new copy from the back up in the transporter? What? They never thought of that?</p><p>Well, again, they did. But only when it served the plot line.</p><p>And why is it that their &#8220;replicator&#8221; in the galley&#8212;a device that can create not only organic compounds suitable for consumption by humans, but also plates, utensils, etc.&#8212;is a worthless piece of shit when they desperately need new &#8220;dilithium crystals&#8221;? Or any other item the plot requires them to do without temporarily?</p><p>For that matter (heh), why can&#8217;t it create a new heart, or kidney, or brain?</p><p>Star Trek and Star Wars are <strong>insults</strong><em><strong> </strong></em>to science and rationality. Insults! Unless, of course, we recognize them as <em>fantasy</em>&#8212;wish-fulfilling flights of fancy with <em>zero</em> relationship to the <strong>real world</strong> and the laws of physics. Or common sense.</p><h2>Please remove your head from your rectum</h2><p>But people don&#8217;t see them as fantasy. They really believe, although they&#8217;ll often deny it, that all this schlock, and boy is it schlock, <strong>could be real</strong>. <em>Galaxy Quest</em> was a <em>documentary </em>before it descends into pathetic, albeit hilarious, wish-fulfillment<em>.</em></p><p>That&#8217;s bad enough, but the titans of tech are now manipulating this disease to get large numbers of humans to <strong>look away</strong> as they complete their rape and pillage of  Earth. Yes, the entire planet. Well, technically <em>our</em> rape and pillage after which we give it all to the parasite class because they can&#8217;t be arsed to get their own hands dirty.</p><p>And we do it for them joyfully! <em>Thank you, sir! May I have another?</em></p><p>By the time we <em>humans</em> wake up, it will be too late. The &#252;ber-parasites will be &#8220;safe&#8221; (they think) in their walled estates and on their private islands, guarded by robots and drones (humans would overthrow them first chance). And they&#8217;ll be laughing at us. At the <strong>rubes</strong>.</p><p>&#8220;Fancy thinking they were going to live on Mars!&#8221;, they&#8217;ll chuckle. &#8220;Idiots! <em>Do the math.</em>&#8221;</p><p>We&#8217;re here on Earth and here will will remain, for better or worse. This is our lifeboat in the vast and pitiless emptiness of space. We will either make things work here, or we will be swept aside so that some other species can have a go.</p><p>Tech is not going to save us. <strong>Tech is what is killing us.</strong><em><strong> </strong></em>AI will kill us. Robotics will kill us, too. And gene manipulation, and nuclear power, and biological weapons research, and so on.</p><p>All because we are stupid infants who can&#8217;t be trusted with these weapons of mass destruction.</p><p>As a red-blooded &#8216;murikin male, I <em>love</em> tech. But I am not stupid.</p><p>Every generation has had its doomsayers, but only recently has our technology evolved to make our planet-wide autogenocide not only possible, but <strong>certain</strong> unless we change course <em>right fucking now</em>.</p><p><em>Not</em> next week, next month, next year , next generation. Right fucking now.</p><p>Every day that we dither thinking &#8220;just a little more tech&#8230; just a little more tech&#8230;&#8221; the door to a future&#8212;any future&#8212;closes that much more. Soon it will close completely and forever, and nothing we do will save us.</p><p>How embarrassing! Not even an asteroid. Just our own stupidity and selfishness.</p><p>Tech <em>could</em> be a tool used to make life better for every living thing on Earth. But that would require wisdom and maturity&#8212;two qualities virtually non-existent among homo sapiens sapiens [sic].</p><p>We are not going to Mars. Not now. Not ever.</p><p>Now put your toys away and help clean up this mess.</p><p></p>]]></content:encoded></item><item><title><![CDATA[AI will not kill us]]></title><description><![CDATA[We will]]></description><link>https://www.cantankerouscoder.com/p/ai-will-not-kill-us</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/ai-will-not-kill-us</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Sun, 02 Apr 2023 05:56:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9GwD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I am seeing more and more in the media these days about the &#8220;dangers&#8221; of AI or AGI (artificial intelligence or artificial general intelligence). What if it &#8220;gets out of control&#8221;? What if it &#8220;decides that it doesn&#8217;t need humans&#8221;? References to Skynet abound.</p><p>It astonishes me (I am getting so very tired of being astonished) how utterly <em>stupid</em> most of us are. AI is going to kill us? I&#8217;m rolling on the floor laughing. You can&#8217;t be serious.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.cantankerouscoder.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Cantankerous Coder! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>No matter what anyone tells you, I will clue you in on the truth. AI can only do exactly what we empower it to do. It can&#8217;t kill us. We are its masters.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9GwD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9GwD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9GwD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9GwD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9GwD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9GwD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.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;:1368351,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9GwD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9GwD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9GwD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9GwD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe9526b-d254-4e02-879d-45f156857d2a_4896x3264.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let me put this as simply as I can as it seems a bit difficult to grasp for most people.</p><p>Suppose there is a switch in front of us. I built this switch and if I throw the switch, it will blow up the world.</p><p>I throw the switch. The world ends.</p><p>Now&#8212;and pay attention here&#8212;who or what blew up the world? The <em>switch?</em> Or <strong>me?</strong></p><h2>Getting it through our thick skulls</h2><p>OK, so if your answer to the above was that the <em>switch</em> destroyed the world, then please go home, turn off your Internet, and just wait for the end. You are unreachable. Your level of stupid is <strong>terminal</strong>.</p><p>But I&#8217;m guessing that you correctly sussed that it was <em>me</em> who did the dirty deed. The switch was only the <strong>instrument</strong> of that deed, <em>not the doer</em>.</p><p>But&#8230; but&#8230; but&#8230; I can hear you saying already, what if the AI can <em>think for itself?</em></p><p>Excellent. We can clear that up right now. AI is never, ever going to &#8220;think for itself&#8221;. Get over this nonsense. AI is a <em>machine</em>, and machines can only do what we create them to do.</p><p>So suppose I built the switch so it was a kind of &#8220;Schr&#246;dinger Switch&#8221;. It would sit there doing nothing, and then <em>maybe</em> at some unpredictable moment, it would <em>throw itself</em> (hah) and end the world. But I walk away not knowing if it will ever flip.</p><p><strong>Now</strong> did the switch kill us all? Or did I?</p><p>I hope you&#8217;re smart enough to say that I did. The end of the world is <em>still</em> my fault. I, not the switch, am culpable.</p><p>Now my &#8220;Schr&#246;dinger Switch&#8221; might <em>feel</em> like it is making its own decisions, and it is certainly making a hands-off decision. But it can make that decision <em>only because that&#8217;s what I built it to do.</em></p><p>Are you starting to catch on? Any lights going on upstairs?</p><h2>We will kill ourselves</h2><p>AI (or AGI, if you prefer) may well be the <em>instrument</em> by which we destroy ourselves. That is if we don&#8217;t do it with greenhouse gases, nuclear weapons, plastics, toxic chemicals, deforestation, bioengineered weapons, gene manipulation stupidity, killer robots, or any of a dozen other potentially world-ending technologies.</p><p>What should be clear to anyone paying attention&#8212;should have been clear for <em>decades</em> at least&#8212;is that we <strong>are</strong> going to kill ourselves, and quite possibly all life on Earth. We&#8217;ve been accelerating&#8212;<em>accelerating</em>&#8212;toward that apocalypse my entire life. I can&#8217;t tell you how surprised I am that it hasn&#8217;t happened already.</p><p>But we are asking the wrong questions and we are looking in entirely the wrong direction. On purpose, I suspect. And we&#8217;ve been doing this since, I dunno, Adam? We have an incredible (and tragic) blind spot: we refuse to see our own culpability.</p><p>All of us look for the source of our troubles <em>outside ourselves</em>. The problem must be <strong>out there</strong>. No way it could be &#8220;in here&#8221; because that would mean that I have to <strong>grow the fuck up and become an adult</strong><em><strong>.</strong></em></p><p>And that, as we all know, is a fate worse than death. Which is why we are collectively choosing death. You can look this truth in the eye like an adult, or you can retreat into your inner infant and pretend you can&#8217;t see it. But nature doesn&#8217;t give a fuck. Continue down this path and we all die. No mercy. No second chances.</p><h2>Ask the right questions, dipshits!</h2><p>A friend sent me a link to a presentation on the &#8220;dangers of AI&#8221; in which a bunch of infants sat around wringing their hands and bleating &#8220;What can we do?&#8221;</p><p>I&#8217;ll save you the suspense: there is almost certainly <strong>nothing at all</strong> we can do. All of our history&#8212;<em>all of it</em>&#8212;shows that we <strong>never</strong> learn from our mistakes. We never pull back. We secretly believe that someone&#8212;maybe Mommy or Daddy&#8212;will pull our nuts out of the fire before they singe.</p><p>But that has never happened. We have consistently, virtually without exception, looked down that path, seen what was coming, and then rushed <strong>toward</strong> it rather than away from it.</p><p>Apparently, we have a universal death wish.</p><h2>Hand wringing and gnashing of teeth</h2><p>So I&#8217;m watching this presentation and they put up this statement (and then immediately below it show that it is false and deceptive). This is the statement:</p><blockquote><p>50% of AI researchers believe there&#8217;s a 10% or greater chance that humans go extinct <strong>from our inability to control AI</strong></p></blockquote><p>Ha, ha. You can&#8217;t make this shit up, as I say so frequently. We&#8217;re so far ahead of fiction we might as well just give up on it. Wave to it. Bye, fiction!</p><p>Do you see the problem? The problem is that <em>they</em> (these <em>experts</em>) think that the problem is&#8230; wait for it&#8230; <strong>AI.</strong></p><p>Here these people are&#8212;the very people who are building the &#8220;switch&#8221; that ends the world&#8212;and they are trying to figure out what&#8217;s wrong with the <em>switch</em>. How do we keep the <strong>switch</strong> from killing us?</p><p>But the switch <strong>isn&#8217;t</strong><em><strong> </strong></em>going to kill us. <strong>We are.</strong></p><p>What the fuck is wrong with these people<em>?</em> If AI is going to kill us all, then <em>why are you building it?</em> Why did you build nuclear bombs? Bioweapons? A capitalist consumer economy based on the utter destruction of the planet&#8217;s resources&#8212;the same ones we need to survive?</p><p>Why the fuck are you building <strong>anything</strong> with the potential to destroy all life on Earth <em>when you know that we are all utter infants and incapable of controlling our urges, including our most savage and brutal ones?</em></p><p>What planet are these people from?</p><h2>Walt Kelly was a prophet</h2><p>Pogo famously told us: <em>We have met the enemy and he is us.</em></p><p>That was years before I was born, and I&#8217;m practically Methuselah. But if we&#8217;re honest with ourselves (we won&#8217;t be), we&#8217;ve known this far, far longer. William Golding captured it perfectly in <em>Lord of the Flies</em>:</p><blockquote><p>Fancy thinking the Beast was something you could hunt and kill! You knew, didn&#8217;t you? I&#8217;m part of you? Close, close, close! I&#8217;m the reason why it&#8217;s no go? Why things are what they are?</p></blockquote><p>I read that in high school and it scared the bejesus out of me and it was twenty years old then. That scene changed my life. Sadly, no one else seems to have been paying attention in class.</p><p>Will AI be used to destroy us all? Maybe, but only if the idiots can get there first. My money is still on nuclear war (if you thought that had gone away, you&#8217;re really not paying attention) and then on climate change, if we somehow escape the inferno.</p><p>But <strong>one of them will</strong>. There is no doubt of that. Because <strong>we are infants who refuse to become adults</strong><em><strong>. </strong></em>And only adults can handle the extremely powerful technologies we&#8217;ve invented without getting themselves killed.</p><p>If you want to change that&#8212;I sure do&#8212;then stop worrying about bombs or greenhouse gases or killer robots or, yes, AI and start figuring out how to get <strong>humans</strong> to grow the fuck up and act accountably.</p><p><strong>Fix the humans</strong>. It&#8217;s our only chance.</p><p>And the only way to do that is to become an adult yourself. You cannot fake it. You have to <strong>do</strong> it. Walk the walk, as they say.</p><p>It is almost certainly too late. Maybe you just want to play with your toys a little more before the game is over. That would be sad, but it seems to be the overwhelmingly popular choice. Let Mommy and Daddy fix it.</p><p>But if we are to have any hope at all, we need to move the focus off of the &#8220;toys&#8221; and back onto the &#8220;boys&#8221;.</p><p>Don&#8217;t let people tell you that you just <strong>don&#8217;t understand AI</strong>. It does not matter. The people who think they understand AI are the very people working assiduously to destroy all life on Earth&#8212;and they even know it! They openly admit it.</p><p>To save ourselves it is not AI or any other technology that you need to understand. That&#8217;s just a diversion. It&#8217;s the magician&#8217;s other hand distracting you while she steals your wallet. To save ourselves it is <strong>ourselves</strong><em><strong> </strong></em>that we need to see and understand. And fix.</p><p>There are no answers &#8220;out there&#8221;. The answers are all &#8220;in here&#8221;. After all, if <strong>you</strong> can&#8217;t grow up and behave, then what chance is there that anyone else will?</p><p></p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.cantankerouscoder.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Cantankerous Coder! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Craft code FTW]]></title><description><![CDATA[How I'm developing for the Web these days]]></description><link>https://www.cantankerouscoder.com/p/craft-code-ftw</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/craft-code-ftw</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Fri, 31 Mar 2023 00:50:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!v9AI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I figured it might be nice to take a break from the doom and gloom to talk about something positive for a change, such as how I&#8217;m singlehandedly reinventing the Internet!</p><p>Ha. If only. But I have been refining my coding process and I&#8217;m very happy with how far I&#8217;ve gotten with it. If you&#8217;re here for the doom and gloom, don&#8217;t worry. It will be back shortly.</p><h2>No dependencies</h2><p>Perhaps the number one goal of my &#8220;craft code&#8221; efforts is to reduce or eliminate the use of dependencies, at least in the shipped code.</p><p>I&#8217;ve been advocating for reducing dependencies in web applications going way back more than a decade to when I was running 12-week web development &#8220;boot camps&#8221; for General Assembly in London, L.A., and Hong Kong.</p><p>Back in those days it was Ruby on Rails, although by Hong Kong I&#8217;d largely abandoned it for JS frameworks (Ember, Angular, Meteor). But it was during my first class in London that I discovered a troubling tendency among my students.</p><p>In short: they never met a &#8220;gem&#8221; they didn&#8217;t like. They would add gems (small dependencies) for <em>everything and anything</em>. I remember one gem in particular that did one thing: it added an attribute to links. And I remember saying to the student, &#8220;Seriously? You couldn&#8217;t just add that attribute yourself when you add the link?&#8221;</p><p>(Answer: But why should I if the gem will do it for me? This student went far in programming, I&#8217;m guessing.)</p><p>In short, they were undeterred. Why do anything if you can get a dependency to do it for you? Those folks, if they&#8217;re still coding, must just <em>love</em> the new AI/LLM tools.</p><p>Me? I like to code.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v9AI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v9AI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg 424w, https://substackcdn.com/image/fetch/$s_!v9AI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg 848w, https://substackcdn.com/image/fetch/$s_!v9AI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!v9AI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v9AI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg" width="1456" height="972" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:972,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:428900,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!v9AI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg 424w, https://substackcdn.com/image/fetch/$s_!v9AI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg 848w, https://substackcdn.com/image/fetch/$s_!v9AI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!v9AI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaacc3f3-6b74-4cf2-80ad-ba777778e37e_2560x1709.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Pure vanilla</h2><p>For some time now I&#8217;ve been experimenting with a &#8220;back to vanilla&#8221; approach. I like having static types (and inferencing), so until the TC-39 committee finally get off their asses and add a decent (optional) static type system to JavaScript, I&#8217;ll probably stick with TypeScript. But it compiles to vanilla JS, so no problem there.</p><p>As long as I write the TypeScript, it&#8217;s effectively my JavaScript. A direct mapping. I heard today about a way to use JS and still get type checking using a bit of TS and JS-Doc. Hmm. Might try that, but can&#8217;t we just add a similar (but better) system to JS itself?</p><p>I have never liked any of the UI component libraries, <em>especially</em> <a href="https://www.cantankerouscoder.com/p/mui-is-an-atrocity">MUI</a>. While I used Sass or LESS or Stylus (and then PostCSS) back in the day, as CSS improved I found that I needed them less and less (pun intended). CSS properties made that final. And now with <code>@supports</code>, <code>@layer</code>, and more, there is no going back.</p><p>I&#8217;ve been a proponent of semantic HTML since forever. The late Nineties to be exact. I was riding the XHTML train until WHAT-WG derailed it with HTML5, the bastards. But I have always written the most semantically-correct, accessible, and usable code I could manage. AAA, baby!</p><p>So those&#8212;HTML, CSS, and JS&#8212;were no problem. But one thing that working in React, Svelte, SolidJS, etc. has done is to sell me on the <strong>component style</strong> of developing.</p><p>I did look into using the TypeScript compiler and JSX to get the benefits of components without having to use a front-end library, but in the end I realized that I was just rewriting Solid, so why bother?</p><h2>Enter the Titan</h2><p>A year or so ago, I started testing out some of the newer frameworks to see if there was anything I liked: Qwik, Marko, Stencil, Lit, and others. I&#8217;d already built sites in Svelte and SolidJS and yes, I&#8217;ve tried 11ty and didn&#8217;t really care for it. I don&#8217;t even like Markdown that much, although I&#8217;ll use it where it makes sense.</p><p>But one framework caught my eye. Unlike Qwik, it didn&#8217;t pollute my code with tons of gibberish. And unlike many others, it didn&#8217;t force me to choose <strong>the one true way</strong>. That framework was <a href="https://astro.build/">Astro</a> with its &#8220;islands&#8221; architecture.</p><p>At this point I had largely given up on pure vanilla JS. Too painful, I thought.</p><p>So I built a site for my partner in Astro and I used islands of SolidJS for the forms. It was a very simple site: JAMStack served from S3, a couple of Lambdas to handle the forms, tied to SES for the contact form and MailerLite for the newsletter sign up. A bit of API Gateway and Route 53 and we were good to go.</p><p><strong>But that Solid kept bugging me</strong>. Shouldn&#8217;t we be able to make a form using only Web APIs at this point? So I did a bit of experimenting and discovered that I could get the DOM to do the form validation for me, and I could easily intercept it to provide my own validation messages if I wanted to.</p><p>Wow. Eight years of mostly React had really dulled my understanding of the fundamentals of the user agent. How embarrassing.</p><p>And what did I need separate state for? The form told me the initial value, if any, and the current value, so I could easily determine which fields were dirty and which were not. CSS alone hides and shows error messages.</p><p>I wrote a simple JS script (loaded via a script tag using Astro) to handle validation and submission, and dropped the Solid completely. Presto! Zero front-end dependencies. In short, all the code that ships is <em>my</em> code.</p><h2>Eliminating dependencies one by one</h2><p>Back in the day, I was a big fan of <a href="https://ramdajs.com/">Ramda</a>. It was the first dependency I added to my React sites after React. But then JS kept improving, adding more and more methods. Unless I needed lenses or transducers, I could probably get by with plain JS.</p><p>And I never used lenses or, heave forbid, transducers because hello! Other devs? My coworkers would freak the fuck out. One reason I prefer solo projects: the only limitation is <em>me</em>.</p><p>I do like composition, but it was no problem to write simple wrappers, curried, for the built-in methods such as <code>map</code>, <code>reduce</code>, <code>filter</code>, <code>find</code>, and <code>sort</code>. And I could easily add a <code>pipe</code> or <code>compose</code> function.</p><p>So I wrote my own tiny utilities library leveraging the JS methods where possible, but in a fully composable, pure FP way. Now I just copy in utility functions as I need them. It&#8217;s surprising how rarely I do.</p><p>Here&#8217;s a simple example. I&#8217;m sure it can be improved, but that&#8217;s the fun part. Over time, these will just get better and better.</p><pre><code><strong>export type CurriedPick&lt;T&gt; = (o: Partial&lt;T&gt;) =&gt; Partial&lt;T&gt;

export default function pick&lt;K extends keyof T, T&gt;(
  keys: Array&lt;K&gt;,
  obj?: Partial&lt;T&gt;,
): Partial&lt;T&gt; | CurriedPick&lt;T&gt; {
  const curried = function(o: Partial&lt;T&gt;) {
    return keys.reduce((out, key) =&gt; ({
      ...out,
      ...(Object.hasOwn(o, key) ? { [key]: o[key] } : {}),
    }), {})
  }

  return obj ? curried(obj) : curried
}</strong></code></pre><p>[I plan to abandon Substack soon and one of the reasons is <em>no syntax highlighting</em>. WTF, Substack?]</p><p>So no more Ramda, although they may be dead anyway. They still haven&#8217;t released version 1.0, and it has been <em>many</em> years now.</p><p>But what about React (or Solid) and re-rendering?</p><p>I find that most of the interactivity (read: behavior) on my sites is either form validation/submission (already solved), or UI interaction such as accordions, drawers, etc. Unless you&#8217;re building online games or something like spreadsheets, what else is there?</p><p>And I&#8217;ve discovered that with the CSS pseudo-classes such as :target and :checked, I can do almost anything with just CSS. I do add a bit of JS occasionally to smooth things out (or to remember settings, for which session storage is great), but everything works without JS. Even the forms.</p><p>I just wrote a dark mode switch using a checkbox and some CSS. No JavaScript at all (although if JS is enabled, it uses sessions storage to remember your setting between pages). Of course, it is already responding to your system settings. This is only for use if you want to override them on just my site.</p><p>Each form uses two Lambda functions: one for regular (HTTP) form submission, the other for submission via AJAX. The former redirects to separate HTML pages for errors, etc. (not perfect, but the validation works on the browser <em>without </em>JS). The latter re-renders using&#8230; wait for it&#8230; <code>document.createElement</code>.</p><p>Hey, it works just fine!</p><h2>We don&#8217;t need no stinkin&#8217; optimization</h2><p>Oh, but isn&#8217;t that SLOW?</p><p>Um, no. It&#8217;s rather fast. In fact all of my current websites (most still in dev, but near completion) are built in this &#8220;vanilla HTML/CSS/JS&#8221; way using Astro and TypeScript on the back end, but shipping only vanilla code that I wrote to the front end.</p><p>And not only do they rate AAA on the WCAG 2.2 guidelines. (Yes, TRIPLE-A, not double.) They also score 100% across the board <em>consistently</em> on Lighthouse: for performance, accessibility, best practices, and SEO, <em>even on Mobile</em>.</p><p>I keep trying to improve that, but 100% seems to be the limit.</p><p>When people visit those pages they usually remark immediately, &#8220;Oh, that&#8217;s fast.&#8221; I&#8217;ve had no complaints about the interface or the forms (but some snarky ones about my choices of typefaces and colors&#8212;hey, I&#8217;ve never claimed to be a graphic designer).</p><p>Is it vanilla on the back end, too? I don&#8217;t even know what that would mean, but I&#8217;m not stupid. I&#8217;m perfectly happy to use cloud services for hosting, serverless functions, image manipulation, etc. Though I&#8217;m trying to get away from AWS, at least directly, and use Netlify or Vercel or equivalent.</p><p>It&#8217;s JAMStack, for now, but I&#8217;m investigating the use of tiny servers at the edge to work around a few of the pain points of making the site work without JS.</p><p>I just don&#8217;t see any point in loading gobs of extra code <em>written by people who I don&#8217;t know and who don&#8217;t know me</em> to do things that the browser is already capable of doing just fine. Probably faster and better. It&#8217;s native code, after all.</p>]]></content:encoded></item><item><title><![CDATA[Lives or luxuries?]]></title><description><![CDATA[Very soon the price of AI will be the lives of billions]]></description><link>https://www.cantankerouscoder.com/p/lives-or-luxuries</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/lives-or-luxuries</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Tue, 28 Mar 2023 23:21:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dWVp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my <a href="https://open.substack.com/pub/cantankerouscoder/p/were-completely-fucked?r=y4bin&amp;utm_campaign=post&amp;utm_medium=web">previous post</a>, I pointed out that so-called Artificial Intelligence, while not actually intelligent in any meaningful sense of the word, will rapidly destroy white collar jobs.</p><p>Some will disagree loudly. I get it. But it doesn&#8217;t matter at all what you think&#8212;or what I think. There is probably nothing we can do to stop it, so within the next five to ten years, the truth will be obvious to all but the most devout technophiles.</p><p>But the loss of white collar jobs, and the catastrophe that will be for the world economy (not to mention the lives of the families of former white-collar workers now struggling to make ends meet in low-wage service jobs, if they have jobs at all), is not the most terrifying aspect of &#8220;AI&#8221;.</p><p>The most terrifying aspect of AI is the literally <em>billions</em> of human lives (not to mention other fauna and flora) that it is going to <strong>kill</strong>. And no, I am not making this shit up.</p><h2>It&#8217;s the energy, stupid</h2><p>As &#8220;AI&#8221; can do pretty much everything short of wiping your ass (wait&#8230; can it do that, too?), its use will grow <em>exponentially</em>. That means &#8220;very, very quickly&#8221; for the math challenged among us. And getting faster <em>faster.</em></p><p>It may have escaped some of us, but &#8220;AI&#8221; runs as <em>software</em>. That means it needs <strong>hardware</strong>. That hardware may be hidden away in heavily-guarded &#8220;server farms&#8221; outside of various world metropolises, but it <em>must</em> exist. AI does not live in the &#230;ther, no matter what our overheated &#8220;imaginations&#8221; tell us.</p><p>And it already draws <em>enormous</em> energy. Partly, this is the daily dose of electric power it needs to run. But there is also the power and other resources needed to mine the materials required, to build and maintain that hardware, to transport everything all over the globe, and to rid ourselves of the waste when the hardware is decrepit or obsolete.</p><p>That&#8217;s a lot of energy. Where is that going to come from?</p><h2>It will come from food</h2><p>Ha, ha. Say what? From food? What, we&#8217;re going to <em>feed</em> our AIs?</p><p>Yes. That is precisely what we are going to do.</p><p>Server farms, power lines, mines, factories, roads, etc. all take up land that cannot then be used to grow food. But that&#8217;s the least of it.</p><p>As we burn through the remaining oil and gas reserves ever faster, we will turn to other forms of power generation. One of the most popular and getting more popular in the West is <strong>biomass</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dWVp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dWVp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dWVp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dWVp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dWVp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dWVp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1850974,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dWVp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dWVp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dWVp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dWVp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6fbfafa-f87b-44b8-84d5-41afc2289b6d_1920x1440.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Biomass is trees. Don&#8217;t let them tell you differently. Some portion can come from agricultural waste, but not nearly enough. And that assumes we&#8217;re still doing agriculture.</p><p>Already, whole forests are falling to the blade to make wood pellets to feed into the biomass furnaces. Plant power for power plants. You can&#8217;t make this shit up.</p><p>Trees grow on land that could be used to grow food. When it comes down to feeding millions&#8212;billions&#8212;over there in those unseen &#8220;foreign&#8221; lands or keeping the AI running for the &#8220;golden billion&#8221; in the West, who do you think will win?</p><p>How many in the West, truthfully now, have given up even a fraction of their wildly profligate use of energy to help save the climate <em>and all life on Earth?</em> And do you really think, then, that they will give up AI to save &#8220;the children&#8221; in Uruguay or Nigeria?</p><p>Get real.</p><p>AI is a voracious beast that will eat the world. But for those idolaters for whom AI is the ultimate idol, so what? Yeah, it&#8217;s killing people. <em>But no one I know.</em></p><p>When we get truly desperate, we&#8217;ll turn back to nuclear power&#8212;the most toxic and deadly of all human activities&#8212;and then we will be well and truly fucked. And on this count, I definitely know what I&#8217;m talkin&#8217; about.</p><h2>It has already happened</h2><p>You might think I&#8217;m exaggerating, or that I&#8217;ve lost my mind completely. But it has already happened, just on a slightly smaller scale.</p><p>Throughout the so-called &#8220;developing world&#8221; (actually, the exists-to-be-exploited world)&#8212;the &#8220;Global South&#8221;&#8212;corporations from the &#8220;Global North&#8221; have been buying up land once used for subsistence farming and turning it to &#8220;cash crops&#8221;.</p><p>This has been happening for decades.</p><p>What happened to the subsistence farmers, who once lived lightly on the land and were peasants, but not poor?</p><p>Simple: either they went to work for meager wages on the fields they had once owned, or they migrated to the overcrowded cities to become slave labor in the factories.</p><p>There, if they were lucky, they got shit wages to work in dangerous, often toxic conditions for long hours six or seven days a week. While their families lived in cardboard boxes drinking from poisoned streams and rivers.</p><p>And that doesn&#8217;t include the <a href="https://en.wikipedia.org/wiki/Farmers%27_suicides_in_India">tens of thousands committing suicide</a>.</p><p>Is that everyone&#8217;s experience? No. But in varying degrees, it is the common experience.</p><p>And what were once mostly organically-managed small farms are now big agribusiness lots saturated with petroleum products in the form of insecticides, fertilizers, and more. Or feed lots with animals crammed into cages and pumped full of steroids and antibiotics.</p><p>Does anyone really think that the people who organized and carried out this ongoing atrocity in pursuit of power and profit&#8212;an atrocity that has killed or maimed tens or hundreds of millions and immiserated hundreds of millions more&#8212;will behave any differently when they see the power and profit that AI can generate for them?</p><p>If you believe that, then I am not the loonie here.</p><h2>Oh, but it gets worse</h2><p>I feel like we&#8217;re forgetting something here. What is it?</p><p>Oh, yeah. All that power generation and destruction of forests is <em>accelerating the climate catastrophe</em>. Note: not just maintaining our decline. <em>Accelerating</em> it.</p><p>As the climate worsens, the effects are beyond imagining. Disease vectors move. Whole species, unable to move with the change in climate, go extinct. We are already in the midst of the sixth mass extinction.</p><p>And have you noticed that the climate has been a bit, um, unpredictable lately? That&#8217;s only going to get worse. Much, much worse.</p><p>Many will rush to disagree. Nonsense! they cry.</p><p>Well, I hope they&#8217;re right, but here&#8217;s a news flash: <strong>Nature doesn&#8217;t give a flying fuck what you think</strong>. I know. Shocking, isn&#8217;t it?</p><p>But actions have consequences and there will be no weaseling out of it when the bill comes due. Dine and dash won&#8217;t work. Where you gonna dash to? Mars?</p><p>If you&#8217;ve ever watched one of those &#8220;nature&#8221; shows on television, then you know this with certainty: nature has <em>no mercy. </em>None.</p><p>As the arable land disappears, <em>so does the food</em>. As the oceans heat up and the reefs die and the plastic islands grow ever bigger, so goes the <strong>food</strong>.</p><p>Do you see it yet? Look harder. &#8220;AI&#8221;, if we let it, is going to make all of this <em>so much worse</em>. And so much more <strong>certain</strong>.</p><p>But the golden billion will just scream for more border walls and guards and armies to keep the tech losers out, and Elon Musk will dangle Mars before their slavering faces, and yes, they will sacrifice their brothers and sisters and even their children for the sake of the ultimate toy, &#8220;AI&#8221;.</p><p>After all, are we not sacrificing all future generations already with our insane destruction of the biosphere? Are we not already tossing some forty <em>thousand</em> children into the dumpster <em>every single day</em> because we can&#8217;t be arsed to care about them? And this just for some crappy commodities that make our lives more complex, never simpler.</p><p>Why would anyone think that&#8217;s going to change? Change only happens in response to <strong>force</strong>. What will force us to care when we never have cared in our our entire history on this planet?</p><h2>Look down that road</h2><p>If I remember correctly, William S. Burroughs, in the preface to one of his books, discussed a lifetime of heroin addiction and some of the things that those not addicted do not know about addiction to heroin.</p><p>One of these was constipation. Heroin addicts are often terribly constipated. According to Burroughs, this sometimes required a trip to the hospital, where a device something like a giant corkscrew was used to drill the shit out of the addict&#8217;s rectum. Literally.</p><p>He finished his preface with this, if I remember correctly: <strong>Look down that road before you travel it.</strong></p><p>Look down that road.</p><p>I suggest that we do the same.</p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[We're completely fucked]]></title><description><![CDATA[Say goodbye to your tech job (and most other white collar work)]]></description><link>https://www.cantankerouscoder.com/p/were-completely-fucked</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/were-completely-fucked</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Sat, 25 Mar 2023 01:01:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Y6p2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ever since ChatGPT 3 made its debut, there has been alarmism about AI taking over the world mixed with great joy at how &#8220;cool&#8221; AI is. So hooray!</p><p>Now, ChatGPT <strong>4</strong> is already out and vastly improved. And the alarums are increasing.</p><p>On the one side you have those who say that this will make our work so much easier. And it will, of course. On the other side you have those who say that it will take away our jobs. And of course it will.</p><p>A third group think it&#8217;s <strong>Terminator</strong> time and AI will &#8220;decide&#8221; that it is better off without humans and kill us all (or enslave us). Let&#8217;s deal with this one first.</p><h2>The Terminator Scenario</h2><p>It astonishes me how often I have to explain this to people but the media are against me. They just can&#8217;t stop lying about it. So let&#8217;s get something clear:</p><p><strong>Machines don&#8217;t think.</strong></p><p>They don&#8217;t think now and they are unlikely ever to &#8220;think&#8221;. But boy do we like to anthropomorphize. Just as our idea of God has all the flaws of human beings, just writ larger, so we project <em>human</em> foibles onto machines. We think that they get jealous, are easily angered, feel resentment. Maybe they even love us.</p><p>So what do machines really do? They do what we program them to do. So that means that if machines do take over and start killing all the humans, <em>then</em> <em>it will be because that&#8217;s what we programmed them to do</em>.</p><p>And don&#8217;t think that&#8217;s not a possibility. In truth, it is likely. The <em>first</em> thing humans do with any new technology is <strong>build weapons</strong><em><strong>.</strong></em> Every. Single. Time.</p><p>No exceptions.</p><p>Then whoopsie! Wow. No one could have anticipated that horrific outcome.</p><p>Every advance in medicine immediately results in an advance in biological weapons (or genetic weapons). Every advance in chemistry results in new and more potent chemical weapons. Every advance in physics results in new, ever more lethal bombs, missiles, rockets, laser beams.</p><p>Even those products that you don&#8217;t recognize as weapons &#8212; smart phones, social media, television and streaming &#8212; are absolutely weapons. The carnage is everywhere plain to see.</p><p>Similarly, tech advances have rapidly created a global surveillance state, the American carceral state, the shocking maldistribution of wealth, a drugged and passive population too busy staring at their phones to react intelligently or empathetically, and worse. Far worse.</p><p>Paul Virilio spoke of the &#8220;integral accident&#8221;. He said: you cannot invent the railway without also inventing the derailment. You don&#8217;t get one without the other.</p><p>I take some issue with Mr. Virilio. I don&#8217;t think that there is anything <em>accidental</em> about it. I think that the inventors know quite well that there will be a horrific downside to every technological advance, but they are so greedy for the benefits, that they lie about and dismiss or downplay the detriments.</p><p>They don&#8217;t mind risking <em>your</em> life for <em>their</em> gain.</p><p>Think I&#8217;m exaggerating? Then put this in your pipe and smoke it:</p><p>Edward Teller, the &#8220;father&#8221; of the atomic bomb, theorized that the explosion of <em>one</em> could ignite the Earth&#8217;s atmosphere <em>killing all life on Earth</em>. There was enough concern that they conducted a six month study and concluded that it was very &#8220;unlikely&#8221;.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y6p2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y6p2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Y6p2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Y6p2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Y6p2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y6p2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.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;:1271775,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y6p2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Y6p2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Y6p2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Y6p2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb74958c-8bf6-4bec-93e0-0ef888b58d26_3000x2000.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>It&#8217;s the stakes, stupid</h2><p>I regularly try to explain this to people but most humans are remarkably unable to grok it. I think that the moment you say anything that suggests &#8220;math&#8221;, a significant portion of humanity simply stops listening. The brain slips into neutral.</p><p>When we talk about risk, many people get bogged down in the odds. For example, in the scenario above, what the other scientists were saying to Teller was that the odds that the atmosphere would ignite and destroy all life on Earth were <em>very low</em>.</p><p>But risk also involves the <strong>stakes</strong>. What were the stakes above? Were they high? Well, only if you consider <em>the extinction of</em> <em>all life on Earth</em> to be an issue.</p><p>If I put a piece of wood between two blocks a meter off the ground and offer you $100 to walk across it, you&#8217;d almost certainly do it. Even if it was difficult and the odds were that you&#8217;d fail. After all, the stakes are low. You might, <em>might</em>, sprain an ankle if you fell.</p><p>But put that same piece of wood between two fifty-story buildings where a fall means certain death, and would you still take the risk? I very much doubt it.</p><p>If not, then that means that you <em>do</em> understand the importance of stakes.</p><p>So think about this now: those men went ahead with their explosion even though the stakes were <em>the end of</em> <em>all life on Earth</em>. Just the incredible arrogance of such men, to think that they had the <em>right</em> to take that risk with the lives of every living thing on the planet, is mind-boggling.</p><p>I&#8217;d like to invent a time machine just so I could go back and beat them senseless with a big stick while shouting, &#8220;What were you thinking? What were you thinking?&#8221;</p><p>Those men didn&#8217;t disappear with the end of the Manhattan Project. The world is full of men (and some women) who arrogate the &#8220;right&#8221; to themselves to take enormous risks with the fate of all life on Earth in the balance. It happens with increasing frequency.</p><p>Do you really think that they&#8217;re being careful with AI and robots and genetics and the rest? If so, do you have that $100,000 you owe me? Yeah, remember? You promised you&#8217;d pay it back.</p><h2>First they came for the looms</h2><p>The first wave of industrialization destroyed whole craft industries. Millions were displaced and millions of lives ruined, but no one else cared because, hey, cool new shit real cheap!</p><p>It took unions and a long and bloody battle (and two world wars and a depression) to raise the general standard of living back to something people could accept.</p><p>Then profits began to flag and the great Neo-liberal crusade began. As productivity climbed because of improving technology and work practices, wages were held stagnant and cheap credit was substituted. As a result, the monetary benefits accrued to a small class of parasites. Everyone else went into debt.</p><p>But that wasn&#8217;t enough, so soon the laws were changed and industry moved to low-wage countries where compromised governments prevented unionization and there were no laws to protect workers and the environment.</p><p>Industrial workers in the West who&#8217;d had it good since the end of WWII were outraged, but the unions were mostly gone by that point or corrupted &#8212; the moment the danger passes people go back to sleep &#8212; so off the good blue collar jobs went.</p><p>The promise was that we&#8217;d &#8220;retrain&#8221; people for the new &#8220;information economy&#8221;, but what was really happening was the financialization of Western economies, especially that of the US. Casino capitalism anyone? How&#8217;s that working out? Can you say &#8220;SVB&#8221;?</p><p>Meanwhile, the great retraining fizzled and the trend toward service jobs at a fraction of former wages began. McDonald&#8217;s, Walmart, Amazon warehouses. Sweet, eh? Do you want fries with your burger?</p><p>But again, no one cared (except the victims) because iPhones! Social media! Cheap big screen TVs! Yes, the &#8220;proletariat&#8221; was bought off again with trinkets. Isn&#8217;t this fun?</p><p>Of course, the white collar jobs were somewhat protected. There were, in the US, the infamous H-1B visas whereby thousands of mostly Indians willing to work for much less than white Americans came to the US and &#8220;stole&#8221; white Americans&#8217; jobs. But all the wailing and gnashing of teeth mostly came to naught because&#8230; trinkets!</p><h2>Who needs humans anyway?</h2><p>With the advent of &#8220;AI&#8221; (truly, a misnomer &#8212; no &#8220;intelligence&#8221; is involved unless you mean that in the same way the military does, cough, cough), white collar workers can be replaced just as easily as the blue collar workers they so eagerly sold out.</p><p>Where&#8217;s Ross Perot when you really need him? Can you say &#8220;giant sucking sound&#8221;?</p><p>Naysayers will claim that AI &#8212; read ChatGPT and the like &#8212; isn&#8217;t good enough yet. Key word: yet.</p><p>But they are wrong. <strong>Yes it is</strong>. It&#8217;s more than good enough.</p><p>The naysayers cheat by comparing ChatGPT to Faulkner, Picasso, Einstein. But guess what! How many of us are Faulkner, Picasso, or Einstein? Exactly three of us, I think, and all dead.</p><p>The sad truth is that the vast majority of human beings are utterly mediocre. And how could it be otherwise? Mediocre simply means <em>average</em>, so it is a <em>mathematical certainty</em>. Whoops. Put your brain back in gear.</p><p>And that&#8217;s if we use a Bell curve.</p><p>More likely, competence follows the Pareto Principle, which means 20% have most of the smarts and 80% are mostly drudges. <strong>And ChatGPT is already better (and much, much faster and cheaper) than all of that 80%.</strong></p><p>If they keep the training reasonably current &#8212; and you can bet &#8220;they&#8221; will &#8212; then there is no reason that ChatGPT/etc. cannot <em>already</em> replace most clerical workers, paralegals, accountants, journalists, graphic designers, teachers, etc. Even most doctors, lawyers, managers, and more. (Nurses tend to be hands on, so they&#8217;ll be around a bit longer, but it will still be a shit job, pun intended.)</p><p>At most we have a few years. Logistics, am I right?</p><p>AI and a robot can already replace the best surgeons. Would you rather have your brain surgery done by a machine that has an error rate of 0.00001% or a surgeon who has an error rate of 0.1% or even 1%? That&#8217;s a no-brainer (pun intended).</p><h2>We could&#8217;ve been contenders</h2><p>So does this have to be the end? Are we fated to fighting over crumbs in an increasingly hostile and toxic environment wracked by war and poverty while a small cadre of &#252;ber-parasites and their robot minions and human sex slaves live in domed luxury on their private islands and walled estates? Or can we pull this out somehow? Could the yeasayers be right?</p><p>Well, it is <em>theoretically</em> possible. We <em>could</em> use this amazing technology to benefit all life on Earth, ensuring that all of humanity has good, nutritional food; superb healthcare; safe, secure, and private housing; education; leisure time; and much more; all free of charge while &#8220;AI&#8221; and robots do all the hard work.</p><p>And if we stopped competing and started cooperating, put aside our differences, shared everything equally, took only what we really needed, left things better than we found them, and, essentially, loved each other, then yes! We could create a paradise on Earth.</p><p>As one of my professors used to say:</p><blockquote><p>In theory there is no difference between theory and practice. But in practice, there is.</p></blockquote><p>As far back as 1981 &#8212; was anyone even alive back then? &#8212; Buckminster Fuller pointed out a simple truth:</p><blockquote><p>It is now highly feasible to take care of everybody on Earth at a 'higher standard of living than any have ever known.' It no longer has to be you or me. Selfishness is unnecessary and henceforth unrationalizable as mandated by survival.</p></blockquote><p>So we <em>could</em> do that. But forty-two years later (I&#8217;ve seen that number before somewhere), things are actually much worse. Some whiny, killjoy scientists say we&#8217;re now <em>closer to midnight than ever before</em>. </p><p>Not sure what happens at midnight, but it can&#8217;t be good. Think Cinderella.</p><p>But we won&#8217;t make things better. We&#8217;ll make them <em>much</em> worse. </p><p>What is my evidence for this? Hmm. Only the <em>entire history of humanity on Earth.</em> Don&#8217;t believe me? Look for yourself. I&#8217;ll wait.</p><p>We keep trying to solve our problems with more powerful technology: Nuclear power. Genetic manipulation. Robotics and AI. But the problem we have is not a lack of technology, it&#8217;s too much and too powerful technology.</p><p>Our problem is moral and spiritual. We are infants, and we adamantly refuse to grow up. And so all these &#8220;great&#8221; technologies are nothing more than handguns in the hands of toddlers. This will not end well. Ask an American.</p><p>The tiny group of parasites at the top &#8212; don&#8217;t call them an &#8220;elite&#8221; &#8212; will suck up every possible &#8220;benefit&#8221; of this technology, and the rest of us &#8212; 99.99999% of humanity and all the other fauna (and flora) &#8212; will pay the price for it.</p><p>Same as it ever was. You heard it here first.</p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[A bit more about responsiveness]]></title><description><![CDATA[Doing it the Craft Code way]]></description><link>https://www.cantankerouscoder.com/p/a-bit-more-about-responsiveness</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/a-bit-more-about-responsiveness</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Mon, 20 Mar 2023 01:40:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gdvc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Don&#8217;t worry good readers! I will get back to bitching about things in my next post. Must maintain my cantankerousness! I&#8217;ve got a good one in the bullpen warming up.</p><p>But I thought that it would be a pity to leave that last post &#8212; <a href="https://www.cantankerouscoder.com/p/destroying-responsiveness">Destroying responsiveness</a> &#8212; without providing a little more detail about doing it well. But not too much detail. This isn&#8217;t my &#8220;teaching&#8221; blog. It&#8217;s my bitching blog.</p><p>Let&#8217;s drop the previous CSS and get back to the plain HTML of the last post:</p><pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang="en-US"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
    &lt;meta
      name="description"
      content="This here page is responsive by default! Wee hoo!"
    &gt;
    &lt;title&gt;Responsive design&lt;/title&gt;
    &lt;style media="screen"&gt;&lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;header&gt;
      &lt;h1&gt;I be responsive by default&lt;/h1&gt;
      &lt;a href="#main"&gt;Skip to main content&lt;/a&gt;
    &lt;/header&gt;
    &lt;nav aria-labelledby="main-navigation-label"&gt;
      &lt;h2 id="main-navigation-label"&gt;Main navigation&lt;/h2&gt;
      &lt;ul&gt;
        &lt;li&gt;
          &lt;p&gt;
            &lt;a href="/about"&gt;About us&lt;/a&gt;
          &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;
            &lt;a href="/contact-us"&gt;Contact us&lt;/a&gt;
          &lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;
            &lt;a href="/terms-of-use"&gt;Terms of use&lt;/a&gt;
          &lt;/p&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/nav&gt;
    &lt;main id="main"&gt;
      &lt;article&gt;
        &lt;header&gt;
          &lt;h2&gt;Some fake Latin for you&lt;/h2&gt;
        &lt;/header&gt;
        &lt;!-- five paragraphs of lorem ipsum text --&gt;
      &lt;/article&gt;
    &lt;/main&gt;
    &lt;footer&gt;
      &lt;p&gt;&amp;copy; 2023 by Smart Devs.&lt;/p&gt;
    &lt;/footer&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><p>And here&#8217;s what that looks like on my laptop:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gdvc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gdvc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png 424w, https://substackcdn.com/image/fetch/$s_!gdvc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png 848w, https://substackcdn.com/image/fetch/$s_!gdvc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png 1272w, https://substackcdn.com/image/fetch/$s_!gdvc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gdvc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png" width="742" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6323bfa8-f258-4472-9a4e-c54177080809_742x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:742,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81338,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gdvc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png 424w, https://substackcdn.com/image/fetch/$s_!gdvc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png 848w, https://substackcdn.com/image/fetch/$s_!gdvc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png 1272w, https://substackcdn.com/image/fetch/$s_!gdvc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6323bfa8-f258-4472-9a4e-c54177080809_742x600.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And on my partner&#8217;s iPhone Mini:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q7AD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q7AD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.png 424w, https://substackcdn.com/image/fetch/$s_!Q7AD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.png 848w, https://substackcdn.com/image/fetch/$s_!Q7AD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.png 1272w, https://substackcdn.com/image/fetch/$s_!Q7AD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q7AD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.png" width="385" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:385,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81920,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q7AD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.png 424w, https://substackcdn.com/image/fetch/$s_!Q7AD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.png 848w, https://substackcdn.com/image/fetch/$s_!Q7AD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.png 1272w, https://substackcdn.com/image/fetch/$s_!Q7AD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d5e4b47-e685-43cf-a1a4-503660ecb94f_385x818.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As you can see, the HTML is responsive <em>by default</em>. At this point, your typical dev uses CSS to <em>fuck it all up completely.</em> Yes: <strong>we use CSS to destroy responsiveness, not to create it.</strong></p><p>It&#8217;s a bit like cutting off someone&#8217;s arm and then sewing three fingers onto the stump and calling it a day.</p><p>What we want here is a layout that puts the navigation in a left-hand sidebar. On the left is the proper place for it, according to UX experts, although this one is short enough to make it a top nav bar. But we&#8217;re not the design team.</p><p>But on a small screen like that of the iPhone, we want the navigation above and the main content to fill the width of the screen.</p><p>A couple more requirements:</p><ul><li><p>We want the skip link to appear only when tabbed to (but also available to VoiceOver and other screen readers).</p></li><li><p>We want the footer to sit at the bottom of the page, but not fixed there. If the content is long enough, then it can be pushed below the &#8220;fold&#8221;.</p></li><li><p>We&#8217;re OK with the header scrolling off the screen.</p></li></ul><p>So let&#8217;s start, but we&#8217;ll start with <em>mobile</em>: everything in a single column.</p><p>The easiest way is to do this is with <code>grid</code>, as we did last post.</p><p>It will probably be easier if we start with a very minimal &#8220;reset&#8221; stylesheet. There is some controversy over this, but I think a minimal one is good for ironing out any remaining differences between browsers.</p><p>I&#8217;m going to try out this <a href="https://elad2412.github.io/the-new-css-reset/">CSS reset from Elad Shechter</a>. But there are many others. An old favorite is <a href="https://andy-bell.co.uk/a-modern-css-reset/">Andy Bell&#8217;s CSS reset</a>. One thing that Shechter&#8217;s reset lacks, which makes me a bit wary of it, is Bell&#8217;s <code>prefers-reduced-motion</code> media query, which is important for accessibility. But for today, we&#8217;ll give Elad his chance.</p><p>If you&#8217;re following along, you might copy and paste the reset into the head of the page (we&#8217;re keeping things simple here). I put it in a separate <code>&lt;style&gt;</code> element so I can close it up and hide it. With that in place, here&#8217;s our new iPhone view:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-2-u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2970d73-3069-4991-9653-8c219d5551ee_766x988.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-2-u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2970d73-3069-4991-9653-8c219d5551ee_766x988.png 424w, https://substackcdn.com/image/fetch/$s_!-2-u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2970d73-3069-4991-9653-8c219d5551ee_766x988.png 848w, https://substackcdn.com/image/fetch/$s_!-2-u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2970d73-3069-4991-9653-8c219d5551ee_766x988.png 1272w, https://substackcdn.com/image/fetch/$s_!-2-u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2970d73-3069-4991-9653-8c219d5551ee_766x988.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-2-u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2970d73-3069-4991-9653-8c219d5551ee_766x988.png" width="766" height="988" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2970d73-3069-4991-9653-8c219d5551ee_766x988.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:988,&quot;width&quot;:766,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:164500,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-2-u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2970d73-3069-4991-9653-8c219d5551ee_766x988.png 424w, https://substackcdn.com/image/fetch/$s_!-2-u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2970d73-3069-4991-9653-8c219d5551ee_766x988.png 848w, https://substackcdn.com/image/fetch/$s_!-2-u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2970d73-3069-4991-9653-8c219d5551ee_766x988.png 1272w, https://substackcdn.com/image/fetch/$s_!-2-u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2970d73-3069-4991-9653-8c219d5551ee_766x988.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ack! We&#8217;ve ruined everything! But don&#8217;t worry, <em>we&#8217;re gonna put it all back &#8212; only better.</em></p><p>Let&#8217;s start with the grid. We&#8217;ll also give the main regions a bit of padding and some temporary background colors so we can see what we&#8217;re doing. Here&#8217;s our CSS:</p><pre><code>body &gt; header {
  background-color: aliceblue;
  padding: 1rem;
}

body &gt; nav {
  background-color: azure;
  padding: 1rem;
}

main {
  background-color: beige;
  padding: 1rem;
}

body &gt; footer {
  background-color: blanchedalmond;
  padding: 1rem;
}

@supports (display: grid) {
  body {
    display: grid;
    grid-template-areas:
      "header"
      "nav"
      "main"
      "footer";
    grid-template-columns: 1fr;
    grid-template-rows: min-content min-content 1fr min-content;
    min-height: 100vh;
  }

  body &gt; header {
    grid-area: header;
  }

  body &gt; nav {
    grid-area: nav;
  }

  main {
    grid-area: main;
  }

  body &gt; footer {
    grid-area: footer;
  }
}</code></pre><p>So what does that look like? How about this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ckxx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ckxx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.png 424w, https://substackcdn.com/image/fetch/$s_!Ckxx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.png 848w, https://substackcdn.com/image/fetch/$s_!Ckxx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.png 1272w, https://substackcdn.com/image/fetch/$s_!Ckxx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ckxx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.png" width="388" height="825" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:825,&quot;width&quot;:388,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79988,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ckxx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.png 424w, https://substackcdn.com/image/fetch/$s_!Ckxx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.png 848w, https://substackcdn.com/image/fetch/$s_!Ckxx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.png 1272w, https://substackcdn.com/image/fetch/$s_!Ckxx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cf34fe0-3554-4ec9-9b96-2535b4737362_388x825.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Well&#8230; it&#8217;s a start. So let&#8217;s do the header first. </p><p>Our fonts are kind of ugly, so let&#8217;s use <a href="https://modernfontstacks.com/">Modern Font Stacks</a> to set the body font to a nice Transitional face (weight: 500) and the headings to an exciting Neo-Grotesque (weight: 400). Fast, nice, no layout shift.</p><p>We can also deal with the skip link, which we really only want visible when it is focused. Let&#8217;s give it a CSS class to make it easy to grab:</p><pre><code>&lt;a class="skip-link" href="#main"&gt;Skip to main content&lt;/a&gt;</code></pre><p>There are a hundred ways to do this (slight exaggeration). I prefer simple. Absolute positioning has been around forever &#8212; I built my first professional website with it in 1997! Obviously, I will be dead soon. So, we&#8217;ll absolutely position it way off-screen (which will keep it available to tabbing but remove it from the DOM so it doesn&#8217;t take up space), then on <code>focus</code> we&#8217;ll bring it back and add an outline.</p><p>Here&#8217;s what I&#8217;ve added:</p><pre><code>body {
  font-family:
    Charter, 'Bitstream Charter', 'Sitka Text', Cambria, serif;
  font-weight: 500;
  position: relative; /* To make the absolute positioning work */
}

.skip-link {
  position: absolute; /* Relative to the &lt;body&gt; */
  top: -10000px;      /* Way above the page */
}

.skip-link:focus {
  border-radius: 7px;
  outline-offset: 0.2rem;
  outline: 2px solid blue;
  position: relative;
  top: unset;
}</code></pre><p>So far we only have level 1 and 2 headings. No need to add CSS for things we don&#8217;t use! Note: we can also pull out anything not used from the reset stylesheet, such as <code>menu</code>, <code>table</code>, <code>meter</code>, <code>placeholder</code>, etc. We can also use <a href="https://typescale.com/">Type Scale</a> to set our headings to a Major Third scale. We won&#8217;t need anything below <code>h3</code>, so we&#8217;ll choose font size accordingly:</p><pre><code>h1, h2 {
  font-family: Inter, Roboto, 'Helvetica Neue', 'Arial Nova',
    'Nimbus Sans', Arial, sans-serif;
  font-weight: 400;
}

h1 {
  font-size: 1.953rem;
}

h2 {
  font-size: 1.563rem;
}</code></pre><p>Now let&#8217;s add <code>flex</code> to our header:</p><pre><code>@supports (display: flex) {
  body &gt; header {
    align-items: center;
    display: flex;
    flex-basis: min-content;
    gap: 1rem;
    justify-content: space-between;
  }
}</code></pre><p>I am assuming that the reader already knows how <code>flex</code> works. Here is the header now (on a laptop):</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RBiA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RBiA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png 424w, https://substackcdn.com/image/fetch/$s_!RBiA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png 848w, https://substackcdn.com/image/fetch/$s_!RBiA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png 1272w, https://substackcdn.com/image/fetch/$s_!RBiA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RBiA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png" width="833" height="71" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:71,&quot;width&quot;:833,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9953,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RBiA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png 424w, https://substackcdn.com/image/fetch/$s_!RBiA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png 848w, https://substackcdn.com/image/fetch/$s_!RBiA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png 1272w, https://substackcdn.com/image/fetch/$s_!RBiA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F904d5adb-3cd8-41bc-8350-ffc3695cdf84_833x71.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>And here it is when we tab to the skip link:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MIVN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbb214b-91a4-4912-9356-460f15b95244_829x63.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MIVN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbb214b-91a4-4912-9356-460f15b95244_829x63.png 424w, https://substackcdn.com/image/fetch/$s_!MIVN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbb214b-91a4-4912-9356-460f15b95244_829x63.png 848w, https://substackcdn.com/image/fetch/$s_!MIVN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbb214b-91a4-4912-9356-460f15b95244_829x63.png 1272w, https://substackcdn.com/image/fetch/$s_!MIVN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbb214b-91a4-4912-9356-460f15b95244_829x63.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MIVN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbb214b-91a4-4912-9356-460f15b95244_829x63.png" width="829" height="63" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/efbb214b-91a4-4912-9356-460f15b95244_829x63.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:63,&quot;width&quot;:829,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:12407,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MIVN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbb214b-91a4-4912-9356-460f15b95244_829x63.png 424w, https://substackcdn.com/image/fetch/$s_!MIVN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbb214b-91a4-4912-9356-460f15b95244_829x63.png 848w, https://substackcdn.com/image/fetch/$s_!MIVN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbb214b-91a4-4912-9356-460f15b95244_829x63.png 1272w, https://substackcdn.com/image/fetch/$s_!MIVN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefbb214b-91a4-4912-9356-460f15b95244_829x63.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>(Note: we&#8217;re not going for beauty here. I&#8217;m not a designer. I&#8217;m just showing how we can gradually enhance a web page <strong>without losing the native responsiveness</strong><em>.</em>)</p><p>Next: our navigation. The &#8220;main navigation&#8221; heading is really only for screen readers. Sighted users can see that it&#8217;s a navigation bar for the site at a glance. So we can move that off screen, too. We&#8217;ll start by giving it an <code>off-screen</code> class:</p><pre><code>&lt;h2 class="off-screen" id="main-navigation-label"&gt;Main navigation&lt;/h2&gt;</code></pre><p>Now we&#8217;ll add a class to move that off screen, too. The absolute positioning trick is backwards compatible and easy, so we&#8217;ll stick with that. Maybe there&#8217;s a drawback I&#8217;m missing (let me know), but I&#8217;ve never found one. Put this at the top of your stylesheet:</p><pre><code>.off-screen {
  position:absolute;
  top: -10000px;
}</code></pre><p>And poof! The bothersome nav header is gone, but still available in the <a href="https://chrome.google.com/webstore/detail/html5-outliner/afoibpobokebhgfnknfndkgemglggomo">HTML outline</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DeSH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DeSH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png 424w, https://substackcdn.com/image/fetch/$s_!DeSH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png 848w, https://substackcdn.com/image/fetch/$s_!DeSH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png 1272w, https://substackcdn.com/image/fetch/$s_!DeSH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DeSH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png" width="247" height="74" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:74,&quot;width&quot;:247,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8895,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DeSH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png 424w, https://substackcdn.com/image/fetch/$s_!DeSH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png 848w, https://substackcdn.com/image/fetch/$s_!DeSH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png 1272w, https://substackcdn.com/image/fetch/$s_!DeSH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd66ef270-dfd0-4556-8567-bdaf89ca1c24_247x74.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>And no accessibility issues.</p><p>The side nav is pretty close to good the way it is. We just want to add some padding and make sure that the anchor elements provide enough of a touch target: at least 24px high and 24px away from its neighbor.</p><p>But on a small screen, it&#8217;s taking up too much vertical space. Maybe later we&#8217;ll hide it behind a hamburger menu (although that&#8217;s not the greatest UX and might involve JS&#8230; we&#8217;ll see). For now, let&#8217;s flex it and make sure the links have sufficient touch targets and spacing:</p><pre><code>body &gt; nav a {
  display: inline-block;
  font-family: Inter, Roboto, "Helvetica Neue", "Arial Nova",
    "Nimbus Sans", Arial, sans-serif;
  margin-bottom: 24px;
  min-height: 24px;
}

/* And down in the @supports block at the bottom... */
@supports (display: flex) {
  /* ... */

  body &gt; nav ul {
    display: flex;
    flex-wrap: wrap;
    gap: 2rem;
  }

  body &gt; nav a {
    margin-bottom: 0;
  }
}</code></pre><p>Now our heading and nav bar look like this:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CLHa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CLHa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png 424w, https://substackcdn.com/image/fetch/$s_!CLHa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png 848w, https://substackcdn.com/image/fetch/$s_!CLHa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png 1272w, https://substackcdn.com/image/fetch/$s_!CLHa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CLHa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png" width="385" height="173" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:173,&quot;width&quot;:385,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14435,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CLHa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png 424w, https://substackcdn.com/image/fetch/$s_!CLHa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png 848w, https://substackcdn.com/image/fetch/$s_!CLHa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png 1272w, https://substackcdn.com/image/fetch/$s_!CLHa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19ddd21e-4709-4e9e-b2c3-d1d80af7afb8_385x173.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>If we add more links, they&#8217;ll wrap. We can live with that for now. As a now-famous friend once said to me: &#8220;Never write a line of code until you have to!&#8221; Heh, heh. We&#8217;re doing <strong>just-in-time craft coding</strong> here.</p><p>We&#8217;re pretty much done here. Let&#8217;s use our sans-serif font in the footer. And we&#8217;ll indent our paragraphs and add just a bit of leading below our <code>h2</code> heading:</p><pre><code>main h2 {
  margin-bottom: 1rem;
}

main &gt; article p:not(:first-of-type) {
  text-indent: 1.5rem;
}

body &gt; footer {
  background-color: blanchedalmond;
  font-family: Inter, Roboto, "Helvetica Neue", "Arial Nova",
    "Nimbus Sans", Arial, sans-serif;
  padding: 1rem;
}</code></pre><p>Now we have this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZBzn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b23331-7f01-4475-be79-6c576f48f2d7_389x825.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZBzn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b23331-7f01-4475-be79-6c576f48f2d7_389x825.png 424w, https://substackcdn.com/image/fetch/$s_!ZBzn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b23331-7f01-4475-be79-6c576f48f2d7_389x825.png 848w, https://substackcdn.com/image/fetch/$s_!ZBzn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b23331-7f01-4475-be79-6c576f48f2d7_389x825.png 1272w, https://substackcdn.com/image/fetch/$s_!ZBzn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b23331-7f01-4475-be79-6c576f48f2d7_389x825.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZBzn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b23331-7f01-4475-be79-6c576f48f2d7_389x825.png" width="389" height="825" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74b23331-7f01-4475-be79-6c576f48f2d7_389x825.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:825,&quot;width&quot;:389,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84332,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZBzn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b23331-7f01-4475-be79-6c576f48f2d7_389x825.png 424w, https://substackcdn.com/image/fetch/$s_!ZBzn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b23331-7f01-4475-be79-6c576f48f2d7_389x825.png 848w, https://substackcdn.com/image/fetch/$s_!ZBzn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b23331-7f01-4475-be79-6c576f48f2d7_389x825.png 1272w, https://substackcdn.com/image/fetch/$s_!ZBzn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b23331-7f01-4475-be79-6c576f48f2d7_389x825.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Butt ugly, but fixing that is someone else&#8217;s job. It works. What happens on browsers that don&#8217;t support grid or flex? We can check by simply commenting out those <code>@supports</code> blocks in our CSS and reloading the page:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4DcE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd5e094b-012d-43c7-ba01-d235d119cba5_382x825.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4DcE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd5e094b-012d-43c7-ba01-d235d119cba5_382x825.png 424w, https://substackcdn.com/image/fetch/$s_!4DcE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd5e094b-012d-43c7-ba01-d235d119cba5_382x825.png 848w, https://substackcdn.com/image/fetch/$s_!4DcE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd5e094b-012d-43c7-ba01-d235d119cba5_382x825.png 1272w, https://substackcdn.com/image/fetch/$s_!4DcE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd5e094b-012d-43c7-ba01-d235d119cba5_382x825.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4DcE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd5e094b-012d-43c7-ba01-d235d119cba5_382x825.png" width="382" height="825" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cd5e094b-012d-43c7-ba01-d235d119cba5_382x825.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:825,&quot;width&quot;:382,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84321,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4DcE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd5e094b-012d-43c7-ba01-d235d119cba5_382x825.png 424w, https://substackcdn.com/image/fetch/$s_!4DcE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd5e094b-012d-43c7-ba01-d235d119cba5_382x825.png 848w, https://substackcdn.com/image/fetch/$s_!4DcE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd5e094b-012d-43c7-ba01-d235d119cba5_382x825.png 1272w, https://substackcdn.com/image/fetch/$s_!4DcE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd5e094b-012d-43c7-ba01-d235d119cba5_382x825.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Well, I can&#8217;t speak for you, dear reader, but I can live with it. Let&#8217;s move on to larger viewports.</p><p>Now the easiest way to handle this is with a <strong>media query</strong> based on the <strong>width</strong> of the <strong>viewport</strong>. We don&#8217;t want to switch to a sidebar nav until we have enough room for a decent column for the main content. We can use the width on the phone as a guide.</p><p>Chrome DevTools tells me those paragraphs (on the iPhone Mini) are roughly 24rem wide. The longest link is just under 6rem and we need 4rem to allow for padding. My ancient brain thinks that adds to 34rem. Let&#8217;s start with that.</p><p>Note: I don&#8217;t give a damn about screen resolutions. I&#8217;m not trying to work with this phone or that tablet or worried about whether we&#8217;re in portrait or landscape. For a simple layout like this, all I care about is <em>do we have enough width at the current font size to fit a sidebar comfortably.</em></p><p>Here we go:</p><pre><code>@supports (display: grid) {
  /* ... */

  @media (min-width: 34rem) {
    body {
      grid-template-areas:
        "header header"
        "nav main"
        "footer footer";
      grid-template-columns: min-content 1fr;
      grid-template-rows: min-content 1fr min-content;
    }
  }
}

@supports (display: flex) {
  /* ... */

  @media (min-width: 34rem) {
    body &gt; nav ul {
      flex-direction: wrap;
      gap: 24px;
    }
  }
}</code></pre><p>Now, at <code>34rem</code> wide, we get this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uISA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uISA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.png 424w, https://substackcdn.com/image/fetch/$s_!uISA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.png 848w, https://substackcdn.com/image/fetch/$s_!uISA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.png 1272w, https://substackcdn.com/image/fetch/$s_!uISA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uISA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.png" width="536" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:536,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:90245,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uISA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.png 424w, https://substackcdn.com/image/fetch/$s_!uISA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.png 848w, https://substackcdn.com/image/fetch/$s_!uISA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.png 1272w, https://substackcdn.com/image/fetch/$s_!uISA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91bc1ce9-d064-46d7-b1e8-74e1fbe914a5_536x500.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Obviously, it needs some work, but the basic layout is correct, it passes <a href="https://chrome.google.com/webstore/detail/axe-devtools-web-accessib/lhdoppojpmngadmnindnejefpokejbdd">AAA accessibility</a>, <a href="https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk">Lighthouse</a> gives it four 100s &#8212; a perfect score &#8212; its <a href="https://chrome.google.com/webstore/detail/html5-outliner/afoibpobokebhgfnknfndkgemglggomo">HTML outline</a> is correct, it works with keyboard navigation and screen readers. In short, it&#8217;s fine.</p><p>Squeeze the viewport just one pixel narrower, and you get this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tZJ-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9805c36e-dc03-408c-9471-af76aa8ed343_535x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tZJ-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9805c36e-dc03-408c-9471-af76aa8ed343_535x500.png 424w, https://substackcdn.com/image/fetch/$s_!tZJ-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9805c36e-dc03-408c-9471-af76aa8ed343_535x500.png 848w, https://substackcdn.com/image/fetch/$s_!tZJ-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9805c36e-dc03-408c-9471-af76aa8ed343_535x500.png 1272w, https://substackcdn.com/image/fetch/$s_!tZJ-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9805c36e-dc03-408c-9471-af76aa8ed343_535x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tZJ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9805c36e-dc03-408c-9471-af76aa8ed343_535x500.png" width="535" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9805c36e-dc03-408c-9471-af76aa8ed343_535x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:535,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84755,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tZJ-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9805c36e-dc03-408c-9471-af76aa8ed343_535x500.png 424w, https://substackcdn.com/image/fetch/$s_!tZJ-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9805c36e-dc03-408c-9471-af76aa8ed343_535x500.png 848w, https://substackcdn.com/image/fetch/$s_!tZJ-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9805c36e-dc03-408c-9471-af76aa8ed343_535x500.png 1272w, https://substackcdn.com/image/fetch/$s_!tZJ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9805c36e-dc03-408c-9471-af76aa8ed343_535x500.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This also meets all the above criteria. And we can go from there.</p><p><strong>What if the user has their font size set to very large?</strong> We&#8217;re using a <code>min-width</code> of <code>34rem</code>, so the above, with the default font size of <code>16px</code>, switched to the sidebar at a viewport width of <code>544px</code> (16 &#215; 34).</p><p>Now with the default font size set to <code>24px</code>, our layout won&#8217;t shift to a sidebar until our viewport is <code>816px</code> wide (24 &#215; 34).</p><p>Here&#8217;s what it looks like with very large font at <code>816px</code> wide:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NfEs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NfEs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.png 424w, https://substackcdn.com/image/fetch/$s_!NfEs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.png 848w, https://substackcdn.com/image/fetch/$s_!NfEs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.png 1272w, https://substackcdn.com/image/fetch/$s_!NfEs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NfEs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.png" width="810" height="735" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:735,&quot;width&quot;:810,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:146644,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NfEs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.png 424w, https://substackcdn.com/image/fetch/$s_!NfEs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.png 848w, https://substackcdn.com/image/fetch/$s_!NfEs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.png 1272w, https://substackcdn.com/image/fetch/$s_!NfEs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d730ff-961b-4967-bbc1-196c3ce4f5c1_810x735.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And here it is at 815px:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K154!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K154!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.png 424w, https://substackcdn.com/image/fetch/$s_!K154!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.png 848w, https://substackcdn.com/image/fetch/$s_!K154!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.png 1272w, https://substackcdn.com/image/fetch/$s_!K154!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K154!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.png" width="812" height="523" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:523,&quot;width&quot;:812,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98462,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!K154!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.png 424w, https://substackcdn.com/image/fetch/$s_!K154!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.png 848w, https://substackcdn.com/image/fetch/$s_!K154!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.png 1272w, https://substackcdn.com/image/fetch/$s_!K154!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c2db4-3afb-4f13-a47d-e4a04678a449_812x523.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And finally, on my partner&#8217;s iPhone Mini:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ox64!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ox64!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.png 424w, https://substackcdn.com/image/fetch/$s_!Ox64!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.png 848w, https://substackcdn.com/image/fetch/$s_!Ox64!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.png 1272w, https://substackcdn.com/image/fetch/$s_!Ox64!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ox64!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.png" width="387" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:387,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:86502,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ox64!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.png 424w, https://substackcdn.com/image/fetch/$s_!Ox64!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.png 848w, https://substackcdn.com/image/fetch/$s_!Ox64!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.png 1272w, https://substackcdn.com/image/fetch/$s_!Ox64!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a15b706-35b4-4ae8-98ca-a7fdec4194d0_387x818.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Still usable! Notice how the links wrapped nicely. I can live with that.</p><p>And all so easy <em>when you do it right.</em></p><p>Note: this is not a teaching post, so my apologies if I assumed to much. This post is a mild polemic making the argument that <strong>HTML is already responsive: it is we who fuck it up with CSS</strong>. To that end, the above code is my argument to prove the point.</p><p>I am working on a teaching site called ScratchCode. I&#8217;ll post here when it&#8217;s up and ready.</p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Destroying responsiveness]]></title><description><![CDATA[HTML is responsive by default; we destroy it with CSS (and stupidity)]]></description><link>https://www.cantankerouscoder.com/p/destroying-responsiveness</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/destroying-responsiveness</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Sun, 19 Mar 2023 02:59:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YUMF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Making web pages <strong>responsive</strong> is believed to be difficult, requiring skill and hard work to accomplish. Too many developers aren&#8217;t willing to make the effort, and so there remain poorly-coded websites everywhere you look.</p><p>Anyone who uses a smart phone to surf the Internet encounters such sites regularly (unless like most people you hate the public sphere and spend all your time on Big Tech sites such as Facebook or Instagram).</p><p>But the thing that most web developers have forgotten, if they ever knew it, is that <strong>HTML is responsive by design.</strong><em><strong> </strong></em>It&#8217;s true: responsiveness is the <em>default</em>.</p><p>In short, and here is the takeaway: <strong>Most devs use CSS not to make their pages more responsive, </strong><em><strong>but</strong></em><strong> </strong><em><strong>to destroy responsiveness.</strong></em></p><p>They use CSS to blow responsiveness away, and then use a few media query hacks to try to get back some small elements of it. Kind of like packing your home to the ceilings with fossilized shit, and then hacking out tunnels to the bathroom, the kitchen, and the TV. You can do it, but why?</p><p>To make such a site accessible and more usable as well involves nothing more than using elements semantically and correctly, and following a few simple rules, such as adding a &#8220;skip link&#8221;.</p><p>So let&#8217;s take a look at a simple web page with header, footer, and &#8220;side&#8221; navigation done in a semantically correct way. To save space, I&#8217;ll only include the <code>&lt;body&gt;</code> element.</p><pre><code>&lt;body&gt;
  &lt;header&gt;
    &lt;h1&gt;I be responsive by default&lt;/h1&gt;
    &lt;a href="#main"&gt;Skip to main content&lt;/a&gt;
  &lt;/header&gt;
  &lt;nav aria-labelledby="main-navigation-label"&gt;
    &lt;h2 id="main-navigation-label"&gt;Main navigation&lt;/h2&gt;
    &lt;ul&gt;
      &lt;li&gt;
        &lt;a href="/about"&gt;About us&lt;/a&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;a href="/contact-us"&gt;Contact us&lt;/a&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;a href="/terms-of-use"&gt;Terms of use&lt;/a&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;main id="main"&gt;
    &lt;article&gt;
      &lt;header&gt;
        &lt;h2&gt;Some fake Latin for you&lt;/h2&gt;
      &lt;/header&gt;
      &lt;!-- five paragraphs of lorem ipsum text --&gt;
    &lt;/article&gt;
  &lt;/main&gt;
  &lt;footer&gt;
    &lt;p&gt;&amp;copy; 2023 by Smart Devs.&lt;/p&gt;
  &lt;/footer&gt;
&lt;/body&gt;</code></pre><p>Obviously, this is a very simple web page, but it will do for our uses here. Note that there is no CSS, no JS. Just HTML. Note also that this is pretty readable even without the syntax highlighting. Nice.</p><p>OK, fine, if you don&#8217;t trust me, here is the <code>&lt;head&gt; </code>element:</p><pre><code>&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
  &lt;meta
    name="description"
    content="This here page is responsive by default! Wee hoo!"&gt;
  &lt;title&gt;Responsive design&lt;/title&gt;
&lt;/head&gt;</code></pre><p>Now you can wrap that up in an <code>&lt;html&gt;</code> element (don&#8217;t forget the <code>lang</code> attribute and the document type declaration: <code>&lt;!DOCTYPE html&gt;</code>) and try it yourself.</p><p>So what does this look like on a desktop? Well, it is butt ugly, but it is completely readable, usable, and navigable, including by keyboard:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YUMF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YUMF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png 424w, https://substackcdn.com/image/fetch/$s_!YUMF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png 848w, https://substackcdn.com/image/fetch/$s_!YUMF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png 1272w, https://substackcdn.com/image/fetch/$s_!YUMF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YUMF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png" width="830" height="532" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:532,&quot;width&quot;:830,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79883,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YUMF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png 424w, https://substackcdn.com/image/fetch/$s_!YUMF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png 848w, https://substackcdn.com/image/fetch/$s_!YUMF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.png 1272w, https://substackcdn.com/image/fetch/$s_!YUMF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F512fdd3b-2937-4662-99fc-1f73a6410018_830x532.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>How does this score in <a href="https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk">Lighthouse</a>? Oh, look! Four 100s &#8212; a perfect score!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fcAQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fcAQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.png 424w, https://substackcdn.com/image/fetch/$s_!fcAQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.png 848w, https://substackcdn.com/image/fetch/$s_!fcAQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.png 1272w, https://substackcdn.com/image/fetch/$s_!fcAQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fcAQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.png" width="998" height="356" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:356,&quot;width&quot;:998,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53198,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fcAQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.png 424w, https://substackcdn.com/image/fetch/$s_!fcAQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.png 848w, https://substackcdn.com/image/fetch/$s_!fcAQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.png 1272w, https://substackcdn.com/image/fetch/$s_!fcAQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8302eb2b-a9e6-4c8e-8fec-de17cc8fc064_998x356.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Damn. That was easy. What about even stricter accessibility? The above is only AA. Can we do AAA? Let&#8217;s use <a href="https://deque.com/axe/devtools/">Deque&#8217;s axe DevTools Pro</a> to check:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!smsC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!smsC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.png 424w, https://substackcdn.com/image/fetch/$s_!smsC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.png 848w, https://substackcdn.com/image/fetch/$s_!smsC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.png 1272w, https://substackcdn.com/image/fetch/$s_!smsC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!smsC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.png" width="1234" height="870" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:870,&quot;width&quot;:1234,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:116445,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!smsC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.png 424w, https://substackcdn.com/image/fetch/$s_!smsC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.png 848w, https://substackcdn.com/image/fetch/$s_!smsC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.png 1272w, https://substackcdn.com/image/fetch/$s_!smsC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72e08897-e0fc-43ce-b034-4cdf8f741226_1234x870.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Uh, oh. What&#8217;s gone wrong here? Well, they explain:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lTuq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lTuq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.png 424w, https://substackcdn.com/image/fetch/$s_!lTuq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.png 848w, https://substackcdn.com/image/fetch/$s_!lTuq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.png 1272w, https://substackcdn.com/image/fetch/$s_!lTuq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lTuq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.png" width="1456" height="370" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:370,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105690,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lTuq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.png 424w, https://substackcdn.com/image/fetch/$s_!lTuq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.png 848w, https://substackcdn.com/image/fetch/$s_!lTuq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.png 1272w, https://substackcdn.com/image/fetch/$s_!lTuq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe720dc6c-511f-4f2b-8063-77e0db8f4094_2070x526.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So the navigation links are too tightly spaced. Well we can easily fix that&#8230; with CSS. But we&#8217;re not there yet, so maybe just wrap the anchor elements with paragraph elements and use the default stylesheet to get that spacing:</p><pre><code>      &lt;li&gt;
        &lt;p&gt;
          &lt;a href="/about"&gt;About us&lt;/a&gt;
        &lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;
          &lt;a href="/contact-us"&gt;Contact us&lt;/a&gt;
        &lt;/p&gt;
      &lt;/li&gt;
      &lt;li&gt;
        &lt;p&gt;
          &lt;a href="/terms-of-use"&gt;Terms of use&lt;/a&gt;
        &lt;/p&gt;
      &lt;/li&gt;</code></pre><p>Now our page looks like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ia2Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ia2Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.png 424w, https://substackcdn.com/image/fetch/$s_!Ia2Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.png 848w, https://substackcdn.com/image/fetch/$s_!Ia2Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.png 1272w, https://substackcdn.com/image/fetch/$s_!Ia2Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ia2Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.png" width="844" height="579" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:579,&quot;width&quot;:844,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:80927,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ia2Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.png 424w, https://substackcdn.com/image/fetch/$s_!Ia2Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.png 848w, https://substackcdn.com/image/fetch/$s_!Ia2Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.png 1272w, https://substackcdn.com/image/fetch/$s_!Ia2Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75bc1c80-7314-4c1b-85aa-0b59620ffa86_844x579.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Still butt ugly, but still very usable. As for AAA accessibility, let&#8217;s check:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZJ5F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZJ5F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.png 424w, https://substackcdn.com/image/fetch/$s_!ZJ5F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.png 848w, https://substackcdn.com/image/fetch/$s_!ZJ5F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.png 1272w, https://substackcdn.com/image/fetch/$s_!ZJ5F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZJ5F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.png" width="1226" height="680" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:680,&quot;width&quot;:1226,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:92304,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZJ5F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.png 424w, https://substackcdn.com/image/fetch/$s_!ZJ5F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.png 848w, https://substackcdn.com/image/fetch/$s_!ZJ5F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.png 1272w, https://substackcdn.com/image/fetch/$s_!ZJ5F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa21cc2cc-0866-49fb-bab6-f45171d43245_1226x680.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Oh, look! Our page is <strong>AAA accessible</strong> and super performant (if Lighthouse can be trusted). And is it responsive? Well, here&#8217;s what it would look like on my partner&#8217;s iPhone Mini:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TivT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TivT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.png 424w, https://substackcdn.com/image/fetch/$s_!TivT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.png 848w, https://substackcdn.com/image/fetch/$s_!TivT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.png 1272w, https://substackcdn.com/image/fetch/$s_!TivT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TivT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.png" width="385" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:385,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81920,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TivT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.png 424w, https://substackcdn.com/image/fetch/$s_!TivT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.png 848w, https://substackcdn.com/image/fetch/$s_!TivT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.png 1272w, https://substackcdn.com/image/fetch/$s_!TivT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d758f2d-0fd3-47b3-a019-1d97c5455bab_385x818.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Wow! It is completely responsive! And accessible. Fat-fingered folks like me can easily hit the right link. But is it standards compliant? Well, I ran it through the somewhat-sketchy <a href="https://validator.w3.org/">W3C Markup Validation Service</a> and there were <strong>zero errors or warnings</strong>. I was hoping for a better score, but it turns out it&#8217;s impossible.</p><p>Of course, our frail egos will never let us leave it like this. We need to use CSS to make it purdy. And here is where we <em>fuck it up completely</em>. Almost every time.</p><p>We know we should start with mobile &#8212; mobile first, right? But of course we won&#8217;t. We&#8217;ll deal with that &#8220;later&#8221;.</p><p>OK, we want <em>side</em> navigation. We can use the newfangled <code>grid</code> to get exactly what we want. Let&#8217;s jump right in and use a grid to get the layout we want:</p><pre><code>&lt;style media="screen"&gt;
  body {
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-areas:
      "header header"
      "nav main"
      "footer footer";
    grid-template-columns: min-content auto;
    grid-template-rows: min-content 1fr min-content;
    min-height: 100vh;
  }

  body &gt; header {
    grid-area: header;
    padding: 1rem;
  }

  body &gt; nav {
    grid-area: nav;
    padding: 1rem;
  }

  body &gt; nav a {
    white-space: nowrap;
  }

  main {
    grid-area: main;
    padding: 1rem;
  }

  body &gt; footer {
    grid-area: footer;
    padding: 1rem;
  }
&lt;/style&gt;</code></pre><p>Nothing fancy. Just a bare minimum grid layout. Here&#8217;s how this looks on the desktop:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sYQ2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sYQ2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.png 424w, https://substackcdn.com/image/fetch/$s_!sYQ2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.png 848w, https://substackcdn.com/image/fetch/$s_!sYQ2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.png 1272w, https://substackcdn.com/image/fetch/$s_!sYQ2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sYQ2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.png" width="907" height="593" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:593,&quot;width&quot;:907,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85405,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sYQ2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.png 424w, https://substackcdn.com/image/fetch/$s_!sYQ2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.png 848w, https://substackcdn.com/image/fetch/$s_!sYQ2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.png 1272w, https://substackcdn.com/image/fetch/$s_!sYQ2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a225cea-6da3-4bf5-8399-8cf112978da2_907x593.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Not too terrible. But what about that iPhone Mini?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EZPT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EZPT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.png 424w, https://substackcdn.com/image/fetch/$s_!EZPT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.png 848w, https://substackcdn.com/image/fetch/$s_!EZPT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.png 1272w, https://substackcdn.com/image/fetch/$s_!EZPT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EZPT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.png" width="363" height="686" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:686,&quot;width&quot;:363,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:69837,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EZPT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.png 424w, https://substackcdn.com/image/fetch/$s_!EZPT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.png 848w, https://substackcdn.com/image/fetch/$s_!EZPT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.png 1272w, https://substackcdn.com/image/fetch/$s_!EZPT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5836bd1-a1e8-42a6-ae6f-7654e76bf416_363x686.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Well, it is still usable, but there&#8217;s a lot of wasted space. And what if we then add a right-hand sidebar as well? That&#8217;s just not going to work unless we want our users to have to turn their phones to landscape orientation just to use our website.</p><p>Just for fun, as one final insight, let&#8217;s take a look at it in the <a href="https://lynx.browser.org/">Lynx text-only browser</a> (no CSS, no JS, not even any images):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WfAw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WfAw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.png 424w, https://substackcdn.com/image/fetch/$s_!WfAw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.png 848w, https://substackcdn.com/image/fetch/$s_!WfAw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.png 1272w, https://substackcdn.com/image/fetch/$s_!WfAw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WfAw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.png" width="811" height="746" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:746,&quot;width&quot;:811,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:300080,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WfAw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.png 424w, https://substackcdn.com/image/fetch/$s_!WfAw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.png 848w, https://substackcdn.com/image/fetch/$s_!WfAw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.png 1272w, https://substackcdn.com/image/fetch/$s_!WfAw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F733ae7a8-3a12-4ab2-b903-5a81e4f88570_811x746.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Who uses Lynx? Probably no one. But it&#8217;s nice to know that the page is usable even in Lynx (and this often gives insight into how a screen-reader or self-voicing browser will read the page).</p><p>Hmm. But not all browsers that support CSS support grids. Won&#8217;t this be a mess on those?</p><p>Responsiveness as the default to the rescue! We can simply wrap our modern CSS so that it only gets applied if it is supported. Then very old browsers will simply get the no-CSS page:</p><pre><code>@supports (display: grid) {
  /* grid CSS here */
}</code></pre><p>(Or we can start simply with CSS that works on <em>any</em> CSS browser, even IE3 &#8212; although how do you test that? &#8212; and use <code>@supports</code> to enhance the CSS experience as more modern CSS becomes available. Maybe that&#8217;s another post.)</p><p>Note: I use <a href="https://support.apple.com/en-nz/guide/voiceover/welcome/mac">VoiceOver on Mac</a> for testing, and have Windows 11 installed in <a href="https://www.parallels.com/">Parallels</a> so I can run tools such as the <a href="https://www.nvaccess.org/">NVDA screen reader</a>. If you aren&#8217;t doing something like this, trust me, you don&#8217;t have a damn clue how your site presents to people using similar accessibility tools.</p><p>I could easily go on, but I suspect that most readers have gotten the point. And the more CSS we add to make things a bit cooler on the desktop, the more likely we are to make the site <em>unresponsive, </em>if not inaccessible and unusable by many.</p><p>The first resort of most devs would be to a <strong>media query</strong> and a <strong>set point</strong>. But that&#8217;s a very coarse way to approach responsiveness. It might look OK on most phones and the typical laptop, but remember that most people on a desktop don&#8217;t maximize their windows, so the browser window could be almost any size and/or aspect ratio.</p><p>Using only set points, even if we add several, the page tends to be a mess at anything other than those set point widths (or heights). Choosing set points based on screen resolutions (you&#8217;ll need dozens!) is what we call the &#8220;stupid approach to responsiveness&#8221; and is one reason that so many devs just give up and settle for &#8220;OK at some small set of viewport dimensions&#8221;.</p><p>Better to make the page flow such that it adjusts to any viewport.</p><p>We&#8217;ll have to keep that for a future polemic. Today, I just wanted to make clear that the essential web was responsive <em>from day one</em>, and as far as HTML is concerned, it remains so.</p><p>While CSS can be used to provide a slicker user experience, which is nice, in the hands of a mediocre dev the first thing it accomplishes usually is to <em>destroy</em> responsiveness, if not usability and accessibility as well.</p><p>All the more reason to build your websites <em>first</em> as plain HTML. Check for standards compliance. Check for accessibility. Check for responsiveness. Check for optimization (do you have all the right elements in the &lt;head&gt;?). <a href="https://en.wikipedia.org/wiki/Linked_data">Linked Data</a> anyone?</p><p>Then add CSS <em>slowly</em>, piece by piece, checking <strong>all</strong> of the above as you go along and dealing with issues<em> </em><strong>as they arise</strong>, not putting them off until the code is awash with them. And then, and <em>only</em> then, adding JavaScript behaviors <em>only where truly needed</em>, while making sure that the page loads and works properly even without the JavaScript.</p><p>This takes some practice, but once you learn it, it&#8217;s easy. If you taught yourself TDD or BDD or similar habits, then you can teach yourself to build your page correctly: mobile-first and with <em>gradual enhancement</em>, rather than starting with all the bells and whistles and then trying to work around the problems.</p><p>If you&#8217;re a big fan of front-end frameworks such as React, Vue, Svelte, SolidJS, etc., then I suggest that you try building your application <em>first</em> in plain HTML, then adding plain CSS, and finally as little plain JS as you can get away with. And then adding components via your framework only as necessary. </p><p>You may discover that you&#8217;re not really a very good front-end dev. Just a React/whatever dev.</p><p><a href="https://astro.build/">Astro</a> makes using bits of these frameworks easy with its <a href="https://docs.astro.build/en/concepts/islands/">islands architecture</a> (as do a few other modern frameworks&#8230; maybe). I use Astro for it&#8217;s component architecture and ease of use with TypeScript, but I never use the islands feature. I don&#8217;t need component libraries. They&#8217;re nothing more than unnecessary bandwidth and complexity. I&#8217;m fine without them.</p><p>Finally, take a hint from William of Ockham and <em><a href="https://en.wikipedia.org/wiki/Occam%27s_razor">do not needlessly multiply entities</a></em>. If it isn&#8217;t necessary &#8212; if it isn&#8217;t contributing to the usefulness of the site &#8212; <em>then get rid of it.</em> As Sir Arthur Quiller-Couch admonished us long ago:</p><blockquote><p>Murder your darlings.</p></blockquote><p>It&#8217;s as applicable to web development and design as it always has been to literature.</p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[The arrogance of computer scientists]]></title><description><![CDATA[Deflate your fucking egos now, please]]></description><link>https://www.cantankerouscoder.com/p/the-arrogance-of-computer-scientists</link><guid isPermaLink="false">https://www.cantankerouscoder.com/p/the-arrogance-of-computer-scientists</guid><dc:creator><![CDATA[Chas.]]></dc:creator><pubDate>Fri, 27 Jan 2023 00:56:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yuDM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;m back! And more cantankerous than ever.</p><p>One book that I found useful in the early days of my career  as a programmer (if you can call it that) was the famous <em>Structure and Interpretation of Computer Programs </em>by Abelson and Sussman, also known as SICP or &#8220;the blue book&#8221;. Published in 1984, it was intended for use in MIT&#8217;s Introductory Programming course, 6.001.</p><p>It is widely viewed as the best book of its kind, and it is quite detailed and comprehensive, but not without its flaws. Its biggest flaw is that it is written in an elitist manner, clearly intended for the brightest of the bright at schools such as MIT and CalTech. Average Joes need not bother.</p><p>As such, it is heavily focused on mathematics. If you&#8217;re a lover of category theory, mathematical proofs, the lambda calculus, and very abstract language and concepts, well, this is the book for you.</p><p>Unfortunately, this leaves out an enormous number of people&#8212;the majority, in truth&#8212;who would benefit greatly from the lessons in this book.</p><h2>LISPing</h2><p>Another choice made in the book, and a good one, I think, was to use a dialect of LISP called Scheme. While most people who program for a living do <em>not</em> use a variant of LISP, the simplicity of the language and its lack of &#8220;noise&#8221; makes it an excellent choice for focusing on <em>how things work</em> rather than what syntax to use.<br><br>And LISP has other benefits, too, such as that the code is itself data and can be manipulated as data. That&#8217;s fun.</p><p>The focus on such concepts as Fibonacci sequences, Euclid&#8217;s Algorithm, etc., mmm, not so much. The naming could be a bit better, too.</p><p>But hey, it was 1984, right? Surely, we&#8217;ve come a long way since then, especially in our understanding of cognitive function, cognitive load, and pedagogy.</p><h2>It&#8217;s 1984 all over again</h2><p>So imagine my surprise yesterday when I discovered that SICP has been &#8220;translated&#8221; into different languages. Different <em>programming</em> languages, that is. And there is a version for JavaScript! And what&#8217;s more, it is available for <em>free</em> in online form <em>with a playground</em> and interactive code blocks.</p><p>Nice!</p><h2>Or maybe not so nice after all</h2><p>The first crushing disappointment came when I discovered that the authors (translators?) had learned absolutely nothing in the intervening decades. The text is as abstruse and impenetrable as the original. All the heavy focus on mathematical algorithms has been retained. Elitism never gets old, I guess.</p><p>Apparently, if one wants to learn the secrets of computer programming without significant brain pain, one must look elsewhere.</p><p>Steeling myself, I decided to press on. I&#8217;m getting a bit old for this shit, but I&#8217;m not demented yet (wait&#8230; how would I know? hmm). Surely, I can get through this. And it will be interesting to see how they translated the Scheme code into JavaScript.</p><p>In the Foreword, the authors claim that Brendan Eich based JavaScript in part on Scheme. I guess he wasn&#8217;t paying close attention because there seems to be a lot of other junk crammed in, such as prototypal inheritance, a horrible Date object, and Objects masquerading as modules, but at least he got first-class functions and higher-order functions right, although, hmm, does the runtime optimize tail recursion?</p><p>But then it had only been <em>eleven years</em> since the publication of SICP. Maybe Brendan hadn&#8217;t had time to study the book carefully. Or maybe he got bogged down in all the math. Cut the guy some slack. He wrote the language in two weeks, or so they claim.</p><p>Anyway, I soldiered on. But then came the second crushing disappointment. In truth: a fatal blow.</p><h2>How to fuck shit up completely</h2><p>I&#8217;m part way through the first chapter and I come across this:</p><pre><code>function sum_of_squares(x, y) {
  return square(x) + square(y);
}</code></pre><p>WTF? Is this some kind of sick joke? <em>Everyone</em> knows that the convention in JavaScript is <code>camelCase</code> not <code>snake_case</code>. This function should be called <code>sumOfSquares</code> not <code>sum_of_squares</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yuDM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yuDM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png 424w, https://substackcdn.com/image/fetch/$s_!yuDM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png 848w, https://substackcdn.com/image/fetch/$s_!yuDM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png 1272w, https://substackcdn.com/image/fetch/$s_!yuDM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yuDM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png" width="1286" height="462" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:462,&quot;width&quot;:1286,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72201,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yuDM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png 424w, https://substackcdn.com/image/fetch/$s_!yuDM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png 848w, https://substackcdn.com/image/fetch/$s_!yuDM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.png 1272w, https://substackcdn.com/image/fetch/$s_!yuDM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F212a94c9-579d-41f3-9a78-f0564bc6ee61_1286x462.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 role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Say it ain&#8217;t so!</figcaption></figure></div><p>Now you may think that this is a trivial thing, but it is not trivial at all. And if you&#8217;re going to argue that it is trivial, <em>then it must be trivial to <strong>get it right</strong></em>. So why would you perversely fuck this up?</p><p>But as I say, it is <em>not trivial at all</em>. Consistent formatting of code following a convention is very important to making code transportable, reusable, and, most of all, <em>comprehensible</em> by the next programmer to touch it.</p><p><em>That&#8217;s why we have conventions.</em></p><p>So why oh why would they do something this stupid? They explain their reasons in a footnote:</p><blockquote><p>The way multi-part names such as <code>sum_of_squares</code> are written affects the readability of programs, and programming communities differ on this. According to the common JavaScript convention, called <em>camel case</em>, the name would be <code>sumOfSquares</code>. The convention used in this book is called <em>snake case</em>, and was chosen for its closer resemblance to the convention used in the Scheme version of this book, where hyphens play the role of our underscores.</p></blockquote><p>Holy shit! They <em>begin</em> by stating that the way multi-part names are written <strong>affects the readability of programs</strong> and that <strong>programming communities differ on this</strong><em>. </em>Correct!</p><p>Then they <em>admit</em> that the JavaScript convention &#8212; <em>the one decided on by the JavaScript programming community</em> &#8212; is to use <code>camelCase</code> rather than <code>snake_case</code>.</p><p>And <em>then</em> they say that they are going to <strong>ignore the convention completely</strong><em><strong> </strong></em>going against the JavaScript community (frankly, an <em>insult</em> to the community&#8212;but apparently <em>they know better</em>) because&#8230; wait for it&#8230; <em>snake_case more closely resembles the train-case of the original book</em>.</p><p><strong>This is a blatant falsehood. It is complete horseshit. They are lying.</strong></p><p>The original SICP, for all its flaws, respects the conventions of Scheme, its chosen language. If you wanted to mirror the original book, the obvious course of action would be to <em>respect the conventions of JavaScript. </em>Isn&#8217;t the point of the &#8220;translation&#8221; to show us that the language, Turing complete, is irrelevant?</p><p>But instead, much of the JavaScript in the book is <em>wrong.</em> It uses the wrong convention, so anyone new to JavaScript and hoping to learn it from this book will learn it the <em>wrong way.</em> And that will make it so much harder when they try to get a job in the community and they have to <em>unlearn</em> the incorrect convention and learn the correct one.</p><p>Clearly, this book is not intended to teach people to program, and definitely not in JavaScript. It is intended for <em>computer science students</em> and JavaScript is just a throwaway language, so it&#8217;s no big deal to mutilate it to fit the prejudices of the authors. It&#8217;s a slap in the face to JavaScript and the JavaScript community.</p><p>Why the hell would you do that to your readers? To make the function and variable names look superficially a little more like those in the original book, <em>which most readers of the JS version will never read?</em> Here&#8217;s a news flash: <code>train-case</code> and <code>snake_case</code> are not the same, and the similarity is actually a <em>drawback</em> as it is easier to miss the difference.</p><p>The truth is that <em>they hate camelCase</em>. They mention that there are arguments about readability. Well, <em>guess which side of those arguments they take. </em>Yep. They believe that <code>camelCase</code> is just wrong, and so with utter disregard for the JavaScript community, they shove their bias down their reader&#8217;s throats.</p><p>That, my friends, is <em>arrogance</em>. Towering arrogance. The kind you find in <em>ivory</em> towers.</p><h2>But they&#8217;re not done yet!</h2><p>In the very next footnote, they add:</p><blockquote><p>Our JavaScript environment includes all functions and constants of ECMAScript's <a href="https://www.ecma-international.org/ecma-262/9.0/index.html#sec-math-object">Math object</a>, under the names <code>math_</code>&#8230;&#8230;. For example, ECMAScript's <code>Math.log</code> is available as <code>math_log</code>. The MIT Press web page for this book includes the JavaScript package <code>sicp</code> that provides these and all other JavaScript functions that are considered primitive in the book.</p></blockquote><p>Seriously? They have literally mapped all the Math module&#8217;s functions to new names to confuse the JavaScript programmer still further, and to, I guess, <em>hide the ugly Math module</em>. Back to the cellar, hideous Math monstrosity!</p><p>I swear you can&#8217;t make this shit up.</p><p>Why the fuck bother to rewrite SICP in JavaScript <em>if you think that JS is a shit, second-class language and needs &#8220;cleaning up&#8221; to be considered worthy?</em></p><p>The SICP JS version, especially given its free, online format, could have been a major step forward&#8212;updated to be more readable, to take advantage of advances in teaching and learning, to focus more on real-world uses, and to feature a workhorse language such as JavaScript rather than an abstract, academic one such as LISP. It could have opened up SICP to a whole new audience.</p><p>Instead it is a regression, incorporating the worst aspects of computer science elitism and arrogance and retaining its opaque, pompous prose while disrespecting the language and community it pretends to embrace.</p><p>What a shame. Maybe in another forty years we can try again.</p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item></channel></rss>