
<?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[Matt's Blog]]></title><description><![CDATA[A random assortment of thoughts and projects from a software engineer]]></description><link>https://matthagy.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!hUHw!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d22ce5c-9775-41e5-ad7d-f63b40872b83_400x400.png</url><title>Matt&apos;s Blog</title><link>https://matthagy.substack.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 17 Jun 2026 09:29:06 GMT</lastBuildDate><atom:link href="https://matthagy.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Matt Hagy]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[matthagy@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[matthagy@substack.com]]></itunes:email><itunes:name><![CDATA[Matt Hagy]]></itunes:name></itunes:owner><itunes:author><![CDATA[Matt Hagy]]></itunes:author><googleplay:owner><![CDATA[matthagy@substack.com]]></googleplay:owner><googleplay:email><![CDATA[matthagy@substack.com]]></googleplay:email><googleplay:author><![CDATA[Matt Hagy]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Testing direct ChatGPT o3 Upload]]></title><description><![CDATA[Adding a new lag based measure for Substack Video vs. YouTube Uploading]]></description><link>https://matthagy.substack.com/p/testing-direct-chatgpt-o3-upload</link><guid isPermaLink="false">https://matthagy.substack.com/p/testing-direct-chatgpt-o3-upload</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Thu, 24 Jul 2025 06:18:14 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/169113669/bc70dc34a28a1c45f8b2e3d8770658c2.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Just simplifying the x.com linkage when relying entirely on ChatGPT o3 desktop on increasingly challenging Python code graphs w/ different syntax theories</p>]]></content:encoded></item><item><title><![CDATA[Proposed Student Debt Forgiveness Simulations]]></title><description><![CDATA[Using the Student Debt Issue to Enhance Democratic Candidate Vibes via Policy Simulations]]></description><link>https://matthagy.substack.com/p/proposed-student-debt-forgiveness</link><guid isPermaLink="false">https://matthagy.substack.com/p/proposed-student-debt-forgiveness</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Fri, 07 Mar 2025 08:58:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Kkwe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Why has the student debt issue been so salient among Democrats&#8212;so much so that we have explored novel legal theories to financially benefit some constituencies without congressional action? It seems that since Obama&#8217;s second term, there has been growing support among limited yet influential parts of our party for our electoral determinant. So much so that it can commonly become a core liability among primary candidates, the general election, and even our administration&#8217;s public image when in office. By extension, we could also imagine this issue being heavily correlated with other fringe positions, e.g., &#8220;supporting government-funded sex change operations for illegal immigrants.&#8221;</p><p>It is my hope that we can flip the dynamics to better isolate these extremists in our own party while developing broadly popular proposals. Combined with sufficient reforms to lending criteria, we could even imagine a bill passing Congress that would avoid future exploitative lending from both private and public institutions, as well as help out existing borrowers who have been unfairly burdened with debt relative to earnings. We may even hope that alleviating this burden will better motivate them in their vocational planning and thereby increase their tax contributions going forward. And with such an aim toward policy development, we may hopefully enhance our Democratic political success moving forward.</p><p>To all of these ends, I am proposing that we develop interactive simulation tools to refine both forgiveness and lending criteria. These will initially be quite simple and just help us refine our understanding of the challenges within existing frameworks. From there, we can develop a minimalistic, interactive, browser-based simulation to allow for broader experimentation and commenting on the work so far. Over time, our methods can be refined, and tools like GitHub will allow for outside contributions&#8212;or even just commenting and documenting issues.</p><p>It&#8217;s quite uncertain whether any of this would actually be productive toward helping Democrats. Yet at most, it&#8217;ll be a fun project to work on for myself and anyone else interested. While we may risk just learning the lesson of &#8220;let&#8217;s not do that again&#8221; and best just learn how to better work with certain modern tools, we may aspire to have some growing positive contribution. The following image from an unrelated project shows how we could be both quite uncertain about the future while still imagining this working well in a probabilistic sense.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kkwe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kkwe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png 424w, https://substackcdn.com/image/fetch/$s_!Kkwe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png 848w, https://substackcdn.com/image/fetch/$s_!Kkwe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png 1272w, https://substackcdn.com/image/fetch/$s_!Kkwe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kkwe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png" width="704" height="550" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d599ee4c-34f1-4f92-826a-7d339227f602_704x550.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:550,&quot;width&quot;:704,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53593,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Kkwe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png 424w, https://substackcdn.com/image/fetch/$s_!Kkwe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png 848w, https://substackcdn.com/image/fetch/$s_!Kkwe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.png 1272w, https://substackcdn.com/image/fetch/$s_!Kkwe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd599ee4c-34f1-4f92-826a-7d339227f602_704x550.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>Using the following list to share some related ideas that excite me at this stage for future reference in developing this project.</p><ul><li><p>Used GenAI to convert between narrative structure and quantitative models in the simulation</p></li><li><p>Conversely, use GenAI to generate narratives about how candidates could be perceived by different segments of the population</p></li><li><p>Define hypothetical people this could apply to in terms of either:</p><ul><li><p>Current voter</p></li><li><p>Recipient as current debt holder</p></li><li><p>Future debt holders looking to borrow for education: Both in terms of</p><ul><li><p>Changes to student debt issuing policies</p></li><li><p>What are they borrowing for: how much does it cost and how do we expect it to impact their contributions to our economy in terms of income</p></li></ul></li></ul></li><li><p>Quantify aggregate impact across above populations</p></li><li><p>Refine above methods using increasingly accurate and fine-grained statistics about our actual American population</p></li><li><p>Allow participants in this project to show their commitment with various measures</p><ul><li><p>Commenting in various parts of the project like this blog and future mechanisms in a future GitHub project that includes issues and pull requests</p></li><li><p>Contributing code, analysis, relevant statistics, etc. in their above comments</p></li><li><p>Credibly showing their commitment by donating to candidates that roughly match certain criteria</p><ul><li><p>Definitely not donations laundered through this project for a fixed fee. This shouldn&#8217;t need funding for a long time and if someone ever did convert this into a funded project then that needs to be very explicit in terms of how it is being funded. We certainly don&#8217;t need another exploitative voting/gambling project that deceitfully just takes it&#8217;s own cut.</p></li></ul></li></ul></li></ul><h1>Background March 2002 in NYC, NY, From Greensburg PA, for Slayer 9/11 Cohorts of Millennial for a New Hole in Our World of Nirvana ENRON BS</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B442!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B442!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!B442!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!B442!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!B442!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B442!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/add9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3178107,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B442!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!B442!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!B442!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!B442!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadd9a7ee-caca-4efb-b5b9-6e458a33fd72_1536x1024.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><div id="youtube2-D60QnpI_xH4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;D60QnpI_xH4&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/D60QnpI_xH4?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>Current Vision 2026-05-25</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f4hm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f4hm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.jpeg 424w, https://substackcdn.com/image/fetch/$s_!f4hm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.jpeg 848w, https://substackcdn.com/image/fetch/$s_!f4hm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!f4hm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f4hm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.jpeg" width="1201" height="1309" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1309,&quot;width&quot;:1201,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!f4hm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.jpeg 424w, https://substackcdn.com/image/fetch/$s_!f4hm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.jpeg 848w, https://substackcdn.com/image/fetch/$s_!f4hm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!f4hm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe1b9314-2fa1-4229-bcc3-d42527ac5e19_1201x1309.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><div id="youtube2-7iNbnineUCI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;7iNbnineUCI&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/7iNbnineUCI?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Advise for evening the odds between SP500 and Rippling w/o Guardians of COBRA Teething Rings</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fDGs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fDGs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png 424w, https://substackcdn.com/image/fetch/$s_!fDGs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png 848w, https://substackcdn.com/image/fetch/$s_!fDGs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png 1272w, https://substackcdn.com/image/fetch/$s_!fDGs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fDGs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png" width="1456" height="1001" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1001,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:452271,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fDGs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png 424w, https://substackcdn.com/image/fetch/$s_!fDGs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png 848w, https://substackcdn.com/image/fetch/$s_!fDGs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.png 1272w, https://substackcdn.com/image/fetch/$s_!fDGs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb32ccfe3-0202-45ed-952b-3bc1524a0b13_2030x1396.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"></figcaption></figure></div><div id="youtube2--w6duQhWuVk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;-w6duQhWuVk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/-w6duQhWuVk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1><a href="https://gist.github.com/matthagy/e8c067e64801a51fdb7f4a436371d85a">Professional Summary 2026-05-25</a></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2RlM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2RlM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png 424w, https://substackcdn.com/image/fetch/$s_!2RlM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png 848w, https://substackcdn.com/image/fetch/$s_!2RlM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png 1272w, https://substackcdn.com/image/fetch/$s_!2RlM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2RlM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png" width="1456" height="743" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:743,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:322769,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2RlM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png 424w, https://substackcdn.com/image/fetch/$s_!2RlM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png 848w, https://substackcdn.com/image/fetch/$s_!2RlM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.png 1272w, https://substackcdn.com/image/fetch/$s_!2RlM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983af874-c3a9-462a-a07e-411b377c2f67_1890x964.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pfDD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pfDD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pfDD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pfDD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pfDD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pfDD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.jpeg" width="1456" height="695" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:695,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&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="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!pfDD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pfDD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pfDD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pfDD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dbe5784-9241-46fc-aa32-88edaf1c8875_2414x1152.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0i0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0i0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.png 424w, https://substackcdn.com/image/fetch/$s_!0i0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.png 848w, https://substackcdn.com/image/fetch/$s_!0i0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.png 1272w, https://substackcdn.com/image/fetch/$s_!0i0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0i0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.png" width="1456" height="1131" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b75dbe74-e82b-437c-8217-64256056981a_1944x1510.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1131,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195784,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0i0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.png 424w, https://substackcdn.com/image/fetch/$s_!0i0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.png 848w, https://substackcdn.com/image/fetch/$s_!0i0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.png 1272w, https://substackcdn.com/image/fetch/$s_!0i0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb75dbe74-e82b-437c-8217-64256056981a_1944x1510.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JurD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JurD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png 424w, https://substackcdn.com/image/fetch/$s_!JurD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png 848w, https://substackcdn.com/image/fetch/$s_!JurD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png 1272w, https://substackcdn.com/image/fetch/$s_!JurD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JurD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png" width="1456" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:441953,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JurD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png 424w, https://substackcdn.com/image/fetch/$s_!JurD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png 848w, https://substackcdn.com/image/fetch/$s_!JurD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.png 1272w, https://substackcdn.com/image/fetch/$s_!JurD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b81d648-f69a-4aca-8dae-d49f33441684_1988x1366.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-V3J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-V3J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png 424w, https://substackcdn.com/image/fetch/$s_!-V3J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png 848w, https://substackcdn.com/image/fetch/$s_!-V3J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png 1272w, https://substackcdn.com/image/fetch/$s_!-V3J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-V3J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:137187,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-V3J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png 424w, https://substackcdn.com/image/fetch/$s_!-V3J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png 848w, https://substackcdn.com/image/fetch/$s_!-V3J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.png 1272w, https://substackcdn.com/image/fetch/$s_!-V3J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a95daa8-9aa5-4e23-b41f-f81e6ab6706e_1470x824.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gmgv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gmgv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png 424w, https://substackcdn.com/image/fetch/$s_!gmgv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png 848w, https://substackcdn.com/image/fetch/$s_!gmgv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png 1272w, https://substackcdn.com/image/fetch/$s_!gmgv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gmgv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:228185,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gmgv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png 424w, https://substackcdn.com/image/fetch/$s_!gmgv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png 848w, https://substackcdn.com/image/fetch/$s_!gmgv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.png 1272w, https://substackcdn.com/image/fetch/$s_!gmgv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a1d0d1-97b7-4684-9921-960b36693e92_1916x1158.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><a href="https://gist.github.com/matthagy/077d25e1225b0d227b3e8db13a4a212b">cash_app_layers_chatgpt_2026-06-03.yaml</a></p><div id="youtube2-KKrpN4mIJ7g" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;KKrpN4mIJ7g&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/KKrpN4mIJ7g?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>Evolving GenAI Inspiration Board</h1><p>Before 2026-05-01 evolution of metavers</p><div id="youtube2-A7xiK-snyJk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;A7xiK-snyJk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/A7xiK-snyJk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZWtb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZWtb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png 424w, https://substackcdn.com/image/fetch/$s_!ZWtb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png 848w, https://substackcdn.com/image/fetch/$s_!ZWtb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png 1272w, https://substackcdn.com/image/fetch/$s_!ZWtb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZWtb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png" width="1456" height="952" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:952,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:466365,&quot;alt&quot;:&quot;&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;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ZWtb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png 424w, https://substackcdn.com/image/fetch/$s_!ZWtb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png 848w, https://substackcdn.com/image/fetch/$s_!ZWtb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.png 1272w, https://substackcdn.com/image/fetch/$s_!ZWtb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc660c7f-c970-463f-9430-4ba4675ec1e6_1676x1096.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><h3><a href="https://www.newgrounds.com/portal/view/153639">Modern MEGA Man 2D challenges that never seem to amaze Modern Gamers</a> </h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.newgrounds.com/portal/view/153639" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Vi9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.png 424w, https://substackcdn.com/image/fetch/$s_!_Vi9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.png 848w, https://substackcdn.com/image/fetch/$s_!_Vi9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.png 1272w, https://substackcdn.com/image/fetch/$s_!_Vi9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Vi9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.png" width="1456" height="842" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:842,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:290962,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.newgrounds.com/portal/view/153639&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_Vi9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.png 424w, https://substackcdn.com/image/fetch/$s_!_Vi9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.png 848w, https://substackcdn.com/image/fetch/$s_!_Vi9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.png 1272w, https://substackcdn.com/image/fetch/$s_!_Vi9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F301fbd21-ff19-4b83-89df-5c14361869b5_2006x1160.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><h3>Spotify Sync Crew at 2013 GT Gamer Houses</h3><iframe class="spotify-wrap playlist" data-attrs="{&quot;image&quot;:&quot;https://mosaic.scdn.co/640/ab67616d00001e0201ed248b4ac01c868e688322ab67616d00001e0237e656125c12bd964fc17bdaab67616d00001e024bc3576fd8ecebc996e45461ab67616d00001e02ddd09dd6bfcad726dbecc701&quot;,&quot;title&quot;:&quot;DH Open 2013&quot;,&quot;subtitle&quot;:&quot;By matthagy&quot;,&quot;description&quot;:&quot;Playlist&quot;,&quot;url&quot;:&quot;https://open.spotify.com/playlist/4bUFATbMbIwGs09BTmLttx&quot;,&quot;belowTheFold&quot;:true,&quot;noScroll&quot;:false}" src="https://open.spotify.com/embed/playlist/4bUFATbMbIwGs09BTmLttx" frameborder="0" gesture="media" allowfullscreen="true" allow="encrypted-media" loading="lazy" data-component-name="Spotify2ToDOM"></iframe><h3>2013-2Sigma Analytic Decay&#8230;.</h3><p><em>Following SigFig Calculators for Wiki Collections of Trackers  @1M Global Followers w 3/ RealWorld Guided Maps of Canada</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iW-F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iW-F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png 424w, https://substackcdn.com/image/fetch/$s_!iW-F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png 848w, https://substackcdn.com/image/fetch/$s_!iW-F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png 1272w, https://substackcdn.com/image/fetch/$s_!iW-F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iW-F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png" width="1456" height="891" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:891,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:408933,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iW-F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png 424w, https://substackcdn.com/image/fetch/$s_!iW-F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png 848w, https://substackcdn.com/image/fetch/$s_!iW-F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.png 1272w, https://substackcdn.com/image/fetch/$s_!iW-F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706763ba-006d-460b-823c-c1fa99a04859_2406x1472.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><h3>ContraCyclical StayCations Guides in Mexico, Canada, Colombia, CO-US, UK, TN-US, and NJ-US for PittCrews Visions in CA-ENRO-US</h3><div id="youtube2-l6X-dajKOWM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;l6X-dajKOWM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/l6X-dajKOWM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QELl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QELl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!QELl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!QELl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!QELl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QELl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3028849,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QELl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!QELl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!QELl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!QELl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2622e4e1-24e3-4ffa-9c94-5cc326cce07b_1536x1024.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"></figcaption></figure></div><div id="youtube2-IuS5huqOND4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;IuS5huqOND4&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/IuS5huqOND4?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Best 2010-30 FinTechCrew We&#8217;ve Found  For Millennial Investors, PostVanguard over MMKT 401K Leverage</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k0kn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k0kn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png 424w, https://substackcdn.com/image/fetch/$s_!k0kn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png 848w, https://substackcdn.com/image/fetch/$s_!k0kn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!k0kn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k0kn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png" width="1456" height="804" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:804,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:182554,&quot;alt&quot;:&quot;&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;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!k0kn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png 424w, https://substackcdn.com/image/fetch/$s_!k0kn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png 848w, https://substackcdn.com/image/fetch/$s_!k0kn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!k0kn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00987d38-5859-4bb1-a512-dad00e7bb846_2332x1288.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><h3>Guiding Men Through 2000 Generations of MediaMath</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cat8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cat8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Cat8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Cat8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Cat8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cat8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.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;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!Cat8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Cat8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Cat8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Cat8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c55844d-09ec-49cb-a8c7-1f6271bb4633_1536x1024.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><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;7ec45239-6738-4ea6-a4d6-c946d3cab1a8&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">people:
  - name: Ted Turner
    born: 1938-11-19
    died: 2026-05-06
    status: deceased
    wikipedia: "https://en.wikipedia.org/wiki/Ted_Turner"

  - name: Sean Hannity
    born: 1961-12-30
    died: null
    status: alive
    wikipedia: "https://en.wikipedia.org/wiki/Sean_Hannity"

  - name: Rush Limbaugh
    born: 1951-01-12
    died: 2021-02-17
    status: deceased
    wikipedia: "https://en.wikipedia.org/wiki/Rush_Limbaugh"

  - name: Tucker Carlson
    born: 1969-05-16
    died: null
    status: alive
    wikipedia: "https://en.wikipedia.org/wiki/Tucker_Carlson"

  - name: Alex Jones
    born: 1974-02-11
    died: null
    status: alive
    wikipedia: "https://en.wikipedia.org/wiki/Alex_Jones"

  - name: Joe Rogan
    born: 1967-08-11
    died: null
    status: alive
    wikipedia: "https://en.wikipedia.org/wiki/Joe_Rogan"

  - name: Ben Thompson
    born: null
    died: null
    status: alive
    wikipedia: "https://en.wikipedia.org/wiki/Ben_Thompson_(analyst)"

  - name: Stephen Colbert
    born: 1964-05-13
    died: null
    status: alive
    wikipedia: "https://en.wikipedia.org/wiki/Stephen_Colbert"

  - name: Coleman Hughes
    born: 1996-02-25
    died: null
    status: alive
    wikipedia: "https://en.wikipedia.org/wiki/Coleman_Hughes"

  - name: Chris Best
    born: null
    died: null
    status: alive
    wikipedia: null
    notes:
      - "Co-founder and CEO of Substack"
      - "Public birth date not clearly available"</code></pre></div><h3>Earlier GenX/Y Appreciations</h3><div id="youtube2-Jy6AOGRsR80" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Jy6AOGRsR80&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Jy6AOGRsR80?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Favorite KickStarter of the Year</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.kickstarter.com/projects/everysight/maverick-full-color-ai-ar-glasses" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gFCt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78d730f9-db4d-4499-86d4-9c41b48afe69_1024x576.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gFCt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78d730f9-db4d-4499-86d4-9c41b48afe69_1024x576.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gFCt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78d730f9-db4d-4499-86d4-9c41b48afe69_1024x576.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gFCt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78d730f9-db4d-4499-86d4-9c41b48afe69_1024x576.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gFCt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78d730f9-db4d-4499-86d4-9c41b48afe69_1024x576.jpeg" width="1024" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78d730f9-db4d-4499-86d4-9c41b48afe69_1024x576.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.kickstarter.com/projects/everysight/maverick-full-color-ai-ar-glasses&quot;,&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_!gFCt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78d730f9-db4d-4499-86d4-9c41b48afe69_1024x576.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gFCt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78d730f9-db4d-4499-86d4-9c41b48afe69_1024x576.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gFCt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78d730f9-db4d-4499-86d4-9c41b48afe69_1024x576.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gFCt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78d730f9-db4d-4499-86d4-9c41b48afe69_1024x576.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><h3>Proof that Marijuana and Alcohol can Kill Faster than Drones can Monitor the Pressure Cookers</h3><div id="youtube2-T4O5LccxCDo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;T4O5LccxCDo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/T4O5LccxCDo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>RealWorld PA Collectors of Horrible End Ground Visions </h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l4SS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l4SS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.jpeg 424w, https://substackcdn.com/image/fetch/$s_!l4SS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.jpeg 848w, https://substackcdn.com/image/fetch/$s_!l4SS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!l4SS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l4SS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.jpeg" width="1456" height="986" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:986,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!l4SS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.jpeg 424w, https://substackcdn.com/image/fetch/$s_!l4SS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.jpeg 848w, https://substackcdn.com/image/fetch/$s_!l4SS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!l4SS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f7e188f-af10-404d-9c88-775a72b5a502_2038x1380.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZfHF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZfHF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.png 424w, https://substackcdn.com/image/fetch/$s_!ZfHF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.png 848w, https://substackcdn.com/image/fetch/$s_!ZfHF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.png 1272w, https://substackcdn.com/image/fetch/$s_!ZfHF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZfHF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.png" width="1456" height="577" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02f27128-a066-4975-bb83-7f1e28422204_1872x742.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:577,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111328,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZfHF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.png 424w, https://substackcdn.com/image/fetch/$s_!ZfHF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.png 848w, https://substackcdn.com/image/fetch/$s_!ZfHF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.png 1272w, https://substackcdn.com/image/fetch/$s_!ZfHF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02f27128-a066-4975-bb83-7f1e28422204_1872x742.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w-bm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w-bm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png 424w, https://substackcdn.com/image/fetch/$s_!w-bm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png 848w, https://substackcdn.com/image/fetch/$s_!w-bm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png 1272w, https://substackcdn.com/image/fetch/$s_!w-bm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w-bm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png" width="1456" height="688" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:688,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:183445,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!w-bm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png 424w, https://substackcdn.com/image/fetch/$s_!w-bm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png 848w, https://substackcdn.com/image/fetch/$s_!w-bm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.png 1272w, https://substackcdn.com/image/fetch/$s_!w-bm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda7e4b3d-533b-402c-aee5-e0944761aa81_2108x996.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><div id="youtube2-M3jChjXuq24" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;M3jChjXuq24&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/M3jChjXuq24?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Better Design for the 12 to 24 year cohorts that must bear the Twisters Drama Narratives</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lwp7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lwp7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Lwp7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Lwp7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Lwp7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lwp7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2853499,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lwp7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Lwp7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Lwp7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Lwp7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86c05c24-5e55-4689-90b0-c9db3e355007_1536x1024.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><h3>Cool 2018-26 NorthWard Signal of Captive Audiences</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Scf0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Scf0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png 424w, https://substackcdn.com/image/fetch/$s_!Scf0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png 848w, https://substackcdn.com/image/fetch/$s_!Scf0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png 1272w, https://substackcdn.com/image/fetch/$s_!Scf0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Scf0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png" width="1456" height="1097" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1097,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1027092,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Scf0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png 424w, https://substackcdn.com/image/fetch/$s_!Scf0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png 848w, https://substackcdn.com/image/fetch/$s_!Scf0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.png 1272w, https://substackcdn.com/image/fetch/$s_!Scf0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24dc1489-7742-4062-a340-f6c6f8f017a5_1978x1490.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><a href="https://maps.app.goo.gl/NGXM5CQzkwG9n6eJ7">https://maps.app.goo.gl/NGXM5CQzkwG9n6eJ7</a></p><h3>Common Reframing when Hyping 90s Camera Generations of Lensing</h3><div id="youtube2-ITwA9M2Qtcc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ITwA9M2Qtcc&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/ITwA9M2Qtcc?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X58W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X58W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.jpeg 424w, https://substackcdn.com/image/fetch/$s_!X58W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.jpeg 848w, https://substackcdn.com/image/fetch/$s_!X58W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!X58W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X58W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.jpeg" width="1456" height="1253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1253,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&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="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!X58W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.jpeg 424w, https://substackcdn.com/image/fetch/$s_!X58W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.jpeg 848w, https://substackcdn.com/image/fetch/$s_!X58W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!X58W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3923e15b-7ab6-4870-b513-823fbb0607ff_1754x1510.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"></figcaption></figure></div><div id="youtube2-AcN5ltm4BmQ" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;AcN5ltm4BmQ&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/AcN5ltm4BmQ?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-nepKKz-MzFM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;nepKKz-MzFM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/nepKKz-MzFM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-kvTRJZGWqF8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;kvTRJZGWqF8&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/kvTRJZGWqF8?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-FITNNeyb4RA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;FITNNeyb4RA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/FITNNeyb4RA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Focusing on Our Literal Losses since 2004</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YWMS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YWMS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png 424w, https://substackcdn.com/image/fetch/$s_!YWMS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png 848w, https://substackcdn.com/image/fetch/$s_!YWMS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png 1272w, https://substackcdn.com/image/fetch/$s_!YWMS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YWMS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png" width="1456" height="1041" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1041,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:385461,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YWMS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png 424w, https://substackcdn.com/image/fetch/$s_!YWMS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png 848w, https://substackcdn.com/image/fetch/$s_!YWMS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.png 1272w, https://substackcdn.com/image/fetch/$s_!YWMS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24bad15-a202-49d5-be0e-6746ee11d4ce_2092x1496.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"></figcaption></figure></div><div id="youtube2-qFlWmyR79mc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;qFlWmyR79mc&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/qFlWmyR79mc?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!flMS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!flMS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png 424w, https://substackcdn.com/image/fetch/$s_!flMS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png 848w, https://substackcdn.com/image/fetch/$s_!flMS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png 1272w, https://substackcdn.com/image/fetch/$s_!flMS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!flMS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png" width="1456" height="685" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:685,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:861203,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!flMS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png 424w, https://substackcdn.com/image/fetch/$s_!flMS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png 848w, https://substackcdn.com/image/fetch/$s_!flMS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.png 1272w, https://substackcdn.com/image/fetch/$s_!flMS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf083b33-a05d-4a02-903c-c65ca502dc57_2232x1050.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Ysm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Ysm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png 424w, https://substackcdn.com/image/fetch/$s_!3Ysm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png 848w, https://substackcdn.com/image/fetch/$s_!3Ysm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png 1272w, https://substackcdn.com/image/fetch/$s_!3Ysm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Ysm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png" width="1456" height="786" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:786,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1278103,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3Ysm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png 424w, https://substackcdn.com/image/fetch/$s_!3Ysm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png 848w, https://substackcdn.com/image/fetch/$s_!3Ysm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.png 1272w, https://substackcdn.com/image/fetch/$s_!3Ysm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7c28ce-2b9e-4d21-aca2-cdfb0ac38d4f_2016x1088.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Di1a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Di1a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Di1a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Di1a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Di1a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Di1a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.jpeg" width="491" height="680" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:680,&quot;width&quot;:491,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!Di1a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Di1a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Di1a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Di1a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdeb4ffd-97d0-41aa-8ad6-dee74e6e9492_491x680.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pwoZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pwoZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pwoZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pwoZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pwoZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pwoZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.jpeg" width="764" height="432" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:432,&quot;width&quot;:764,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!pwoZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pwoZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pwoZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pwoZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F552f16b8-a30a-46aa-96ec-0c20547317d8_764x432.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><h3>Better Reframing for the 2010 Generation of Homebodies</h3><div id="youtube2-quHQAuO0lkg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;quHQAuO0lkg&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/quHQAuO0lkg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p></p><div id="youtube2-KTQnnwDN3eU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;KTQnnwDN3eU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/KTQnnwDN3eU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>2030 Rebates on AI Practices Levels at 80 to 180 APMs</h3><div id="youtube2-jm_sjGgQRNM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;jm_sjGgQRNM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/jm_sjGgQRNM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-31crA53Dgu0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;31crA53Dgu0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/31crA53Dgu0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-oKDjis1fg8E" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;oKDjis1fg8E&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/oKDjis1fg8E?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-sV7C6Ezl35A" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;sV7C6Ezl35A&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/sV7C6Ezl35A?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Worse Curse Yet for Hidden Traps of Shame</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6EMQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6EMQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png 424w, https://substackcdn.com/image/fetch/$s_!6EMQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png 848w, https://substackcdn.com/image/fetch/$s_!6EMQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png 1272w, https://substackcdn.com/image/fetch/$s_!6EMQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6EMQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png" width="1456" height="870" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:870,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:331531,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6EMQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png 424w, https://substackcdn.com/image/fetch/$s_!6EMQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png 848w, https://substackcdn.com/image/fetch/$s_!6EMQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.png 1272w, https://substackcdn.com/image/fetch/$s_!6EMQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F224b4091-9c61-4be1-9d57-8c5f12e52c17_2088x1248.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"></figcaption></figure></div><div id="youtube2-7SMBY4ezQkY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;7SMBY4ezQkY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/7SMBY4ezQkY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-Xu3FTEmN-eg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Xu3FTEmN-eg&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Xu3FTEmN-eg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Continuing the Loss of Intuition of OH- and NJ+ for SALT Loops</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gITa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gITa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png 424w, https://substackcdn.com/image/fetch/$s_!gITa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png 848w, https://substackcdn.com/image/fetch/$s_!gITa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png 1272w, https://substackcdn.com/image/fetch/$s_!gITa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gITa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png" width="1356" height="1400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1400,&quot;width&quot;:1356,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:898915,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gITa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png 424w, https://substackcdn.com/image/fetch/$s_!gITa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png 848w, https://substackcdn.com/image/fetch/$s_!gITa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.png 1272w, https://substackcdn.com/image/fetch/$s_!gITa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde667e73-4672-4bce-acfa-8efad7f243e3_1356x1400.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zRHG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zRHG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png 424w, https://substackcdn.com/image/fetch/$s_!zRHG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png 848w, https://substackcdn.com/image/fetch/$s_!zRHG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png 1272w, https://substackcdn.com/image/fetch/$s_!zRHG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zRHG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png" width="1380" height="1444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1444,&quot;width&quot;:1380,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:935983,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zRHG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png 424w, https://substackcdn.com/image/fetch/$s_!zRHG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png 848w, https://substackcdn.com/image/fetch/$s_!zRHG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.png 1272w, https://substackcdn.com/image/fetch/$s_!zRHG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bb0637f-4b08-4ab3-90e9-867b932d9d36_1380x1444.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WC4r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WC4r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png 424w, https://substackcdn.com/image/fetch/$s_!WC4r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png 848w, https://substackcdn.com/image/fetch/$s_!WC4r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png 1272w, https://substackcdn.com/image/fetch/$s_!WC4r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WC4r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png" width="1376" height="1326" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1326,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:771024,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WC4r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png 424w, https://substackcdn.com/image/fetch/$s_!WC4r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png 848w, https://substackcdn.com/image/fetch/$s_!WC4r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.png 1272w, https://substackcdn.com/image/fetch/$s_!WC4r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7919598-add2-4d22-93a9-6cbf6cf3befe_1376x1326.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FMLh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FMLh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png 424w, https://substackcdn.com/image/fetch/$s_!FMLh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png 848w, https://substackcdn.com/image/fetch/$s_!FMLh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!FMLh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FMLh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png" width="1456" height="985" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:985,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:756052,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FMLh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png 424w, https://substackcdn.com/image/fetch/$s_!FMLh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png 848w, https://substackcdn.com/image/fetch/$s_!FMLh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!FMLh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F983ebf2d-f680-46c5-bfa1-710337c556f5_1736x1174.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!df2T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!df2T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png 424w, https://substackcdn.com/image/fetch/$s_!df2T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png 848w, https://substackcdn.com/image/fetch/$s_!df2T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png 1272w, https://substackcdn.com/image/fetch/$s_!df2T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!df2T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png" width="1456" height="791" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:791,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:293459,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!df2T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png 424w, https://substackcdn.com/image/fetch/$s_!df2T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png 848w, https://substackcdn.com/image/fetch/$s_!df2T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.png 1272w, https://substackcdn.com/image/fetch/$s_!df2T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8110913e-ce26-4c4e-a5c9-d7ecf91c1888_1642x892.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6vYB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6vYB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png 424w, https://substackcdn.com/image/fetch/$s_!6vYB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png 848w, https://substackcdn.com/image/fetch/$s_!6vYB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png 1272w, https://substackcdn.com/image/fetch/$s_!6vYB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6vYB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png" width="1456" height="1186" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1186,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1053110,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6vYB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png 424w, https://substackcdn.com/image/fetch/$s_!6vYB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png 848w, https://substackcdn.com/image/fetch/$s_!6vYB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.png 1272w, https://substackcdn.com/image/fetch/$s_!6vYB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d2efe1-3c94-459c-b296-48269c59486c_1638x1334.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HWND!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HWND!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png 424w, https://substackcdn.com/image/fetch/$s_!HWND!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png 848w, https://substackcdn.com/image/fetch/$s_!HWND!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!HWND!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HWND!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png" width="1456" height="906" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:906,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:360769,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HWND!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png 424w, https://substackcdn.com/image/fetch/$s_!HWND!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png 848w, https://substackcdn.com/image/fetch/$s_!HWND!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!HWND!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb5f0cbb-d1ac-4e86-9d6f-31b5ab13c25e_1646x1024.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hyB0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hyB0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png 424w, https://substackcdn.com/image/fetch/$s_!hyB0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png 848w, https://substackcdn.com/image/fetch/$s_!hyB0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png 1272w, https://substackcdn.com/image/fetch/$s_!hyB0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hyB0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png" width="1456" height="1225" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1225,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1195897,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hyB0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png 424w, https://substackcdn.com/image/fetch/$s_!hyB0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png 848w, https://substackcdn.com/image/fetch/$s_!hyB0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.png 1272w, https://substackcdn.com/image/fetch/$s_!hyB0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baf3bc7-12dc-422e-ab26-e08e8b9ca536_1664x1400.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nu52!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nu52!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png 424w, https://substackcdn.com/image/fetch/$s_!nu52!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png 848w, https://substackcdn.com/image/fetch/$s_!nu52!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png 1272w, https://substackcdn.com/image/fetch/$s_!nu52!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nu52!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png" width="1456" height="1246" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1246,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:785579,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nu52!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png 424w, https://substackcdn.com/image/fetch/$s_!nu52!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png 848w, https://substackcdn.com/image/fetch/$s_!nu52!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.png 1272w, https://substackcdn.com/image/fetch/$s_!nu52!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc9f551c-d91b-4adf-9aa3-bf4bb261de3a_1636x1400.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QYGf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QYGf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png 424w, https://substackcdn.com/image/fetch/$s_!QYGf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png 848w, https://substackcdn.com/image/fetch/$s_!QYGf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png 1272w, https://substackcdn.com/image/fetch/$s_!QYGf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QYGf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png" width="1456" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:850701,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QYGf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png 424w, https://substackcdn.com/image/fetch/$s_!QYGf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png 848w, https://substackcdn.com/image/fetch/$s_!QYGf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.png 1272w, https://substackcdn.com/image/fetch/$s_!QYGf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc7bce53-017b-4df1-b4f9-6570b68e07b0_1628x1214.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RvE5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RvE5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png 424w, https://substackcdn.com/image/fetch/$s_!RvE5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png 848w, https://substackcdn.com/image/fetch/$s_!RvE5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png 1272w, https://substackcdn.com/image/fetch/$s_!RvE5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RvE5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png" width="1456" height="1204" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1204,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:929517,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RvE5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png 424w, https://substackcdn.com/image/fetch/$s_!RvE5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png 848w, https://substackcdn.com/image/fetch/$s_!RvE5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.png 1272w, https://substackcdn.com/image/fetch/$s_!RvE5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F200165bd-007f-4614-8a1b-f3ed07af7c20_1644x1360.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KduW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KduW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png 424w, https://substackcdn.com/image/fetch/$s_!KduW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png 848w, https://substackcdn.com/image/fetch/$s_!KduW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png 1272w, https://substackcdn.com/image/fetch/$s_!KduW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KduW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png" width="1456" height="1166" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1166,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:621538,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KduW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png 424w, https://substackcdn.com/image/fetch/$s_!KduW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png 848w, https://substackcdn.com/image/fetch/$s_!KduW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.png 1272w, https://substackcdn.com/image/fetch/$s_!KduW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15c503b4-d1ad-4412-a9fc-4ad4496712fa_1666x1334.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z_SV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z_SV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png 424w, https://substackcdn.com/image/fetch/$s_!z_SV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png 848w, https://substackcdn.com/image/fetch/$s_!z_SV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png 1272w, https://substackcdn.com/image/fetch/$s_!z_SV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z_SV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png" width="1456" height="1266" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1266,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:798856,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!z_SV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png 424w, https://substackcdn.com/image/fetch/$s_!z_SV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png 848w, https://substackcdn.com/image/fetch/$s_!z_SV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.png 1272w, https://substackcdn.com/image/fetch/$s_!z_SV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d9be285-aba0-4a20-b8a1-ac327819962e_1626x1414.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B2yF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B2yF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png 424w, https://substackcdn.com/image/fetch/$s_!B2yF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png 848w, https://substackcdn.com/image/fetch/$s_!B2yF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png 1272w, https://substackcdn.com/image/fetch/$s_!B2yF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B2yF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png" width="1456" height="1160" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1160,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1045826,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B2yF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png 424w, https://substackcdn.com/image/fetch/$s_!B2yF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png 848w, https://substackcdn.com/image/fetch/$s_!B2yF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.png 1272w, https://substackcdn.com/image/fetch/$s_!B2yF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd5a534-38c6-4411-b5da-d2ca7e19d12b_1644x1310.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NKFu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NKFu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png 424w, https://substackcdn.com/image/fetch/$s_!NKFu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png 848w, https://substackcdn.com/image/fetch/$s_!NKFu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png 1272w, https://substackcdn.com/image/fetch/$s_!NKFu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NKFu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png" width="1456" height="1125" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1125,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:932086,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NKFu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png 424w, https://substackcdn.com/image/fetch/$s_!NKFu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png 848w, https://substackcdn.com/image/fetch/$s_!NKFu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.png 1272w, https://substackcdn.com/image/fetch/$s_!NKFu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6179d92-f0ac-4f14-9e74-bb11c4913587_1674x1294.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f8W-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f8W-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png 424w, https://substackcdn.com/image/fetch/$s_!f8W-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png 848w, https://substackcdn.com/image/fetch/$s_!f8W-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png 1272w, https://substackcdn.com/image/fetch/$s_!f8W-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f8W-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png" width="1456" height="1044" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1044,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:858763,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f8W-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png 424w, https://substackcdn.com/image/fetch/$s_!f8W-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png 848w, https://substackcdn.com/image/fetch/$s_!f8W-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.png 1272w, https://substackcdn.com/image/fetch/$s_!f8W-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3cee6a6-5343-4975-b4d7-93a5bb5bca94_1634x1172.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zRl3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zRl3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png 424w, https://substackcdn.com/image/fetch/$s_!zRl3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png 848w, https://substackcdn.com/image/fetch/$s_!zRl3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!zRl3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zRl3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png" width="1456" height="1262" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1262,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:896206,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zRl3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png 424w, https://substackcdn.com/image/fetch/$s_!zRl3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png 848w, https://substackcdn.com/image/fetch/$s_!zRl3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!zRl3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa43dc2e5-f6b5-47ac-aa55-d1d0bfb3ccb7_1618x1402.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nIYp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nIYp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png 424w, https://substackcdn.com/image/fetch/$s_!nIYp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png 848w, https://substackcdn.com/image/fetch/$s_!nIYp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png 1272w, https://substackcdn.com/image/fetch/$s_!nIYp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nIYp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png" width="1456" height="1195" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1195,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:905376,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nIYp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png 424w, https://substackcdn.com/image/fetch/$s_!nIYp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png 848w, https://substackcdn.com/image/fetch/$s_!nIYp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.png 1272w, https://substackcdn.com/image/fetch/$s_!nIYp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8586b439-973c-44d4-aae5-c695c5667ee5_1626x1334.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RZpd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RZpd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png 424w, https://substackcdn.com/image/fetch/$s_!RZpd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png 848w, https://substackcdn.com/image/fetch/$s_!RZpd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!RZpd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RZpd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png" width="1456" height="1095" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1095,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1042058,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RZpd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png 424w, https://substackcdn.com/image/fetch/$s_!RZpd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png 848w, https://substackcdn.com/image/fetch/$s_!RZpd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!RZpd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75fa79b4-674b-44ef-941c-5c3b7a47a742_1662x1250.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Aoi6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Aoi6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png 424w, https://substackcdn.com/image/fetch/$s_!Aoi6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png 848w, https://substackcdn.com/image/fetch/$s_!Aoi6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png 1272w, https://substackcdn.com/image/fetch/$s_!Aoi6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Aoi6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png" width="1456" height="1025" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1025,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:769371,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Aoi6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png 424w, https://substackcdn.com/image/fetch/$s_!Aoi6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png 848w, https://substackcdn.com/image/fetch/$s_!Aoi6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.png 1272w, https://substackcdn.com/image/fetch/$s_!Aoi6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7c422a2-2c17-48dd-a05b-21383a5d1517_1670x1176.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a737!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a737!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png 424w, https://substackcdn.com/image/fetch/$s_!a737!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png 848w, https://substackcdn.com/image/fetch/$s_!a737!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png 1272w, https://substackcdn.com/image/fetch/$s_!a737!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a737!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png" width="1456" height="1002" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1002,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:684921,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!a737!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png 424w, https://substackcdn.com/image/fetch/$s_!a737!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png 848w, https://substackcdn.com/image/fetch/$s_!a737!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.png 1272w, https://substackcdn.com/image/fetch/$s_!a737!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eef016-bac8-4a55-aa5a-c792519c9a76_1602x1102.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EJFm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EJFm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png 424w, https://substackcdn.com/image/fetch/$s_!EJFm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png 848w, https://substackcdn.com/image/fetch/$s_!EJFm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png 1272w, https://substackcdn.com/image/fetch/$s_!EJFm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EJFm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png" width="1402" height="1384" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1384,&quot;width&quot;:1402,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:881732,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EJFm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png 424w, https://substackcdn.com/image/fetch/$s_!EJFm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png 848w, https://substackcdn.com/image/fetch/$s_!EJFm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.png 1272w, https://substackcdn.com/image/fetch/$s_!EJFm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9acac18c-55e4-4f93-8d5c-de64902a54bb_1402x1384.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S--4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S--4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png 424w, https://substackcdn.com/image/fetch/$s_!S--4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png 848w, https://substackcdn.com/image/fetch/$s_!S--4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png 1272w, https://substackcdn.com/image/fetch/$s_!S--4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S--4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png" width="1382" height="1354" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1354,&quot;width&quot;:1382,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:995476,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S--4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png 424w, https://substackcdn.com/image/fetch/$s_!S--4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png 848w, https://substackcdn.com/image/fetch/$s_!S--4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.png 1272w, https://substackcdn.com/image/fetch/$s_!S--4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51125202-e8fe-4101-96c7-b397dfb24f79_1382x1354.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AiX4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AiX4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png 424w, https://substackcdn.com/image/fetch/$s_!AiX4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png 848w, https://substackcdn.com/image/fetch/$s_!AiX4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png 1272w, https://substackcdn.com/image/fetch/$s_!AiX4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AiX4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png" width="1376" height="1336" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1336,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:564807,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AiX4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png 424w, https://substackcdn.com/image/fetch/$s_!AiX4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png 848w, https://substackcdn.com/image/fetch/$s_!AiX4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.png 1272w, https://substackcdn.com/image/fetch/$s_!AiX4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff255d7d3-ad1a-462d-a9be-58e03b91b9db_1376x1336.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZZXw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZZXw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png 424w, https://substackcdn.com/image/fetch/$s_!ZZXw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png 848w, https://substackcdn.com/image/fetch/$s_!ZZXw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!ZZXw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZZXw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png" width="1368" height="1352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1352,&quot;width&quot;:1368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:393112,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZZXw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png 424w, https://substackcdn.com/image/fetch/$s_!ZZXw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png 848w, https://substackcdn.com/image/fetch/$s_!ZZXw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!ZZXw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e8d88c-f854-4111-9aa8-6c9cf5e8df9d_1368x1352.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sryN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sryN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png 424w, https://substackcdn.com/image/fetch/$s_!sryN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png 848w, https://substackcdn.com/image/fetch/$s_!sryN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png 1272w, https://substackcdn.com/image/fetch/$s_!sryN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sryN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png" width="1322" height="1150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1150,&quot;width&quot;:1322,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100384,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sryN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png 424w, https://substackcdn.com/image/fetch/$s_!sryN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png 848w, https://substackcdn.com/image/fetch/$s_!sryN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.png 1272w, https://substackcdn.com/image/fetch/$s_!sryN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb76d5850-47fc-478d-bed6-99c27b2d0991_1322x1150.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Sstu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sstu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png 424w, https://substackcdn.com/image/fetch/$s_!Sstu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png 848w, https://substackcdn.com/image/fetch/$s_!Sstu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!Sstu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sstu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png" width="1400" height="1320" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1320,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:808191,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Sstu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png 424w, https://substackcdn.com/image/fetch/$s_!Sstu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png 848w, https://substackcdn.com/image/fetch/$s_!Sstu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!Sstu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d761b78-2dfa-475f-ad66-9eff6b7d9705_1400x1320.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!apkf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!apkf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png 424w, https://substackcdn.com/image/fetch/$s_!apkf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png 848w, https://substackcdn.com/image/fetch/$s_!apkf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png 1272w, https://substackcdn.com/image/fetch/$s_!apkf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!apkf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png" width="1368" height="1296" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1296,&quot;width&quot;:1368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:768597,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!apkf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png 424w, https://substackcdn.com/image/fetch/$s_!apkf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png 848w, https://substackcdn.com/image/fetch/$s_!apkf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.png 1272w, https://substackcdn.com/image/fetch/$s_!apkf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F794bec44-2ddc-458a-a8e0-c449c0363b3a_1368x1296.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-K5y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-K5y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png 424w, https://substackcdn.com/image/fetch/$s_!-K5y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png 848w, https://substackcdn.com/image/fetch/$s_!-K5y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png 1272w, https://substackcdn.com/image/fetch/$s_!-K5y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-K5y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png" width="1396" height="1194" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1194,&quot;width&quot;:1396,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:350647,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-K5y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png 424w, https://substackcdn.com/image/fetch/$s_!-K5y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png 848w, https://substackcdn.com/image/fetch/$s_!-K5y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.png 1272w, https://substackcdn.com/image/fetch/$s_!-K5y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac21ae2f-4d81-487b-aab1-74059ce25ed7_1396x1194.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4duT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4duT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png 424w, https://substackcdn.com/image/fetch/$s_!4duT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png 848w, https://substackcdn.com/image/fetch/$s_!4duT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png 1272w, https://substackcdn.com/image/fetch/$s_!4duT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4duT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png" width="1342" height="1282" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1282,&quot;width&quot;:1342,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:952933,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4duT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png 424w, https://substackcdn.com/image/fetch/$s_!4duT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png 848w, https://substackcdn.com/image/fetch/$s_!4duT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.png 1272w, https://substackcdn.com/image/fetch/$s_!4duT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b26dff-e8de-4632-a1ae-51c77d3cb295_1342x1282.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z3eg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z3eg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png 424w, https://substackcdn.com/image/fetch/$s_!z3eg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png 848w, https://substackcdn.com/image/fetch/$s_!z3eg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png 1272w, https://substackcdn.com/image/fetch/$s_!z3eg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z3eg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png" width="1370" height="1262" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1262,&quot;width&quot;:1370,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:361998,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!z3eg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png 424w, https://substackcdn.com/image/fetch/$s_!z3eg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png 848w, https://substackcdn.com/image/fetch/$s_!z3eg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.png 1272w, https://substackcdn.com/image/fetch/$s_!z3eg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b043a3-41ad-44a8-abee-09b6dc0b4860_1370x1262.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SdMv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SdMv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png 424w, https://substackcdn.com/image/fetch/$s_!SdMv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png 848w, https://substackcdn.com/image/fetch/$s_!SdMv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png 1272w, https://substackcdn.com/image/fetch/$s_!SdMv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SdMv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png" width="1456" height="1236" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1236,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:243789,&quot;alt&quot;:&quot;&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;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!SdMv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png 424w, https://substackcdn.com/image/fetch/$s_!SdMv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png 848w, https://substackcdn.com/image/fetch/$s_!SdMv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.png 1272w, https://substackcdn.com/image/fetch/$s_!SdMv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8a97327-f1c9-4d68-9d30-7972d3a2a5e1_1510x1282.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"></figcaption></figure></div><h3>Favorite Charities 2020 Yet&#8230;</h3><div id="youtube2-LCqWA6gSCXA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;LCqWA6gSCXA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/LCqWA6gSCXA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>CMU BackTraces With Ising Sabermetrics in Python Reducers</h3><div id="youtube2-XebT8EEsMmw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;XebT8EEsMmw&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/XebT8EEsMmw?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>My Failure to Appreciate the Nuances of Finally Tuned Programs under Manual Execution</h3><div id="youtube2-E58qLXBfLrs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;E58qLXBfLrs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/E58qLXBfLrs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>2026-05-12 Testing Pixel Upload &amp; Compression</h2><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;1d8dc9bc-95e8-4c0b-8f27-22d76cad21cd&quot;,&quot;duration&quot;:null}"></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1zfj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1zfj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png 424w, https://substackcdn.com/image/fetch/$s_!1zfj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png 848w, https://substackcdn.com/image/fetch/$s_!1zfj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png 1272w, https://substackcdn.com/image/fetch/$s_!1zfj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1zfj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png" width="1390" height="1370" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1370,&quot;width&quot;:1390,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152770,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1zfj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png 424w, https://substackcdn.com/image/fetch/$s_!1zfj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png 848w, https://substackcdn.com/image/fetch/$s_!1zfj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.png 1272w, https://substackcdn.com/image/fetch/$s_!1zfj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4145442f-a98b-45c8-ae37-593d37cb12e6_1390x1370.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nOIY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nOIY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png 424w, https://substackcdn.com/image/fetch/$s_!nOIY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png 848w, https://substackcdn.com/image/fetch/$s_!nOIY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png 1272w, https://substackcdn.com/image/fetch/$s_!nOIY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nOIY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png" width="1180" height="1544" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1544,&quot;width&quot;:1180,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:292998,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nOIY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png 424w, https://substackcdn.com/image/fetch/$s_!nOIY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png 848w, https://substackcdn.com/image/fetch/$s_!nOIY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.png 1272w, https://substackcdn.com/image/fetch/$s_!nOIY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcce00d4f-f787-4831-ab9f-74adac270f46_1180x1544.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zy5D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zy5D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png 424w, https://substackcdn.com/image/fetch/$s_!Zy5D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png 848w, https://substackcdn.com/image/fetch/$s_!Zy5D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png 1272w, https://substackcdn.com/image/fetch/$s_!Zy5D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zy5D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png" width="1456" height="914" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:914,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:200232,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zy5D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png 424w, https://substackcdn.com/image/fetch/$s_!Zy5D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png 848w, https://substackcdn.com/image/fetch/$s_!Zy5D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.png 1272w, https://substackcdn.com/image/fetch/$s_!Zy5D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ee86e4c-866d-4c18-9c36-1caed422a5ea_1484x932.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FTp3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FTp3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png 424w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png 848w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png 1272w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FTp3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png" width="1048" height="1134" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1134,&quot;width&quot;:1048,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:179052,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FTp3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png 424w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png 848w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.png 1272w, https://substackcdn.com/image/fetch/$s_!FTp3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69fe49a5-1bf5-4648-9567-e682a51ebddd_1048x1134.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gSbP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gSbP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png 424w, https://substackcdn.com/image/fetch/$s_!gSbP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png 848w, https://substackcdn.com/image/fetch/$s_!gSbP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png 1272w, https://substackcdn.com/image/fetch/$s_!gSbP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gSbP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png" width="1456" height="1101" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1101,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:358113,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gSbP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png 424w, https://substackcdn.com/image/fetch/$s_!gSbP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png 848w, https://substackcdn.com/image/fetch/$s_!gSbP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.png 1272w, https://substackcdn.com/image/fetch/$s_!gSbP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fd03c37-745a-40c9-bd22-e4825cfbce14_1560x1180.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3xZL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3xZL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png 424w, https://substackcdn.com/image/fetch/$s_!3xZL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png 848w, https://substackcdn.com/image/fetch/$s_!3xZL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!3xZL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3xZL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png" width="1390" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1390,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195415,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3xZL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png 424w, https://substackcdn.com/image/fetch/$s_!3xZL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png 848w, https://substackcdn.com/image/fetch/$s_!3xZL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!3xZL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0806b6ac-b8c9-4741-9b4a-d3da1707e3ec_1390x1086.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CVbL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CVbL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png 424w, https://substackcdn.com/image/fetch/$s_!CVbL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png 848w, https://substackcdn.com/image/fetch/$s_!CVbL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png 1272w, https://substackcdn.com/image/fetch/$s_!CVbL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CVbL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png" width="1278" height="980" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:980,&quot;width&quot;:1278,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132531,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CVbL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png 424w, https://substackcdn.com/image/fetch/$s_!CVbL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png 848w, https://substackcdn.com/image/fetch/$s_!CVbL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.png 1272w, https://substackcdn.com/image/fetch/$s_!CVbL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705527d2-001e-4c0d-8d99-466f83e7d64c_1278x980.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mPSg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mPSg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png 424w, https://substackcdn.com/image/fetch/$s_!mPSg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png 848w, https://substackcdn.com/image/fetch/$s_!mPSg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png 1272w, https://substackcdn.com/image/fetch/$s_!mPSg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mPSg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png" width="1198" height="1084" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1084,&quot;width&quot;:1198,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:160797,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://matthagy.substack.com/i/158572008?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mPSg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png 424w, https://substackcdn.com/image/fetch/$s_!mPSg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png 848w, https://substackcdn.com/image/fetch/$s_!mPSg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.png 1272w, https://substackcdn.com/image/fetch/$s_!mPSg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe702f55-1fa9-40ae-9153-952bceaca498_1198x1084.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></p>]]></content:encoded></item><item><title><![CDATA[Excited for my Ray-Ban Meta Wayfarer, Matte Black / Gradient Graphite Polarized, Standard]]></title><description><![CDATA[Seems this would be great for Live Streaming]]></description><link>https://matthagy.substack.com/p/excited-for-my-ray-ban-meta-wayfarer</link><guid isPermaLink="false">https://matthagy.substack.com/p/excited-for-my-ray-ban-meta-wayfarer</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Tue, 21 Jan 2025 06:20:05 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/155315306/e9f09a8153b4fe832f856aa45bf2383a.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><em><strong>Context Note:</strong> this article is just an experiment with Substack video publishing and includes a multitude of AI generated multimedia assets. There is no semantic meaning anywhere within.</em></p><div><hr></div><p>I&#8217;ll share more later but am a little concerned about using <a href="https://www.meta.com/help/meta-pay/get-started-meta-pay/">Shop Pay</a> because of the notifications it caused. Hopefully it&#8217;s not as weird as the following because I only had the MP3 module.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RqaM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RqaM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp 424w, https://substackcdn.com/image/fetch/$s_!RqaM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp 848w, https://substackcdn.com/image/fetch/$s_!RqaM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp 1272w, https://substackcdn.com/image/fetch/$s_!RqaM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RqaM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp&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;:null,&quot;alt&quot;:&quot;Picture 1 of 13&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&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="Picture 1 of 13" title="Picture 1 of 13" srcset="https://substackcdn.com/image/fetch/$s_!RqaM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp 424w, https://substackcdn.com/image/fetch/$s_!RqaM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp 848w, https://substackcdn.com/image/fetch/$s_!RqaM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp 1272w, https://substackcdn.com/image/fetch/$s_!RqaM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aec8414-daac-4710-9cb4-487c8d326a32_1600x1200.webp 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>Moreover, I hope to remember that having read <strong><a href="https://www.amazon.com/Random-Walk-Down-Wall-Street/dp/0393330338">A Random Walk Down Wall Street</a> by 2004, I figured out it would be appropriate to warehouse the risk of owning to much cash somewhere safe (didn&#8217;t wanna gamble too much in college) because I increasingly feel that the next four years will be <a href="https://www.youtube.com/watch?v=qKnC1-BLgTo">turbulent</a>. And I hope it&#8217;s nothing scarier than 10-second-long video of one trajectory where the other group was building increasingly sophisticated dynamic networks of 1-100ms at an <a href="https://pubsapp.acs.org/cen/news/88/i42/8842notw1.html?">ACS meeting around 2010</a>.</strong></p><p>Moreover, hopefully we all don&#8217;t keep finding increasingly sophisticated and differentiated way to break Python because that just means more and more tensor flow kernels that need etched into silicon.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TH1e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TH1e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.png 424w, https://substackcdn.com/image/fetch/$s_!TH1e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.png 848w, https://substackcdn.com/image/fetch/$s_!TH1e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.png 1272w, https://substackcdn.com/image/fetch/$s_!TH1e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TH1e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.png" width="331" height="536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:536,&quot;width&quot;:331,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78451,&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_!TH1e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.png 424w, https://substackcdn.com/image/fetch/$s_!TH1e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.png 848w, https://substackcdn.com/image/fetch/$s_!TH1e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.png 1272w, https://substackcdn.com/image/fetch/$s_!TH1e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3adc758a-39a1-43e3-a407-3f042457e0e2_331x536.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>Moreover, with my ever more complex, financial and legal situation&#8212;and of course medical, sometime in the future many years&#8212;I will need to meet with some sort of lawyer and I hope it isn&#8217;t ChatGPT o3. I was always hoping to keep that simple, like just a linear chain of assets, liabilities, and entities that get ever more government like.</p><p>Yet with any chain-of-states there is always the risk of constructing the worst nondeterministic finite automaton through contracts that the world has ever seen. Yet I&#8217;ve long believe that once I start adding types to a Jupyter notebook, I can begin working that back into a generator of sequences and an evaluation function. That Python-based contract, I would be willing to file with the government.</p><p>And hopefully&#8212;when history is written&#8212;this decision won&#8217;t just be another experiment of the form that a child may have proposed to a doubting Christian, like &#8220;couldn&#8217;t God split some people into a test and control group to prove that smoking was always wrong so that future people would know?&#8221; Because in the deep future that decision may seem increasingly obvious.</p><div><hr></div><p><strong>Editor&#8217;s Note:</strong> This text has undergone significant revisions over time, so readers who only received the initial notification may have missed subsequent updates. Furthermore, there appears to be growing interest in financial markets regarding the possibility that Republican policymakers could engineer a complex adjustment to the components of the Consumer Price Index (CPI) to align with the needs and preferences of their increasingly cohesive political base.</p><p>Consider the implications: what if only a small subset of credentialed experts is truly necessary to perform such specialized roles? Could automation, perhaps through advancements akin to military-grade computerized systems or new &#8220;power tools,&#8221; make these roles redundant? Such developments might substantially lower the living standards of certain targeted professional classes, particularly those perceived as overcompensated relative to their contribution. Over time, this could reinforce structural advantages in the electoral college and, potentially, increase competitiveness in the popular vote.</p><p>This revision maintains the original ideas while improving readability, tone, and academic style. Moreover, it now seems like it&#8217;s disappointing that many parts of the world chose cable over fiber. How could I use a machine to help us solve that? Just need a good enough reason to require immediate fiber installation, and then declare any zone without it ready for Military-Grade Reconstruction or at least a <s>StarLink</s> (Paid Substack API Access - Substack as a Platform).</p><h1>Neo-Buddhism</h1><p><em>Substack as a Platform</em> - Pay for Info and Design Your Own Interface</p><div id="youtube2-4I9IQJtkh4Q" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;4I9IQJtkh4Q&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/4I9IQJtkh4Q?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>First, we need to develop our collective health by minimizing distractions so that we can all truly be alone with our own information and communicate only via high latency channels like email.</p><p>Voting is to be tallied using our own, explicitly defined, sorting and prioritization algorithms through R&amp;D consisting of a mix of Data Analysis, Machine Learning, and Generative AI, and ultimately Engineering. With the high leverage tools provided by platforms like Substack, AWS, and others we didn&#8217;t even need much actual engineering. And we definitely shouldn&#8217;t count on smarts or differentiated personality due to the advances in Generative AI. Instead, we need to focus on living the appropriate simply lives.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sLqS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sLqS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.png 424w, https://substackcdn.com/image/fetch/$s_!sLqS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.png 848w, https://substackcdn.com/image/fetch/$s_!sLqS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.png 1272w, https://substackcdn.com/image/fetch/$s_!sLqS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sLqS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.png" width="1456" height="1034" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1034,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5901253,&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_!sLqS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.png 424w, https://substackcdn.com/image/fetch/$s_!sLqS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.png 848w, https://substackcdn.com/image/fetch/$s_!sLqS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.png 1272w, https://substackcdn.com/image/fetch/$s_!sLqS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1c04c45-072d-4953-8af2-cc4e2be6b88a_2891x2053.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jixa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jixa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.png 424w, https://substackcdn.com/image/fetch/$s_!jixa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.png 848w, https://substackcdn.com/image/fetch/$s_!jixa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.png 1272w, https://substackcdn.com/image/fetch/$s_!jixa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jixa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.png&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;:9947231,&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_!jixa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.png 424w, https://substackcdn.com/image/fetch/$s_!jixa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.png 848w, https://substackcdn.com/image/fetch/$s_!jixa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.png 1272w, https://substackcdn.com/image/fetch/$s_!jixa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2ddd02c-5ef2-4c48-90f5-c90c0455cbe8_3648x2736.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1gpY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1gpY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.png 424w, https://substackcdn.com/image/fetch/$s_!1gpY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.png 848w, https://substackcdn.com/image/fetch/$s_!1gpY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.png 1272w, https://substackcdn.com/image/fetch/$s_!1gpY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1gpY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.png&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;:10743315,&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_!1gpY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.png 424w, https://substackcdn.com/image/fetch/$s_!1gpY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.png 848w, https://substackcdn.com/image/fetch/$s_!1gpY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.png 1272w, https://substackcdn.com/image/fetch/$s_!1gpY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec497a41-102d-414c-bf05-58f7f1d07559_3648x2736.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!758W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!758W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.png 424w, https://substackcdn.com/image/fetch/$s_!758W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.png 848w, https://substackcdn.com/image/fetch/$s_!758W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.png 1272w, https://substackcdn.com/image/fetch/$s_!758W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!758W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.png&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;:8460562,&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_!758W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.png 424w, https://substackcdn.com/image/fetch/$s_!758W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.png 848w, https://substackcdn.com/image/fetch/$s_!758W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.png 1272w, https://substackcdn.com/image/fetch/$s_!758W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e200b8-de0d-411e-a32a-bd1b0d6fa407_3648x2736.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gmzt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F715effa8-4535-42ac-a577-f678da36f825_569x434.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gmzt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F715effa8-4535-42ac-a577-f678da36f825_569x434.png 424w, https://substackcdn.com/image/fetch/$s_!Gmzt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F715effa8-4535-42ac-a577-f678da36f825_569x434.png 848w, https://substackcdn.com/image/fetch/$s_!Gmzt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F715effa8-4535-42ac-a577-f678da36f825_569x434.png 1272w, https://substackcdn.com/image/fetch/$s_!Gmzt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F715effa8-4535-42ac-a577-f678da36f825_569x434.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gmzt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F715effa8-4535-42ac-a577-f678da36f825_569x434.png" width="569" height="434" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/715effa8-4535-42ac-a577-f678da36f825_569x434.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:434,&quot;width&quot;:569,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34856,&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_!Gmzt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F715effa8-4535-42ac-a577-f678da36f825_569x434.png 424w, https://substackcdn.com/image/fetch/$s_!Gmzt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F715effa8-4535-42ac-a577-f678da36f825_569x434.png 848w, https://substackcdn.com/image/fetch/$s_!Gmzt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F715effa8-4535-42ac-a577-f678da36f825_569x434.png 1272w, https://substackcdn.com/image/fetch/$s_!Gmzt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F715effa8-4535-42ac-a577-f678da36f825_569x434.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><a href="https://youtube.com/shorts/ZcbQbHamlIA">https://youtube.com/shorts/ZcbQbHamlIA</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VTEP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VTEP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.png 424w, https://substackcdn.com/image/fetch/$s_!VTEP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.png 848w, https://substackcdn.com/image/fetch/$s_!VTEP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.png 1272w, https://substackcdn.com/image/fetch/$s_!VTEP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VTEP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.png&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;:10021728,&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_!VTEP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.png 424w, https://substackcdn.com/image/fetch/$s_!VTEP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.png 848w, https://substackcdn.com/image/fetch/$s_!VTEP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.png 1272w, https://substackcdn.com/image/fetch/$s_!VTEP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e7312dd-0b99-43db-a7b6-485bd035e53d_3648x2736.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!roCb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!roCb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.png 424w, https://substackcdn.com/image/fetch/$s_!roCb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.png 848w, https://substackcdn.com/image/fetch/$s_!roCb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.png 1272w, https://substackcdn.com/image/fetch/$s_!roCb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!roCb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.png" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/caad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9759347,&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_!roCb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.png 424w, https://substackcdn.com/image/fetch/$s_!roCb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.png 848w, https://substackcdn.com/image/fetch/$s_!roCb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.png 1272w, https://substackcdn.com/image/fetch/$s_!roCb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaad4f42-f9ff-47ef-b242-14a902eab0dc_2736x3648.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!njXd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F355bfa98-6026-4aec-9852-3cb310406202_3806x2440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!njXd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F355bfa98-6026-4aec-9852-3cb310406202_3806x2440.png 424w, https://substackcdn.com/image/fetch/$s_!njXd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F355bfa98-6026-4aec-9852-3cb310406202_3806x2440.png 848w, https://substackcdn.com/image/fetch/$s_!njXd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F355bfa98-6026-4aec-9852-3cb310406202_3806x2440.png 1272w, https://substackcdn.com/image/fetch/$s_!njXd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F355bfa98-6026-4aec-9852-3cb310406202_3806x2440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!njXd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F355bfa98-6026-4aec-9852-3cb310406202_3806x2440.png" width="1456" height="933" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/355bfa98-6026-4aec-9852-3cb310406202_3806x2440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:933,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8818332,&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_!njXd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F355bfa98-6026-4aec-9852-3cb310406202_3806x2440.png 424w, https://substackcdn.com/image/fetch/$s_!njXd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F355bfa98-6026-4aec-9852-3cb310406202_3806x2440.png 848w, https://substackcdn.com/image/fetch/$s_!njXd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F355bfa98-6026-4aec-9852-3cb310406202_3806x2440.png 1272w, https://substackcdn.com/image/fetch/$s_!njXd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F355bfa98-6026-4aec-9852-3cb310406202_3806x2440.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><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YFwo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YFwo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.png 424w, https://substackcdn.com/image/fetch/$s_!YFwo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.png 848w, https://substackcdn.com/image/fetch/$s_!YFwo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.png 1272w, https://substackcdn.com/image/fetch/$s_!YFwo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YFwo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.png" width="479" height="652" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:652,&quot;width&quot;:479,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:357987,&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_!YFwo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.png 424w, https://substackcdn.com/image/fetch/$s_!YFwo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.png 848w, https://substackcdn.com/image/fetch/$s_!YFwo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.png 1272w, https://substackcdn.com/image/fetch/$s_!YFwo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c429bae-4d11-4bd2-8637-9df2e7d18d78_479x652.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>place holder</p><p>place holder</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6Gtd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6Gtd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.png 424w, https://substackcdn.com/image/fetch/$s_!6Gtd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.png 848w, https://substackcdn.com/image/fetch/$s_!6Gtd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.png 1272w, https://substackcdn.com/image/fetch/$s_!6Gtd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6Gtd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.png" width="879" height="346" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:346,&quot;width&quot;:879,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:313367,&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_!6Gtd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.png 424w, https://substackcdn.com/image/fetch/$s_!6Gtd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.png 848w, https://substackcdn.com/image/fetch/$s_!6Gtd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.png 1272w, https://substackcdn.com/image/fetch/$s_!6Gtd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf8464e7-9ce6-4e75-8dfe-5dfd419dae4f_879x346.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>place holder</p><div id="youtube2-KAigtGooh-0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;KAigtGooh-0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/KAigtGooh-0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2--GxDqUH6Qz4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;-GxDqUH6Qz4&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/-GxDqUH6Qz4?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>place holder</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RRId!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RRId!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.png 424w, https://substackcdn.com/image/fetch/$s_!RRId!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.png 848w, https://substackcdn.com/image/fetch/$s_!RRId!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.png 1272w, https://substackcdn.com/image/fetch/$s_!RRId!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RRId!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.png" width="984" height="551" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:551,&quot;width&quot;:984,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:154292,&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_!RRId!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.png 424w, https://substackcdn.com/image/fetch/$s_!RRId!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.png 848w, https://substackcdn.com/image/fetch/$s_!RRId!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.png 1272w, https://substackcdn.com/image/fetch/$s_!RRId!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82c8efc0-0655-4ad8-b29e-e9668030dff6_984x551.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><a href="https://pubs.aip.org/physicstoday/Online/4628/The-war-over-supercooled-water">https://pubs.aip.org/physicstoday/Online/4628/The-war-over-supercooled-water</a></p><p>Are the Republicans Engineering another one of these? Like a velocity-auto correlation function that folds some people down in the labor market.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n36W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61815ad6-06b2-4881-a98e-108f98edb26b_581x458.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n36W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61815ad6-06b2-4881-a98e-108f98edb26b_581x458.png 424w, https://substackcdn.com/image/fetch/$s_!n36W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61815ad6-06b2-4881-a98e-108f98edb26b_581x458.png 848w, https://substackcdn.com/image/fetch/$s_!n36W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61815ad6-06b2-4881-a98e-108f98edb26b_581x458.png 1272w, https://substackcdn.com/image/fetch/$s_!n36W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61815ad6-06b2-4881-a98e-108f98edb26b_581x458.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n36W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61815ad6-06b2-4881-a98e-108f98edb26b_581x458.png" width="581" height="458" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61815ad6-06b2-4881-a98e-108f98edb26b_581x458.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:458,&quot;width&quot;:581,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51512,&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_!n36W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61815ad6-06b2-4881-a98e-108f98edb26b_581x458.png 424w, https://substackcdn.com/image/fetch/$s_!n36W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61815ad6-06b2-4881-a98e-108f98edb26b_581x458.png 848w, https://substackcdn.com/image/fetch/$s_!n36W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61815ad6-06b2-4881-a98e-108f98edb26b_581x458.png 1272w, https://substackcdn.com/image/fetch/$s_!n36W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61815ad6-06b2-4881-a98e-108f98edb26b_581x458.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></p><p>place holder</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kUM6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kUM6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.png 424w, https://substackcdn.com/image/fetch/$s_!kUM6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.png 848w, https://substackcdn.com/image/fetch/$s_!kUM6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.png 1272w, https://substackcdn.com/image/fetch/$s_!kUM6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kUM6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.png" width="698" height="607" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:607,&quot;width&quot;:698,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:191591,&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_!kUM6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.png 424w, https://substackcdn.com/image/fetch/$s_!kUM6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.png 848w, https://substackcdn.com/image/fetch/$s_!kUM6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.png 1272w, https://substackcdn.com/image/fetch/$s_!kUM6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ffc9c25-5d0c-4b8f-b8be-8bd89f74812f_698x607.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><div id="youtube2-iPSxhlWFCg0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;iPSxhlWFCg0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/iPSxhlWFCg0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-SiB8GVMNJkE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;SiB8GVMNJkE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/SiB8GVMNJkE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div>]]></content:encoded></item><item><title><![CDATA[Going Independent]]></title><description><![CDATA[You can find me at matthagy.github.io/substack_comments/ for the foreseeable future]]></description><link>https://matthagy.substack.com/p/going-independent</link><guid isPermaLink="false">https://matthagy.substack.com/p/going-independent</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Sat, 21 Dec 2024 10:55:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_Pbc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Starting to appreciate the value of site customization as best articulated by Ben Thompson and John Gruber in a recent <a href="https://dithering.fm/">Dithering</a> episode, &#8220;<a href="https://x.com/ditheringfm/status/1860006480994533749">Substack Critique</a>&#8221;. And as a Software Engineer I should&#8217;ve been ahead of them on this one.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_Pbc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Pbc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png 424w, https://substackcdn.com/image/fetch/$s_!_Pbc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png 848w, https://substackcdn.com/image/fetch/$s_!_Pbc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png 1272w, https://substackcdn.com/image/fetch/$s_!_Pbc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Pbc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png" width="900" height="682" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:682,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:136657,&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_!_Pbc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png 424w, https://substackcdn.com/image/fetch/$s_!_Pbc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png 848w, https://substackcdn.com/image/fetch/$s_!_Pbc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.png 1272w, https://substackcdn.com/image/fetch/$s_!_Pbc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f8c9b0c-94b2-42b9-b718-994a5ceb74b5_900x682.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><a href="https://matthagy.github.io/substack_comments/">matthagy.github.io/substack_comments/</a></p>]]></content:encoded></item><item><title><![CDATA[Hierarchical categorization using OpenAI: Methods exposition]]></title><description><![CDATA[A detailed explanation, source code, and data for clustering my Substack comments using OpenAI embeddings and the ChatGPT API]]></description><link>https://matthagy.substack.com/p/hierarchical-categorization-using</link><guid isPermaLink="false">https://matthagy.substack.com/p/hierarchical-categorization-using</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Sun, 07 May 2023 18:19:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6sgu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I <a href="https://matthagy.substack.com/p/hierarchical-categorization-of-substack">previously shared</a> a hierarchical categorization of Slow Boring comments. As promised there within, I&#8217;ve now redone that project using only my own Substack comments so that I can share a working demo of computing these clusters and generating titles and summaries using the ChatGPT API. This post will walk you through the data and source code.</p><p>Code &amp; data: <a href="https://github.com/matthagy/hagy_comment_category_hierarchy">github.com/matthagy/hagy_comment_category_hierarchy</a></p><p>Interactive demo: <a href="https://matthagy.github.io/hagy_comment_category_hierarchy/">matthagy.github.io/hagy_comment_category_hierarchy</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6sgu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6sgu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!6sgu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!6sgu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!6sgu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6sgu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:523796,&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_!6sgu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!6sgu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!6sgu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!6sgu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f951e6f-96f0-4679-a1c8-ca82438f4bfb_1280x720.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><figcaption class="image-caption">Screenshot of <a href="https://matthagy.github.io/hagy_comment_category_hierarchy/">interactive category viewer</a></figcaption></figure></div><h1>Comment Data</h1><p>We begin with <a href="https://github.com/matthagy/hagy_comment_category_hierarchy/blob/master/data/comments.csv">comments.csv</a>, a file containing all 610 of my Substack comments. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IaCe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IaCe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png 424w, https://substackcdn.com/image/fetch/$s_!IaCe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png 848w, https://substackcdn.com/image/fetch/$s_!IaCe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png 1272w, https://substackcdn.com/image/fetch/$s_!IaCe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IaCe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png" width="1314" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:1314,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:429204,&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_!IaCe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png 424w, https://substackcdn.com/image/fetch/$s_!IaCe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png 848w, https://substackcdn.com/image/fetch/$s_!IaCe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png 1272w, https://substackcdn.com/image/fetch/$s_!IaCe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11e1cdef-148b-4875-a389-6c9bb58f602b_1314x300.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>Each entry is a single comment and includes the content text as well as assorted metadata such as the number of likes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NYqA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NYqA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.png 424w, https://substackcdn.com/image/fetch/$s_!NYqA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.png 848w, https://substackcdn.com/image/fetch/$s_!NYqA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.png 1272w, https://substackcdn.com/image/fetch/$s_!NYqA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NYqA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.png" width="1078" height="580" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:580,&quot;width&quot;:1078,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:281261,&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_!NYqA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.png 424w, https://substackcdn.com/image/fetch/$s_!NYqA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.png 848w, https://substackcdn.com/image/fetch/$s_!NYqA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.png 1272w, https://substackcdn.com/image/fetch/$s_!NYqA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb83332ee-1eaa-4379-8781-a84ecbd5bc92_1078x580.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>Of particular interest is the length of each comment body text as measured in AI-encoding tokens (each token being roughly a syllable). Both very short and very long comments could provide little value and will therefore be filtered out.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ITO1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ITO1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png 424w, https://substackcdn.com/image/fetch/$s_!ITO1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png 848w, https://substackcdn.com/image/fetch/$s_!ITO1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png 1272w, https://substackcdn.com/image/fetch/$s_!ITO1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ITO1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png" width="1247" height="209" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:209,&quot;width&quot;:1247,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:160774,&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_!ITO1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png 424w, https://substackcdn.com/image/fetch/$s_!ITO1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png 848w, https://substackcdn.com/image/fetch/$s_!ITO1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png 1272w, https://substackcdn.com/image/fetch/$s_!ITO1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0509064a-0146-42f7-87dc-a244ead1953d_1247x209.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h1>Vectorization using OpenAI embeddings</h1><p>In order to compute clusters of alike comments, we first need a method to quantify text similarity. OpenAI provides a particularly powerful method for measuring semantic similarity in their text <a href="https://platform.openai.com/docs/guides/embeddings/what-are-embeddings">embeddings</a>. This API takes a piece of text and computes a vector (ie, list of numbers) with 1,536 components. Each vector is analogous to a point in space such that the distance between two vectors quantifies the semantic similarity; a shorter distance corresponds to more alike text.</p><p>To illustrate this, let us select <a href="https://www.slowboring.com/p/a-windfall-profits-tax-idea-that/comment/7121135">one of my comments</a>.</p><blockquote><p>While a windfall-tax-funded subsidy may spur domestic investment in oil and gas production in the short term, I think this approach will only weaken medium and long term investment due to&#8230;</p></blockquote><p>We can compare its embedding against that of every other comment to quantify the similarity of each comment pair. The distribution of embedding similarity (inverse of distance) is as follows.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TJhR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TJhR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.png 424w, https://substackcdn.com/image/fetch/$s_!TJhR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.png 848w, https://substackcdn.com/image/fetch/$s_!TJhR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.png 1272w, https://substackcdn.com/image/fetch/$s_!TJhR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TJhR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.png" width="1248" height="628" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:1248,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:174284,&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_!TJhR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.png 424w, https://substackcdn.com/image/fetch/$s_!TJhR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.png 848w, https://substackcdn.com/image/fetch/$s_!TJhR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.png 1272w, https://substackcdn.com/image/fetch/$s_!TJhR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49155f8e-14c7-48f7-8291-e5b6e78023a1_1248x628.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>Lets explore some other comments based upon their embedding-quantified similarity against this example. The observation at 1.0 corresponds to the original comment itself. The next highest similarity is 0.91 for the <a href="https://www.slowboring.com/p/the-case-against-restricting-domestic/comment/7099782">following comment</a>.</p><blockquote><p>Regardless of climate activist actions, I think it will be incredibly difficult to encourage substantially more private investment in domestic oil production and refining projects. I just think that there is too much uncertainty and downside risk as we transition to green energy&#8230;</p></blockquote><p>We see that both comments mention the domestic oil and gas industry.</p><p>In contrast, the <a href="https://www.slowboring.com/p/april-is-the-cruelest-mailbag/comment/14324421">lowest embedding similarity</a> of 0.66 appears to correspond Google&#8217;s hiring process; a quite different topic indeed.</p><blockquote><p>I found the following on a quick Bing Chat with &#8220;Does the Google internship application process include an online coding test?&#8221;</p><p><a href="https://careers.google.com/how-we-hire/">https://careers.google.com/how-we-hire/</a></p><p>&#8230;</p></blockquote><p>The script <a href="https://github.com/matthagy/hagy_comment_category_hierarchy/blob/master/cluster/vectorize_comments.py">vectorize_comments.py</a> computes the embedding vector for each comment, after filtering out particularly short/long comments.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qWHe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qWHe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.png 424w, https://substackcdn.com/image/fetch/$s_!qWHe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.png 848w, https://substackcdn.com/image/fetch/$s_!qWHe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.png 1272w, https://substackcdn.com/image/fetch/$s_!qWHe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qWHe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.png" width="1289" height="577" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:577,&quot;width&quot;:1289,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:371579,&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_!qWHe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.png 424w, https://substackcdn.com/image/fetch/$s_!qWHe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.png 848w, https://substackcdn.com/image/fetch/$s_!qWHe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.png 1272w, https://substackcdn.com/image/fetch/$s_!qWHe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27fe6a9-7422-4007-be5b-e547efdc76a3_1289x577.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><h1>Hierarchal clustering algorithm</h1><p>Now that we have a way to quantify the semantic similarity of any pair of comments, we can construct categories of related comments. Specifically, we can use agglomerative clustering to compute a hierarchy of categories. This algorithm starts by assigning every data point to a singleton cluster containing just that one entry. It then iteratively merges the two closest (ie, most similar) clusters using the distance metric provided by the text embeddings. Each merge results in an intermediate cluster with two child clusters. The algorithm is repeated until we have a single top-level cluster.</p><p>The result is a binary tree of categories, with &#8220;binary&#8221; implying that each non-terminal cluster has two child clusters. The structure can be visualized as follows:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VDn8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VDn8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.png 424w, https://substackcdn.com/image/fetch/$s_!VDn8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.png 848w, https://substackcdn.com/image/fetch/$s_!VDn8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.png 1272w, https://substackcdn.com/image/fetch/$s_!VDn8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VDn8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.png" width="1181" height="841" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:841,&quot;width&quot;:1181,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:300355,&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_!VDn8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.png 424w, https://substackcdn.com/image/fetch/$s_!VDn8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.png 848w, https://substackcdn.com/image/fetch/$s_!VDn8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.png 1272w, https://substackcdn.com/image/fetch/$s_!VDn8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59287172-b466-4191-ae3f-6358c1e5d0a1_1181x841.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>Next, we can simply this binary tree by consolidating (ie, combing) clusters if the comments across them are sufficiently similar. The following diagram shows an example of consolidation where the intermediate blue nodes are eliminated to create a single cluster with four comments.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CFV4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88edde1c-3286-4287-8d78-23ba687650e7_764x347.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CFV4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88edde1c-3286-4287-8d78-23ba687650e7_764x347.png 424w, https://substackcdn.com/image/fetch/$s_!CFV4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88edde1c-3286-4287-8d78-23ba687650e7_764x347.png 848w, https://substackcdn.com/image/fetch/$s_!CFV4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88edde1c-3286-4287-8d78-23ba687650e7_764x347.png 1272w, https://substackcdn.com/image/fetch/$s_!CFV4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88edde1c-3286-4287-8d78-23ba687650e7_764x347.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CFV4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88edde1c-3286-4287-8d78-23ba687650e7_764x347.png" width="764" height="347" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88edde1c-3286-4287-8d78-23ba687650e7_764x347.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:347,&quot;width&quot;:764,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:40614,&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_!CFV4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88edde1c-3286-4287-8d78-23ba687650e7_764x347.png 424w, https://substackcdn.com/image/fetch/$s_!CFV4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88edde1c-3286-4287-8d78-23ba687650e7_764x347.png 848w, https://substackcdn.com/image/fetch/$s_!CFV4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88edde1c-3286-4287-8d78-23ba687650e7_764x347.png 1272w, https://substackcdn.com/image/fetch/$s_!CFV4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88edde1c-3286-4287-8d78-23ba687650e7_764x347.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>We simply need to define the criteria for when consolidation should be performed. For that, we consider the root-mean-square dispersion of the embeddings within the candidate consolidation. Ie, how semantically similar are the comments within the new combination as quantified by their embeddings.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_YeW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_YeW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png 424w, https://substackcdn.com/image/fetch/$s_!_YeW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png 848w, https://substackcdn.com/image/fetch/$s_!_YeW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png 1272w, https://substackcdn.com/image/fetch/$s_!_YeW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_YeW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png" width="995" height="72" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:72,&quot;width&quot;:995,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72322,&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_!_YeW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png 424w, https://substackcdn.com/image/fetch/$s_!_YeW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png 848w, https://substackcdn.com/image/fetch/$s_!_YeW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png 1272w, https://substackcdn.com/image/fetch/$s_!_YeW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5156f876-2a6f-49c4-ba0d-29d8ea6129dc_995x72.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Additionally, unnecessary intermediate nodes are eliminated when the new consolidated node would have five or fewer children.</p><p>The script <a href="https://github.com/matthagy/hagy_comment_category_hierarchy/blob/master/cluster/cluster.py">cluster.py</a> performs the hierarchical clustering and outputs a tree structure.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uBDQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uBDQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png 424w, https://substackcdn.com/image/fetch/$s_!uBDQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png 848w, https://substackcdn.com/image/fetch/$s_!uBDQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png 1272w, https://substackcdn.com/image/fetch/$s_!uBDQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uBDQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png" width="940" height="231" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:231,&quot;width&quot;:940,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:173594,&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_!uBDQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png 424w, https://substackcdn.com/image/fetch/$s_!uBDQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png 848w, https://substackcdn.com/image/fetch/$s_!uBDQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png 1272w, https://substackcdn.com/image/fetch/$s_!uBDQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83a761b8-e49f-4e63-9ef8-97c0fc9b5b07_940x231.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>This includes printing information about consolidations performed as well as the final tree structure.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sn5D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sn5D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.png 424w, https://substackcdn.com/image/fetch/$s_!sn5D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.png 848w, https://substackcdn.com/image/fetch/$s_!sn5D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.png 1272w, https://substackcdn.com/image/fetch/$s_!sn5D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sn5D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.png" width="910" height="303" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:303,&quot;width&quot;:910,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:295804,&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_!sn5D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.png 424w, https://substackcdn.com/image/fetch/$s_!sn5D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.png 848w, https://substackcdn.com/image/fetch/$s_!sn5D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.png 1272w, https://substackcdn.com/image/fetch/$s_!sn5D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6cea5d-d6d7-427b-b7b0-6a4b84f647b7_910x303.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><h1>ChatGPT generated titles</h1><p>Now that we have a hierarchy of categories, we can use ChatGPT to help us make sense of the comments within each group. We&#8217;ll start by asking the AI to propose a title for each category from a sample of comments. These titles will be used within the interactive visualization to concisely show clustering structure.</p><p>First, we need a way to sample comments within a group when the group is sufficiently large because ChatGPT has a limited input window length. Random sampling, with weighting by the number of likes on each comment, is chosen so that higher quality comments are more likely to be sampled.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cNO_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cNO_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png 424w, https://substackcdn.com/image/fetch/$s_!cNO_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png 848w, https://substackcdn.com/image/fetch/$s_!cNO_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png 1272w, https://substackcdn.com/image/fetch/$s_!cNO_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cNO_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png" width="1322" height="257" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:257,&quot;width&quot;:1322,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:261260,&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_!cNO_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png 424w, https://substackcdn.com/image/fetch/$s_!cNO_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png 848w, https://substackcdn.com/image/fetch/$s_!cNO_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png 1272w, https://substackcdn.com/image/fetch/$s_!cNO_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fa4aaf-71ee-4e8b-9dc6-2d892da942c0_1322x257.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Next, we need to determine how to present this information to ChatGPT. After some experimentation, the following prompt is found to produce decent results.</p><blockquote><p>Suggest a short, yet descriptive name for the group of similar comments below. Response should be at most 5 words in length. Avoid generic names like "discussion" or "comments". Respond only with the group name, do not provide any explanation, formatting, or punctuation.</p><p>Comments:</p><p><em>[comments in a bulleted list]</em></p></blockquote><p>Interestingly, running this prompt multiple times is commonly found to produce significantly different titles across attempts. For example, here are the titles that ChatGPT suggested across five different runs for a single, constant sample of comments within one group.</p><blockquote><p>"Controversial Leftist Ideology</p><p>Commentary on Beliefs and Values.</p><p>Internet Atheism</p><p>"Provocative Opinions on Society</p><p>"Controversial Leftist Ideas"</p></blockquote><p>There is something of a common theme across those titles, but they are still each quite different from each other. In contrast, the following titles for another group are quite consistent.</p><blockquote><p>SVB Collapse Discussion.</p><p>SVB Collapse Discussion.</p><p>SVB Collapse-related Comments</p><p>SVB Collapse Discussions</p><p>SVB Collapse Comments</p></blockquote><p>I handle this title variation by requesting five different titles, through five invocations, for each category. The UI will show a single title when displaying the overall hierarchical category structure and the detailed information tab will show all five titles when the group is selected. That allows the user to quickly see when there is title variation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uwYo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uwYo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.png 424w, https://substackcdn.com/image/fetch/$s_!uwYo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.png 848w, https://substackcdn.com/image/fetch/$s_!uwYo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.png 1272w, https://substackcdn.com/image/fetch/$s_!uwYo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uwYo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.png" width="996" height="531" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:531,&quot;width&quot;:996,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95947,&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_!uwYo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.png 424w, https://substackcdn.com/image/fetch/$s_!uwYo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.png 848w, https://substackcdn.com/image/fetch/$s_!uwYo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.png 1272w, https://substackcdn.com/image/fetch/$s_!uwYo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9596985a-cdcb-4893-8810-d730d44ea0bf_996x531.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>The <a href="https://github.com/matthagy/hagy_comment_category_hierarchy/blob/master/cluster/generate_titles.py">generate_titles.py</a> script uses the ChatGPT API to apply this prompt to a sample of comments from each group. The results are written to <a href="https://github.com/matthagy/hagy_comment_category_hierarchy/blob/master/data/titles.csv">titles.csv</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WdUj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WdUj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.png 424w, https://substackcdn.com/image/fetch/$s_!WdUj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.png 848w, https://substackcdn.com/image/fetch/$s_!WdUj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.png 1272w, https://substackcdn.com/image/fetch/$s_!WdUj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WdUj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.png" width="1324" height="704" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:704,&quot;width&quot;:1324,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:441789,&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_!WdUj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.png 424w, https://substackcdn.com/image/fetch/$s_!WdUj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.png 848w, https://substackcdn.com/image/fetch/$s_!WdUj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.png 1272w, https://substackcdn.com/image/fetch/$s_!WdUj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b1d133c-f7b4-4653-98b1-ceb1229d372c_1324x704.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><h1>ChatGPT generated summaries</h1><p>We&#8217;d also like a summary of the comments within each category. Similar to titles, we can asked ChatGPT to help us with this task. The following prompt is found to work well for summarization.</p><blockquote><p>Summarize the group of similar comments from one authors below. Focus on the main themes or viewpoints expressed within the comments. Output one to three paragraphs of text.</p><p>Comments:</p><p><em>[comments in a bulleted list]</em></p></blockquote><p>The script <a href="https://github.com/matthagy/hagy_comment_category_hierarchy/blob/master/cluster/generate_summaries.py">generate_summaries.py</a> applies the ChatGPT API in the same fashion as the titles generation script. Results are written to <a href="https://github.com/matthagy/hagy_comment_category_hierarchy/blob/master/data/summaries.csv">summaries.csv</a>. </p><p>In exploring these summaries of my own comments, I find ChatGPT shockingly accurate in understanding and presenting my own writing. There is something surreal in staring into this AI mirror of my own beliefs and views. Notably, the top-level summary, that being for a sample of all of my comments, is an eerily high-fidelity presentation of how I think and feel about a range of topics.</p><blockquote><p>The comments from this author can be summarized into a few main themes. First, the author expresses concern over the disproportionate amount of power held by liberal and progressive elites within the Democratic party, particularly those in journalism and academia. The author worries that this could push these elites further away from the average Democratic voter and create opportunities for right-wing populists to exploit.</p><p>Second, the author provides insights into topics ranging from the decline of atheism on the internet, to the sophistication of comments on various substacks, to the potential of a muscular welfare state to improve capitalism. They also offer recommendations, such as urging readers to check out a Vanity Fair article on the current "thought leadership" of the American right.</p><p>Finally, the author provides analysis and suggestions on matters related to policy and finance. For instance, they suggest that the debt ceiling is unconstitutional and that a platinum coin fallback could be a potential solution to prevent global financial meltdown in the event of a judiciary decision against the Treasury. Throughout their comments, the author utilizes precise language and detailed analysis to provide readers with thoughtful insights.</p></blockquote><h1>Creating an interactive viewer</h1><p>We&#8217;d now like a tool for viewing the hierarchical structure of these comment categories as well as exploring the titles and summaries for each group. To that end, I&#8217;ve created an interactive webpage using TypeScript and D3.js. This part of the project was particularly challenging for me as I have no professional frontend programming experience. I&#8217;ve <a href="https://matthagy.substack.com/i/116814766/ai-augmented-coding-tools">previously </a>expressed my gratitude for ChatGPT and GitHub Copilot in guiding me through these unchartered waters.</p><p>We begin by exporting the categories, including each&#8217;s title, summary, and assorted metadata using the script <a href="https://github.com/matthagy/hagy_comment_category_hierarchy/blob/master/cluster/export.py">export.py</a>. This generates the file <a href="https://github.com/matthagy/hagy_comment_category_hierarchy/blob/master/site/nodes.ts">nodes.ts</a> provides the data for visualization.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hOso!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hOso!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.png 424w, https://substackcdn.com/image/fetch/$s_!hOso!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.png 848w, https://substackcdn.com/image/fetch/$s_!hOso!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.png 1272w, https://substackcdn.com/image/fetch/$s_!hOso!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hOso!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.png" width="450" height="546.1281708945261" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:909,&quot;width&quot;:749,&quot;resizeWidth&quot;:450,&quot;bytes&quot;:68255,&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_!hOso!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.png 424w, https://substackcdn.com/image/fetch/$s_!hOso!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.png 848w, https://substackcdn.com/image/fetch/$s_!hOso!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.png 1272w, https://substackcdn.com/image/fetch/$s_!hOso!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e346abc-adc8-43cf-99a0-f143ef7eaa71_749x909.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>The interactive visualization is primarily based around the D3.js <code>TreeLayout</code>. This takes the hierarchical category structure and computes an appropriate positioning for each node in a two-dimensional plane. Ie, it determines (x,y) coordinates for each node. Each category is represented by the abstraction <code>HierarchyNode</code>, which provides useful methods for use in rendering.</p><p>To render the actual nodes and edges of the tree, we use D3.js data binding. This is powerful concept where a collection of data elements (eg, cluster nodes) can be associated with a companion collection of HTML elements (eg, SVG circles). Our code can then simply focus on the mapping between data and element. For example, positioning each SVG circle for each cluster center using the coordinated provided by the tree layout.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cyik!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cyik!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png 424w, https://substackcdn.com/image/fetch/$s_!cyik!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png 848w, https://substackcdn.com/image/fetch/$s_!cyik!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png 1272w, https://substackcdn.com/image/fetch/$s_!cyik!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cyik!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png" width="1112" height="146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:146,&quot;width&quot;:1112,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97188,&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_!cyik!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png 424w, https://substackcdn.com/image/fetch/$s_!cyik!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png 848w, https://substackcdn.com/image/fetch/$s_!cyik!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png 1272w, https://substackcdn.com/image/fetch/$s_!cyik!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb24c827c-e501-4d07-9ee7-8b6c306f68b6_1112x146.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>We can also dynamically style each element based upon its companion data.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QI9u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QI9u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.png 424w, https://substackcdn.com/image/fetch/$s_!QI9u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.png 848w, https://substackcdn.com/image/fetch/$s_!QI9u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.png 1272w, https://substackcdn.com/image/fetch/$s_!QI9u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QI9u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.png" width="1257" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:1257,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:360102,&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_!QI9u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.png 424w, https://substackcdn.com/image/fetch/$s_!QI9u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.png 848w, https://substackcdn.com/image/fetch/$s_!QI9u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.png 1272w, https://substackcdn.com/image/fetch/$s_!QI9u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f662ca-4fe4-40e8-b447-b1eef2e7b703_1257x466.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>You can find the full code for this visualization in <a href="https://github.com/matthagy/hagy_comment_category_hierarchy/blob/master/site/index.ts">index.ts</a>. Note that I&#8217;m quite the novice with TypeScript and D3.js, so if anything seems odd about this code it is likely just a misunderstanding on my part.</p><h1>Closing remarks</h1><p>I hope you&#8217;ve found this exposition of hierarchical clustering of text using OpenAI&#8217;s embeddings educational. Please let me know if you have any questions or comments.</p>]]></content:encoded></item><item><title><![CDATA[Hierarchical categorization of substack comments]]></title><description><![CDATA[Demo of using OpenAI embeddings and ChatGPT API to organize content, and my ever-growing amazement with AI-augmented programming tools.]]></description><link>https://matthagy.substack.com/p/hierarchical-categorization-of-substack</link><guid isPermaLink="false">https://matthagy.substack.com/p/hierarchical-categorization-of-substack</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Sun, 23 Apr 2023 23:22:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ECbZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Interactive demo: <a href="https://matthagy.github.io/sb_comment_category_hierarchy/">matthagy.github.io/sb_comment_category_hierarchy</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ECbZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ECbZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png 424w, https://substackcdn.com/image/fetch/$s_!ECbZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png 848w, https://substackcdn.com/image/fetch/$s_!ECbZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png 1272w, https://substackcdn.com/image/fetch/$s_!ECbZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ECbZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png" width="728" height="414.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:829,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:240329,&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_!ECbZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png 424w, https://substackcdn.com/image/fetch/$s_!ECbZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png 848w, https://substackcdn.com/image/fetch/$s_!ECbZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.png 1272w, https://substackcdn.com/image/fetch/$s_!ECbZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd2e518b-fd97-4bc8-ba89-aeaad0de4f1b_1972x1123.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><figcaption class="image-caption">Screenshot of <a href="https://matthagy.github.io/sb_comment_category_hierarchy/">online demo</a></figcaption></figure></div><p>OpenAI&#8217;s <a href="https://platform.openai.com/docs/guides/embeddings/what-are-embeddings">embeddings</a> are a powerful tool for comparing and organizing text by semantic content. I&#8217;ve <a href="https://matthagy.substack.com/p/using-openai-apis-substack-comments">previously experimented</a> with using them to group Slow Boring comments into categories. This project expands on those methods using <a href="https://en.wikipedia.org/wiki/Hierarchical_clustering">hierarchical categorization</a>, meaning categories can contain subcategories, which in turn can have their own subcategories, and so on. You can explore the resulting fractal structure of these categories in an <a href="https://matthagy.github.io/sb_comment_category_hierarchy/">online interactive demo</a>.</p><p>Further, each group of comments is summarized and given a title using the OpenAI <a href="https://platform.openai.com/docs/guides/chat">Chat Completion API</a> (<code>gpt-3.5-turbo</code>). While the summaries are generally quite impressive, the titles can be inconsistent. To address this, five titles are requested and displayed in the UI, allowing users to get a sense of the general themes within the comment group.</p><p>To better explain the hierarchical categorization methods in detail, I&#8217;m currently working on a comparable project using just my own substack comments. That will allow me to share fully working code and data to demonstrate the methods. Check back soon for that post. (<strong>Update</strong>: See <a href="https://matthagy.substack.com/p/hierarchical-categorization-using">Hierarchical categorization using OpenAI: Methods exposition</a>.)</p><h2>AI-augmented coding tools</h2><p>In addition to the OpenAI APIs, I was particularly struck by how AI-enhanced coding tools enabled me, a programmer without professional web development experience, to create this interactive demo in roughly four hours. This process involved utilizing <a href="https://github.com/features/copilot">GitHub Copilot</a> to offer code suggestions directly within my IDE as I built the site. It's truly delightful to have this AI-powered autocomplete system intuit my intentions and propose relevant lines of code accordingly.</p><p>Furthermore, <a href="https://openai.com/blog/chatgpt">ChatGPT </a>was invaluable for teaching me the basics of TypeScript, D3.js, webpack, and so much more. For each new technology, I started by asking ChatGPT for an overview, and then proceeded to ask a series of progressively more specific questions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cbKW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cbKW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.png 424w, https://substackcdn.com/image/fetch/$s_!cbKW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.png 848w, https://substackcdn.com/image/fetch/$s_!cbKW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.png 1272w, https://substackcdn.com/image/fetch/$s_!cbKW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cbKW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.png" width="1207" height="587" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:587,&quot;width&quot;:1207,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:102207,&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_!cbKW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.png 424w, https://substackcdn.com/image/fetch/$s_!cbKW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.png 848w, https://substackcdn.com/image/fetch/$s_!cbKW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.png 1272w, https://substackcdn.com/image/fetch/$s_!cbKW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b4c32d7-5294-4c2f-a8e0-ae97b8f92e33_1207x587.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>ChatGPT was able to provide highly specific examples to demonstrate concepts that I needed.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae909feb-ea26-4d4d-ba9c-4ca633c89847_1223x868.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56b19619-2bf7-4b3d-aba3-f5e7c5eb14ea_1233x585.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf3d99d5-e493-4e4b-ab53-f4ada6c98c11_1207x844.png&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02830955-203b-4a6c-903b-778e3c024dff_1219x599.png&quot;}],&quot;caption&quot;:&quot;Examples of using ChatGPT to answer highly specific programming questions&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ecff5bd-3321-4564-82d9-aa220a108747_1456x1456.png&quot;}},&quot;isEditorNode&quot;:true}"></div><p>When things didn't work as I anticipated, I was generally able to describe the issue to ChatGPT, and it would help me correct the code. On one occasion, I was tempted to search Google for insights into a particularly challenging problem related to TypeScript generics. However, I quickly became frustrated with the quality of Stack Overflow posts and returned to ChatGPT. After a little prompt experimentation, I had the solution.</p><p>I am now more certain than ever that AI programming tools will not only greatly enhance productivity, but also bring about huge disruptions for software engineering.</p>]]></content:encoded></item><item><title><![CDATA[Using OpenAI APIs to categorize and label substack comments]]></title><description><![CDATA[OpenAI offers some amazing tools for working with text.]]></description><link>https://matthagy.substack.com/p/using-openai-apis-substack-comments</link><guid isPermaLink="false">https://matthagy.substack.com/p/using-openai-apis-substack-comments</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Sat, 25 Mar 2023 13:54:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oFAb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>OpenAI offers some amazing tools for working with text. Using a combination of their APIs, I found it is easy to categorize (ie, cluster) comments from the <a href="https://www.slowboring.com/">Slow Boring</a> substack into 15 categories. This includes asking the ChatGPT API to suggest a name for each category from a sample of comments. The results are quite impressive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oFAb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oFAb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 424w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 848w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oFAb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png" width="1217" height="1066" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1066,&quot;width&quot;:1217,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!oFAb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 424w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 848w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.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>This is accomplished by simply adapting OpenAI&#8217;s <a href="https://github.com/openai/openai-cookbook/blob/main/examples/Clustering.ipynb">clustering demo</a>. This post will briefly walk you through my adaptation to substack comments to demonstrate the ease of applying these powerful tools.</p><p>To start, substack comments are fetched using the <a href="https://github.com/matthagy/substack_client">substack_client</a> Python library as I described in a <a href="https://matthagy.substack.com/p/developing-a-custom-substack-front">previous post</a>. A random sample of 10,000 comments with moderate length and at least one like are taken for clustering.</p><p>The key technology for clustering is OpenAI&#8217;s <a href="https://platform.openai.com/docs/guides/embeddings/what-are-embeddings">embeddings</a>, which provides a quantitative measure of text similarity. Using the embedding API, each comment is mapped to a vector of 1,536 components. The distance between any two vectors is inversely proportional to similarity. Ie, vectors that are close to each other correspond to comments with similar text. The embeddings are computed using a model that not only captures syntax similarity (ie, words used), but also semantic similarity (ie, topics discussed). This is a sophisticated and powerful tool for working with text, and you can learn more about it in OpenAI&#8217;s Dec 2022 blog post, <a href="https://openai.com/blog/new-and-improved-embedding-model">New and improved embedding model</a>.</p><p>With this quantitative measure of text similarity, it is trivial to compute clusters of related comments using common methods like <a href="https://en.wikipedia.org/wiki/K-means_clusteringhttps://en.wikipedia.org/wiki/K-means_clustering">k-means clustering</a>. This identifies clusters (ie, groups) of similar comments based upon the embeddings distances. Hence, similar comments are grouped together. This method is applied to the 10,000 substack comment embeddings to generate 15 clusters, with sizes between 330 to 1304 comments. See the Appendix at the end of this post for some clustering details.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GMQg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d96808-b922-4c79-ad37-127cd785743a_765x475.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GMQg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d96808-b922-4c79-ad37-127cd785743a_765x475.png 424w, https://substackcdn.com/image/fetch/$s_!GMQg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d96808-b922-4c79-ad37-127cd785743a_765x475.png 848w, https://substackcdn.com/image/fetch/$s_!GMQg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d96808-b922-4c79-ad37-127cd785743a_765x475.png 1272w, https://substackcdn.com/image/fetch/$s_!GMQg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d96808-b922-4c79-ad37-127cd785743a_765x475.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GMQg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d96808-b922-4c79-ad37-127cd785743a_765x475.png" width="765" height="475" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76d96808-b922-4c79-ad37-127cd785743a_765x475.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:475,&quot;width&quot;:765,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!GMQg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d96808-b922-4c79-ad37-127cd785743a_765x475.png 424w, https://substackcdn.com/image/fetch/$s_!GMQg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d96808-b922-4c79-ad37-127cd785743a_765x475.png 848w, https://substackcdn.com/image/fetch/$s_!GMQg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d96808-b922-4c79-ad37-127cd785743a_765x475.png 1272w, https://substackcdn.com/image/fetch/$s_!GMQg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76d96808-b922-4c79-ad37-127cd785743a_765x475.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>Let&#8217;s briefly explore some of my comments from each cluster to see what is being grouped together. For the largest cluster, index 0, here are three comments of mine, each truncated for brevity.</p><blockquote><p><em>Preferring extremist Republican candidates because they&#8217;re easier to beat didn&#8217;t work well for the 2016 presidential election. (Yes, Trump did take moderate positions on things like SS privatization, but he also introduced extreme positions and language on immigration.)...</em></p></blockquote><blockquote><p><em>If DeSantis runs for president in 2024, I don&#8217;t think his policy positions will be that important. Instead, his fight with Trump in the Republican primary will be the defining feature. &#8230;</em></p></blockquote><blockquote><p><em>These anti-rule-encorcement leftists would be better served with some sort of libertarian or anarchist political allegiance. It&#8217;s a shame that the American Libertarian organizations have gone so far off the rails&#8230;</em></p></blockquote><p>These three comments all appear to be related to electoral politics and political parties. Let us contrast those against some of my comments from the smallest cluster, index 14.</p><blockquote><p><em>Yep. I sometimes opine that there is a hawkish/right-wing-ish argument for moving away from fossil fuels since it weakens the position of many of our enemies and frenemies. &#8230;</em></p></blockquote><blockquote><p><em>A carbon tax and dividend sounds great in theory because it addresses the regressive distributional issues. &#8230;</em></p></blockquote><blockquote><p><em>Are the induced demand critics of highway widening actually opposing this as a climate policy aim or simply stating that the widening doesn&#8217;t reduce traffic? &#8230;</em></p></blockquote><p>These three comments appear related to climate change and related policies.</p><p>We could continue this approach for each cluster (and include comments from other subscribers) to manually assign a title to each cluster. But that would be tedious and prone to human bias. Eg, I might choose to focus on some subset of comments in each group that address pet issues of my own.</p><p>Instead, we can use ChatGPT to suggest cluster titles by giving it a sample of comments from each cluster. After some experimentation, I found that the following prompt produced consistently useful results.</p><blockquote><p>Suggest one to four categories that the following comments have in common, formatted as a Python list:</p><p><em>[15 example comments from the cluster]</em></p></blockquote><p>For the largest cluster, index 0, ChatGPT suggests: <code>['politics', 'parties', 'messaging', 'media']</code>. Whereas for the smallest cluster, index 14, it gives: <code>['Climate change', 'Energy', 'Policy', 'Technology']</code>. Those are consistent with the themes that we manually identified by inspecting a sample of my comments from each of the two clusters.</p><p>Repeating this prompt for all clusters, using the OpenAI <a href="https://platform.openai.com/docs/guides/chat">Chat Completion API</a> (<code>gpt-3.5-turbo</code>), gives us a label for each. The results give us some insights into topics discussed on this substack, and the relative frequency of comments from each topic. (Ie, the figure at the start of this post.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oFAb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oFAb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 424w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 848w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oFAb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png" width="1217" height="1066" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1066,&quot;width&quot;:1217,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!oFAb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 424w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 848w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!oFAb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7acda6f8-a908-41b5-be36-60477ae095ed_1217x1066.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>We can also use these clusters to analyze subscriber sentiment of comments from each category. Specifically, we can compute the distribution of likes-per-a-comment for each cluster as shown using a box plot in the following figure.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gTDy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff389bec-9db8-43db-a789-cffd1634d982_1312x1066.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gTDy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff389bec-9db8-43db-a789-cffd1634d982_1312x1066.png 424w, https://substackcdn.com/image/fetch/$s_!gTDy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff389bec-9db8-43db-a789-cffd1634d982_1312x1066.png 848w, https://substackcdn.com/image/fetch/$s_!gTDy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff389bec-9db8-43db-a789-cffd1634d982_1312x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!gTDy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff389bec-9db8-43db-a789-cffd1634d982_1312x1066.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gTDy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff389bec-9db8-43db-a789-cffd1634d982_1312x1066.png" width="1312" height="1066" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff389bec-9db8-43db-a789-cffd1634d982_1312x1066.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1066,&quot;width&quot;:1312,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!gTDy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff389bec-9db8-43db-a789-cffd1634d982_1312x1066.png 424w, https://substackcdn.com/image/fetch/$s_!gTDy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff389bec-9db8-43db-a789-cffd1634d982_1312x1066.png 848w, https://substackcdn.com/image/fetch/$s_!gTDy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff389bec-9db8-43db-a789-cffd1634d982_1312x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!gTDy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff389bec-9db8-43db-a789-cffd1634d982_1312x1066.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>Here we see that &#8220;Controversial Social Issues&#8221; comments are a subscriber favorite, averaging roughly 7 likes for each comment. In contrast, the &#8220;Political Systems, Electoral Processes&#8221; comments only average 3.9 likes.</p><p>Lastly, we can use these comment clusters to quantify the topics discussed by a single user and contrast that to the broader subscriber base. For example, here is the distribution of comment categories for my comments relative to all comments.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZJQu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZJQu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.png 424w, https://substackcdn.com/image/fetch/$s_!ZJQu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.png 848w, https://substackcdn.com/image/fetch/$s_!ZJQu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!ZJQu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZJQu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.png" width="1227" height="1066" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1066,&quot;width&quot;:1227,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!ZJQu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.png 424w, https://substackcdn.com/image/fetch/$s_!ZJQu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.png 848w, https://substackcdn.com/image/fetch/$s_!ZJQu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.png 1272w, https://substackcdn.com/image/fetch/$s_!ZJQu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10e5bdc7-3b74-4549-bf5a-3cafb1b490e6_1227x1066.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>We see that I&#8217;m more likely to discuss &#8220;Politics, Media, Social Issues, Technology&#8221; issues than the average subscriber, and less likely to discuss &#8220;COVID measures and vaccines&#8221;.&nbsp;</p><p>Overall, I&#8217;m quite impressed with the quality of labeled clusters generated using OpenAI&#8217;s models. I had previously experimented with more conventional embedding techniques like word frequencies, and the results were quite disappointing. Further, it was trivial for me to apply these APIs. There was no need to experiment with feature engineering nor dimensional reduction. Lastly, it was cheap. I barely spent $1.00 on API calls for embeddings and chat completions.</p><p>So I&#8217;m definitely excited to keep playing with OpenAI&#8217;s on-demand intelligence to make sense of text. Check back soon for some analysis of the comments from other substacks that I subscribe to so that we can compare the topics discussed in different subscriber communities.</p><h1>Appendix</h1><p>For k-means clustering it is necessary to specify the number of clusters ahead of time. Eg, we could compute 5 or 20 clusters instead of the chosen 15. So how is 15 selected? </p><p>This is determined by running clustering across a range of different cluster count values. For each count, cluster quality is quantified using the <a href="https://en.wikipedia.org/wiki/Silhouette_(clustering)">Silhouette Score</a>, a measure of how similar cluster members are relative to non-members. Higher values correspond to higher quality clusters.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w5z9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90982448-5875-40ae-bf26-7ff41ba37943_859x523.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w5z9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90982448-5875-40ae-bf26-7ff41ba37943_859x523.png 424w, https://substackcdn.com/image/fetch/$s_!w5z9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90982448-5875-40ae-bf26-7ff41ba37943_859x523.png 848w, https://substackcdn.com/image/fetch/$s_!w5z9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90982448-5875-40ae-bf26-7ff41ba37943_859x523.png 1272w, https://substackcdn.com/image/fetch/$s_!w5z9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90982448-5875-40ae-bf26-7ff41ba37943_859x523.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w5z9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90982448-5875-40ae-bf26-7ff41ba37943_859x523.png" width="859" height="523" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90982448-5875-40ae-bf26-7ff41ba37943_859x523.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:523,&quot;width&quot;:859,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62743,&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_!w5z9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90982448-5875-40ae-bf26-7ff41ba37943_859x523.png 424w, https://substackcdn.com/image/fetch/$s_!w5z9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90982448-5875-40ae-bf26-7ff41ba37943_859x523.png 848w, https://substackcdn.com/image/fetch/$s_!w5z9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90982448-5875-40ae-bf26-7ff41ba37943_859x523.png 1272w, https://substackcdn.com/image/fetch/$s_!w5z9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90982448-5875-40ae-bf26-7ff41ba37943_859x523.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>We see that this cluster quality metric falls off rapidly after 15. Hence that value is chosen to give the largest number of topics without degrading clustering quality.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Developing a Custom Substack Front-end]]></title><description><![CDATA[Part 1: Developing a Substack client to fetch posts and comments]]></description><link>https://matthagy.substack.com/p/developing-a-custom-substack-front</link><guid isPermaLink="false">https://matthagy.substack.com/p/developing-a-custom-substack-front</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Sat, 10 Dec 2022 13:57:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eOdQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Code: <a href="https://github.com/matthagy/substack_client">github.com/matthagy/substack_client</a></p><p>I&#8217;m a big Substack fan&#8212;paying for numerous subscriptions&#8212;and I particularly enjoy the thoughtful and engaging discussions in the comment sections. Yet I would like more functionality, including comment search. Hence, I&#8217;ve set to building my own custom Substack interface.</p><p>I&#8217;m currently working on cleaning up the code and releasing it as open source so that other people can also access this functionality. This is the first post in a series that will provide an overview of the components as they&#8217;re released.</p><h2>Custom interface features</h2><p>To first demonstrate some functionality, the custom interface enables me to search my previous comments.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eOdQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eOdQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png 424w, https://substackcdn.com/image/fetch/$s_!eOdQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png 848w, https://substackcdn.com/image/fetch/$s_!eOdQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png 1272w, https://substackcdn.com/image/fetch/$s_!eOdQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eOdQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png" width="1195" height="1538" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1538,&quot;width&quot;:1195,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:319981,&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_!eOdQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png 424w, https://substackcdn.com/image/fetch/$s_!eOdQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png 848w, https://substackcdn.com/image/fetch/$s_!eOdQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.png 1272w, https://substackcdn.com/image/fetch/$s_!eOdQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fae2efd14-cc2e-4278-b2d5-020b7cab133f_1195x1538.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><figcaption class="image-caption">Searching my previous comments for the term &#8220;inflation&#8221;</figcaption></figure></div><p>You&#8217;ll see that this custom interface also lets us add tags to comments, and those can be useful for future searching. Additionally, it also shows the distribution of tags for a given search, which can provide a summary of content for say a specific user. </p><p>Here&#8217;s the tag distribution of the nearly two hundred thousand Slow Boring comments, although I&#8217;ve only tagged a minuscule fraction of them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WtZq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WtZq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.png 424w, https://substackcdn.com/image/fetch/$s_!WtZq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.png 848w, https://substackcdn.com/image/fetch/$s_!WtZq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.png 1272w, https://substackcdn.com/image/fetch/$s_!WtZq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WtZq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.png" width="1158" height="910" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1158,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:130894,&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_!WtZq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.png 424w, https://substackcdn.com/image/fetch/$s_!WtZq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.png 848w, https://substackcdn.com/image/fetch/$s_!WtZq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.png 1272w, https://substackcdn.com/image/fetch/$s_!WtZq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53f3bb1b-cb34-4a6a-89d4-dd543bd4cb62_1158x910.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><figcaption class="image-caption">An overview of all comments from Slow Boring</figcaption></figure></div><p>You can explore some functionality in an earlier prototype that just includes my own comments at <a href="https://matthagy.github.io/substack_comments/">matthagy.github.io/substack_comments</a>. (<a href="https://github.com/matthagy/substack_comments">Source code</a>)</p><p>I&#8217;ve found these searching and tagging features quite useful, and I now hope to share this functionality with other people by releasing the code as open source. This post will explain how we fetch posts and comments through using a Python Substack client.</p><h2>Developing a Substack client</h2><p>Unfortunately, Substack doesn&#8217;t yet offer an official API. Thankfully, some reverse engineering shows that the Substack front-end is powered by a RESTful JSON API that we can leverage for fetching content. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LVIF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LVIF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.png 424w, https://substackcdn.com/image/fetch/$s_!LVIF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.png 848w, https://substackcdn.com/image/fetch/$s_!LVIF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.png 1272w, https://substackcdn.com/image/fetch/$s_!LVIF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LVIF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.png" width="1324" height="520" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:1324,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:96066,&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_!LVIF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.png 424w, https://substackcdn.com/image/fetch/$s_!LVIF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.png 848w, https://substackcdn.com/image/fetch/$s_!LVIF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.png 1272w, https://substackcdn.com/image/fetch/$s_!LVIF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F14bd15b4-7ce7-4cb5-a1e5-08dfc3d8085e_1324x520.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">Network requests made by a Substack website as shown in Chrome Developer Tools</figcaption></figure></div><p>Two GET endpoints are of interest for fetching content.</p><ul><li><p><strong>archive</strong> - Returns the metadata for the posts of a site</p></li><li><p><strong>comments</strong> - Returns the comments for a given post</p></li></ul><p>The <strong>archive</strong> endpoint is paginated, returning the 12 newest posts for a given offset. Through a series of calls we can fetch the metadata for all posts. The metadata for each post includes fields such as title, description, author by-lines, and many more. Of particularly interest is the field &#8216;id&#8217; that uniquely identifies the post.</p><p>Here are a few of the fields of an example metadata entry.</p><pre><code>{
  "id": 88072060,
  "publication_id": 159185,
  "title": "Friday Thread",
  "type": "thread",
  "slug": "thursday-thread-940",
  "post_date": "2022-12-09T22:00:56.679Z",
  "audience": "only_paid",
  "canonical_url": "https://www.slowboring.com/p/thursday-thread-940",
  "reactions": {
    "\u2764": 4
  },
  "description": "Sinema leaving the Democratic Party.",
  "reaction": true,
  "comment_count": 31,
  ...
}</code></pre><p>We can then fetch the comments for a given post using the <strong>comments</strong> endpoint. The result is a list of complex and nested JSON objects representing all comments for the post. They are arranged in a hierarchy with each comment containing its children.</p><p>To show a few fields&#8230;</p><pre><code>{
  "id": 11045666,
  "body": "The text of the comment...",
  "post_id": 88072060,
  "user_id": 3094604,
  "type": "comment",
  "date": "2022-12-10T03:27:25.952Z",
  "edited_at": null,
  "name": "Matt Hagy",
  "reactions": {
   "\u2764": 8
  },
  "reaction": "\u2764",
  "children": [{"id": ... }, ...],
  ...
}</code></pre><p>Using  these two endpoints we can fetch all comments for all posts on a given Substack site. In order to call them, we need to develop some code that mimics the requests made by a web browser. Notably, we need to include browser cookies that provide user authentication in order to access paid-only content.</p><h2>An overview of the library</h2><p>The functionality for calling these endpoints using browser cookies from Chrome is packaged up in the Python library <a href="https://github.com/matthagy/substack_client">substack_client</a>. You can checkout <a href="https://github.com/matthagy/substack_client/blob/master/example.py">example.py </a>for a demonstration of this 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_!ghsk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ghsk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.png 424w, https://substackcdn.com/image/fetch/$s_!ghsk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.png 848w, https://substackcdn.com/image/fetch/$s_!ghsk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.png 1272w, https://substackcdn.com/image/fetch/$s_!ghsk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ghsk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.png" width="1270" height="1464" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/d134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1464,&quot;width&quot;:1270,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:202664,&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_!ghsk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.png 424w, https://substackcdn.com/image/fetch/$s_!ghsk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.png 848w, https://substackcdn.com/image/fetch/$s_!ghsk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.png 1272w, https://substackcdn.com/image/fetch/$s_!ghsk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd134941a-0e6b-4c15-b8ab-5c5f27cd4100_1270x1464.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">example.py demo code</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mxu0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mxu0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png 424w, https://substackcdn.com/image/fetch/$s_!Mxu0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png 848w, https://substackcdn.com/image/fetch/$s_!Mxu0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png 1272w, https://substackcdn.com/image/fetch/$s_!Mxu0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mxu0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png" width="1050" height="182" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/df89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:182,&quot;width&quot;:1050,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54578,&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_!Mxu0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png 424w, https://substackcdn.com/image/fetch/$s_!Mxu0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png 848w, https://substackcdn.com/image/fetch/$s_!Mxu0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png 1272w, https://substackcdn.com/image/fetch/$s_!Mxu0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf89d75f-5f59-464f-93e2-9d4398eeff78_1050x182.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Output of running example.py</figcaption></figure></div><p>The factory method <strong>create</strong> includes logic for fetching the relevant browser cookies from Chrome on Linux. The created <strong>SubstackClient</strong> instance has the following methods.</p><ul><li><p><strong>get_new_posts </strong>- Calls the archive endpoint to fetch metadata for the newest posts.</p></li><li><p><strong>get_http</strong> - Generic HTTP GET that is used to fetch the HTML contents for a post.</p></li><li><p><strong>get_comments</strong> - Calls the comments endpoint to fetch comments for a post.</p></li></ul><p>Additionally, the <strong>client.py</strong> module provides code for maintaining a local mirror of post and comment content for a Substack site. Content is stored in files so that we can efficiently access all comments without needing to make redundant requests to the site.</p><ul><li><p><strong>fetch_new_posts</strong> - Maintains a file containing post metadata and efficiently fetches new posts from the archive endpoint for addition.</p></li><li><p><strong>fetch_post_contents</strong> - Mirrors the HTML content of posts within a directory.</p></li><li><p><strong>CommentFetcher</strong> - Maintains a directory that contains the comments for each post. Includes methods for fetching the comments of new posts and refreshing comments for previously fetched posts.</p></li></ul><p>Now that we can fetch the posts and comments for a Substack site, we can start serving this content in our own custom front-end. That will be the subject of the next post in this series.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Introducing DB From Zero]]></title><description><![CDATA[Lear how to develop increasingly sophisticated databases from scratch]]></description><link>https://matthagy.substack.com/p/introducing-db-from-zero-7c0340c5b658</link><guid isPermaLink="false">https://matthagy.substack.com/p/introducing-db-from-zero-7c0340c5b658</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Tue, 28 Apr 2020 16:19:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9316a270-1028-48fc-b076-f0b445c30aab_1415x793.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4>Lear how to develop increasingly sophisticated databases from&nbsp;scratch</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hICp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc9555-67bf-4061-a2c1-22897935e339_96x96.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hICp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc9555-67bf-4061-a2c1-22897935e339_96x96.png 424w, https://substackcdn.com/image/fetch/$s_!hICp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc9555-67bf-4061-a2c1-22897935e339_96x96.png 848w, https://substackcdn.com/image/fetch/$s_!hICp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc9555-67bf-4061-a2c1-22897935e339_96x96.png 1272w, https://substackcdn.com/image/fetch/$s_!hICp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc9555-67bf-4061-a2c1-22897935e339_96x96.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hICp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc9555-67bf-4061-a2c1-22897935e339_96x96.png" width="96" height="96" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/95dc9555-67bf-4061-a2c1-22897935e339_96x96.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:96,&quot;width&quot;:96,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!hICp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc9555-67bf-4061-a2c1-22897935e339_96x96.png 424w, https://substackcdn.com/image/fetch/$s_!hICp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc9555-67bf-4061-a2c1-22897935e339_96x96.png 848w, https://substackcdn.com/image/fetch/$s_!hICp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc9555-67bf-4061-a2c1-22897935e339_96x96.png 1272w, https://substackcdn.com/image/fetch/$s_!hICp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95dc9555-67bf-4061-a2c1-22897935e339_96x96.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>I&#8217;m excited to share DB From Zero (<a href="https://dbfromzero.com/">dbfromzero.com</a>) with you today! This is a new project that aims to explore different aspects and components of databases by developing increasingly sophisticated prototypes. Additionally, benchmarking is performed to quantify the impact of different design parameters and workloads, and thereby improve our intuition about databases. Today I&#8217;d like to share with you one of the recent projects.</p><h3>Log-Structured Merge-Tree for Persistent Reads and&nbsp;Writes</h3><p>The most recent project explores <a href="https://dbfromzero.com/log_structured_merge_tree.html">Log-Structured Merge-Tree for Persistent Reads and Writes</a>. The LSMTree is an interesting data structure that is commonly used in developing high-performance key/value stores. Projects including Google&#8217;s LevelDB and Facebook&#8217;s fork of LevelDB, RocksDB, use this data structure to support for high-volumes of random access reads and writes.</p><p>As discussed further in the <a href="https://dbfromzero.com/log_structured_merge_tree.html#Addressing_These_Challenges_Using_a_Log-Structured_Merge-Tree_LSMTree">project background section</a>, an LSMTree leverages multiple types of data containers with different properties, chiefly in-memory vs. on-disk, to achieve this high performance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xapF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5479fde2-4436-427d-bf14-a525e787b61a_1415x793.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xapF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5479fde2-4436-427d-bf14-a525e787b61a_1415x793.png 424w, https://substackcdn.com/image/fetch/$s_!xapF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5479fde2-4436-427d-bf14-a525e787b61a_1415x793.png 848w, https://substackcdn.com/image/fetch/$s_!xapF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5479fde2-4436-427d-bf14-a525e787b61a_1415x793.png 1272w, https://substackcdn.com/image/fetch/$s_!xapF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5479fde2-4436-427d-bf14-a525e787b61a_1415x793.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xapF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5479fde2-4436-427d-bf14-a525e787b61a_1415x793.png" width="1415" height="793" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5479fde2-4436-427d-bf14-a525e787b61a_1415x793.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:793,&quot;width&quot;:1415,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128107,&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_!xapF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5479fde2-4436-427d-bf14-a525e787b61a_1415x793.png 424w, https://substackcdn.com/image/fetch/$s_!xapF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5479fde2-4436-427d-bf14-a525e787b61a_1415x793.png 848w, https://substackcdn.com/image/fetch/$s_!xapF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5479fde2-4436-427d-bf14-a525e787b61a_1415x793.png 1272w, https://substackcdn.com/image/fetch/$s_!xapF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5479fde2-4436-427d-bf14-a525e787b61a_1415x793.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>Creating an LSMTree involves developing several interesting components with appropriate coordination between them to support concurrent operations. (<a href="https://dbfromzero.com/log_structured_merge_tree.html#Developing_Our_LSMTree_Storage_Engine">details</a>) In addition to development and testing, benchmarking is also performed to quantify the performance of our protoype LSMTree and we find it can achieve up to 328,400 operations/second using a high performance NVM drive and appropriate configuration and workloads.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bR21!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bR21!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.png 424w, https://substackcdn.com/image/fetch/$s_!bR21!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.png 848w, https://substackcdn.com/image/fetch/$s_!bR21!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.png 1272w, https://substackcdn.com/image/fetch/$s_!bR21!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bR21!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.png" width="755" height="993" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/cd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:993,&quot;width&quot;:755,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!bR21!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.png 424w, https://substackcdn.com/image/fetch/$s_!bR21!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.png 848w, https://substackcdn.com/image/fetch/$s_!bR21!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.png 1272w, https://substackcdn.com/image/fetch/$s_!bR21!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd12cc7d-6a81-4216-9772-5273d33be9d4_755x993.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><figcaption class="image-caption">High-level benchmarking results of ourLSMTree</figcaption></figure></div><p>Additional details on benchmarking and more results can be found <a href="https://dbfromzero.com/log_structured_merge_tree.html#Analysis_of_Benchmarking_Results">here</a>.</p><h3>More to&nbsp;come&#8230;</h3><p>As of current, four projects have been created to explore different components of databases though hands on development. And this is just the start! More projects are in the pipeline and I&#8217;m quite excited from some of the future topics concerning transactions and serialization-level isolation.</p><p>Check back soon for new projects. Also, I&#8217;d appreciate your feedback on the current projects as well as ideas for new projects. Contact me at <a href="mailto:mattthew.hagy@gmail.com">mattthew.hagy@gmail.com</a>.</p>]]></content:encoded></item><item><title><![CDATA[An implementation of the 2D Bond Fluctuation Model (BFM) for Polymer Physics]]></title><description><![CDATA[As a small programming project, I&#8217;ve implemented the Bond Fluctuation Model (BFM) for polymer physics in 2 dimensions using Java. You can&#8230;]]></description><link>https://matthagy.substack.com/p/an-implementation-of-the-2d-bond-fluctuation-model-bfm-for-polymer-physics-69d2d85e643a</link><guid isPermaLink="false">https://matthagy.substack.com/p/an-implementation-of-the-2d-bond-fluctuation-model-bfm-for-polymer-physics-69d2d85e643a</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Sun, 30 Jun 2019 15:16:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-YGv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-YGv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-YGv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png 424w, https://substackcdn.com/image/fetch/$s_!-YGv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png 848w, https://substackcdn.com/image/fetch/$s_!-YGv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png 1272w, https://substackcdn.com/image/fetch/$s_!-YGv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-YGv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/db1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!-YGv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png 424w, https://substackcdn.com/image/fetch/$s_!-YGv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png 848w, https://substackcdn.com/image/fetch/$s_!-YGv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png 1272w, https://substackcdn.com/image/fetch/$s_!-YGv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1b821e-fd8c-4fe6-966f-3574b7bc06aa_344x335.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Snapshot of polymer chain configuration in simulation</figcaption></figure></div><p>As a small programming project, I&#8217;ve implemented the Bond Fluctuation Model (BFM) for polymer physics in 2 dimensions using Java. You can find the code at <a href="https://github.com/matthagy/mc_bfm_2d">https://github.com/matthagy/mc_bfm_2d</a>.</p><p>Initially, I&#8217;ve experimented with how polymer chains diffuse through a small pore within a contained system.</p><div class="captioned-image-container"><figure><div id="youtube2-TsdU-SBGFJs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;TsdU-SBGFJs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/TsdU-SBGFJs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div></figure></div><p>A single trajectory gives the following quantitative results.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cAxE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cAxE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png 424w, https://substackcdn.com/image/fetch/$s_!cAxE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png 848w, https://substackcdn.com/image/fetch/$s_!cAxE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png 1272w, https://substackcdn.com/image/fetch/$s_!cAxE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cAxE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!cAxE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png 424w, https://substackcdn.com/image/fetch/$s_!cAxE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png 848w, https://substackcdn.com/image/fetch/$s_!cAxE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png 1272w, https://substackcdn.com/image/fetch/$s_!cAxE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f7b77b-83ac-4183-8167-c70f054ca7f8_432x288.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>Current results aren&#8217;t that interesting and instead just demonstrate the methods. To perform useful simulations, I&#8217;d need access to literature to learn about novel polymer systems and determine what has already been simulated. I&#8217;m hoping the methods may be useful to polymer physicists in Academia and Industry since the code is efficient and leverages the Java Virtual Machine.</p><p>Let me know if you&#8217;d like to use these methods in your work and I&#8217;ll help you get up to speed. You can contact me at <a href="mailto:matthew.hagy@gmail.com">matthew.hagy@gmail.com</a>.</p>]]></content:encoded></item><item><title><![CDATA[Investigating the long-time behavior of the two-dimensional Ising model by leveraging the Java…]]></title><description><![CDATA[Summary]]></description><link>https://matthagy.substack.com/p/investigating-the-long-time-behavior-of-the-two-dimensional-ising-model-by-leveraging-the-java-fa2bbc902fd9</link><guid isPermaLink="false">https://matthagy.substack.com/p/investigating-the-long-time-behavior-of-the-two-dimensional-ising-model-by-leveraging-the-java-fa2bbc902fd9</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Sun, 23 Jun 2019 21:33:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!G2oE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G2oE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G2oE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!G2oE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!G2oE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!G2oE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!G2oE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/fbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!G2oE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!G2oE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!G2oE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!G2oE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbbc2c45-ac6d-4480-867c-a03bbef6f7e7_564x565.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h3>Summary</h3><p>Novel computational methods are developed to allow for very long time simulations of the two-dimensional Ising model with 10 billion Monte Carlo updates in each simulation. Using these methods, the time-dependent behavior of quenching from random initial states is analyzed to determine the quenching behavior. Simulations are run across a range of parameters, including the lateral size of the grid, <em>l</em>, and the pair interaction strength, <em>J</em>.</p><p>In some cases, the simulation trajectory converges to a configuration with a predominantly up spin or a predominantly down spin. There does not appear to be a simple relationship between the parameters of grid lateral size and interaction strength with the behavior of whether or not the simulation converges to a predominant state. In general, smaller lateral grid sizes results are more likely to converge to a single predominant state, which can be explained by the smaller number of spins that need to be aligned. Moderate interaction strengths are found to maximize the fraction of simulated systems that converge to a predominant state with higher interaction strengths leading the system to become arrested in a mixed state configuration.</p><h3>Background and Introduction</h3><p>The <a href="https://en.wikipedia.org/wiki/Ising_model">Ising model</a> is among the simplest models of cooperative behavior in physics and it useful for modeling such phenomena as ferromagnetism. Simpler physics models assume each individual entity operates independently of other entities within the systems. As cooperative phenomena are ubiquitous in nature, it is useful to understand the properties of such a simple model of cooperative interactions. Further, the Ising model has been related to Machine Learning models (see discussion in Quora: <a href="https://www.quora.com/How-is-the-Ising-model-related-to-machine-learning">How is the Ising model related to machine learning?</a>) and I postulate that it will be increasingly more important as researchers further work to explore and understand the structure of machine learning models.</p><p>In the present work, we consider the two-dimension Ising model, which consists of a periodic grid of cells whereby each cell interacts with its four nearest neighbors. Each cell can be in one of two states: up or down. Within this model, it is thermodynamically favorable for neighbors to have aligned spin and we can vary the pair interaction strength through model parameter <em>J</em>.</p><p>The following figure shows a small Ising model systems with a periodic grid of lateral size 25 cells.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_LWI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_LWI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!_LWI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!_LWI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!_LWI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_LWI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/bcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!_LWI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!_LWI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!_LWI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!_LWI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcdc5f17-1ac3-45ad-b3d1-0266d5299bc0_564x565.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>See the <a href="https://en.wikipedia.org/wiki/Ising_model">Wikipedia article on the Ising model for more details</a>. Additionally, you can experiment with the Ising model using <a href="https://matthagy.com/ising.html">this in-browser simulation</a>.</p><p>In general, there do not exist analytical solutions for the Ising model in two or more dimensions. Instead, numerical simulations are used to sample configurations of the Ising model for subsequent analysis. As in all numerical simulations, there are challenges in propagating the simulated system from an initial chosen configuration&#8202;&#8212;&#8202;which may be unrepresentative of the configurations of the system at thermal equilibrium&#8202;&#8212;&#8202;to configurations that are representative. This simulated process is hereby referred to as equilibration because we aim to generate thermodynamically likely configurations of the model.</p><p>Due to limitations of computational resources, it&#8217;s possible that we will never achieve an equilibrated configuration within the simulated system. Instead, the system will converge towards a local free energy minimum and only explore configurations near that free energy minimum. In such cases, we refer to the systems as being quenched in analogy with physical experiments whereby the system is rapidly brought to a low temperature and therefore the system gets trapped in a local free energy minimum.</p><p>To better illustrate this point, let us consider some example configurations of the two-dimensional Ising model. Conventionally, such simulations are initiated from a random initial configuration as shown in the following figure.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MXhX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4fd8293-cb23-408e-9064-7d496301a450_564x565.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MXhX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4fd8293-cb23-408e-9064-7d496301a450_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!MXhX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4fd8293-cb23-408e-9064-7d496301a450_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!MXhX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4fd8293-cb23-408e-9064-7d496301a450_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!MXhX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4fd8293-cb23-408e-9064-7d496301a450_564x565.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MXhX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4fd8293-cb23-408e-9064-7d496301a450_564x565.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/d4fd8293-cb23-408e-9064-7d496301a450_564x565.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!MXhX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4fd8293-cb23-408e-9064-7d496301a450_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!MXhX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4fd8293-cb23-408e-9064-7d496301a450_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!MXhX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4fd8293-cb23-408e-9064-7d496301a450_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!MXhX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd4fd8293-cb23-408e-9064-7d496301a450_564x565.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Monte Carlo methods are used to propagate the system towards thermal equilibrium, which yields more ordered states with sufficiently high pair interaction.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dRci!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dRci!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!dRci!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!dRci!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!dRci!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dRci!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!dRci!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!dRci!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!dRci!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!dRci!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6cc427df-97be-4c6c-b5af-da6493da9bdc_564x565.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>With a strong enough pair interaction, this can lead the system towards either a fully up spin or a fully down spin configuration for sufficiently small systems.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dTLk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dTLk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!dTLk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!dTLk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!dTLk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dTLk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!dTLk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!dTLk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!dTLk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!dTLk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa082a459-c0b4-4de6-a66b-d555ab5cf8b5_564x565.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>In contrast, larger simulations will show regions of one spin or another. (Or at least such regions will exist at lower equilibration times with sufficiently high pair interaction strength.)</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JdpR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JdpR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!JdpR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!JdpR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!JdpR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JdpR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/fc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!JdpR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!JdpR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!JdpR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!JdpR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc70b08f-d56a-4975-8eeb-cd25c2bf8bd5_564x565.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>In large enough systems, it can even be challenging to visually inspect the individual regions as shown in the following lattice of lateral size 5000.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8gnp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8gnp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!8gnp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!8gnp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!8gnp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8gnp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/abfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!8gnp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png 424w, https://substackcdn.com/image/fetch/$s_!8gnp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png 848w, https://substackcdn.com/image/fetch/$s_!8gnp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png 1272w, https://substackcdn.com/image/fetch/$s_!8gnp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabfb3a56-04c2-4e74-b47f-b6c75ee3e07c_564x565.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Historically, physicists have studied the properties of such quenched Ising systems to better understand the role of cooperativity in physics. Considering such early work was performed over half a century ago, they had no choice but to investigate quenched systems due to the limitations of computer power.</p><p>Now, we have much more powerful computers and software engineering tools and can, therefore, push the methods further to longer equilibration times. In the present work, I leverage the <a href="https://en.wikipedia.org/wiki/Java_virtual_machine">Java Virtual Machine (JVM)</a> to develop a highly efficient simulation of the Ising model and run simulations using cloud resources. The simulations are used to explore the time-dependent equilibration/quenching of Ising model systems with varied size and pair interaction strength. You can find the code at <a href="https://github.com/matthagy/ising_java">https://github.com/matthagy/ising_java</a>.</p><h3>Results and Discussion</h3><p>Using the novel computational methods, a range lateral sizes, <em>l</em>, and pair interaction strengths, <em>J</em>, are simulated using ten billion Monte Carlo updates each. The average spin is computed throughout the simulation and the trajectory of this quantity is analyzed to ascertain the progression of equilibration.</p><p>Here&#8217;s a video of the simulation of <em>l</em>=500 and <em>J</em>=3<em>kT</em>.</p><div class="captioned-image-container"><figure><div id="youtube2-ZcbQbHamlIA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ZcbQbHamlIA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/ZcbQbHamlIA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div></figure></div><p>The trajectories of average spin for four different system sizes are shown in the following figures. For each interaction strength, 25 trajectories are collected and shown.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AGE9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AGE9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png 424w, https://substackcdn.com/image/fetch/$s_!AGE9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png 848w, https://substackcdn.com/image/fetch/$s_!AGE9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png 1272w, https://substackcdn.com/image/fetch/$s_!AGE9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AGE9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!AGE9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png 424w, https://substackcdn.com/image/fetch/$s_!AGE9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png 848w, https://substackcdn.com/image/fetch/$s_!AGE9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png 1272w, https://substackcdn.com/image/fetch/$s_!AGE9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7361ed6-38df-4c03-ac0d-4c5690506159_453x342.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E8Dc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F96945966-3f87-499f-a935-2e11fd02e907_453x342.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E8Dc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F96945966-3f87-499f-a935-2e11fd02e907_453x342.png 424w, https://substackcdn.com/image/fetch/$s_!E8Dc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F96945966-3f87-499f-a935-2e11fd02e907_453x342.png 848w, https://substackcdn.com/image/fetch/$s_!E8Dc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F96945966-3f87-499f-a935-2e11fd02e907_453x342.png 1272w, https://substackcdn.com/image/fetch/$s_!E8Dc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F96945966-3f87-499f-a935-2e11fd02e907_453x342.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E8Dc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F96945966-3f87-499f-a935-2e11fd02e907_453x342.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/96945966-3f87-499f-a935-2e11fd02e907_453x342.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!E8Dc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F96945966-3f87-499f-a935-2e11fd02e907_453x342.png 424w, https://substackcdn.com/image/fetch/$s_!E8Dc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F96945966-3f87-499f-a935-2e11fd02e907_453x342.png 848w, https://substackcdn.com/image/fetch/$s_!E8Dc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F96945966-3f87-499f-a935-2e11fd02e907_453x342.png 1272w, https://substackcdn.com/image/fetch/$s_!E8Dc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F96945966-3f87-499f-a935-2e11fd02e907_453x342.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z-OQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z-OQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png 424w, https://substackcdn.com/image/fetch/$s_!Z-OQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png 848w, https://substackcdn.com/image/fetch/$s_!Z-OQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png 1272w, https://substackcdn.com/image/fetch/$s_!Z-OQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z-OQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!Z-OQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png 424w, https://substackcdn.com/image/fetch/$s_!Z-OQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png 848w, https://substackcdn.com/image/fetch/$s_!Z-OQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png 1272w, https://substackcdn.com/image/fetch/$s_!Z-OQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F47426ddc-cf0e-449c-b4b5-62d2e8d43775_453x342.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dTZi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F89e56fa5-d049-4221-803b-592b606658f2_453x342.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dTZi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F89e56fa5-d049-4221-803b-592b606658f2_453x342.png 424w, https://substackcdn.com/image/fetch/$s_!dTZi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F89e56fa5-d049-4221-803b-592b606658f2_453x342.png 848w, https://substackcdn.com/image/fetch/$s_!dTZi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F89e56fa5-d049-4221-803b-592b606658f2_453x342.png 1272w, https://substackcdn.com/image/fetch/$s_!dTZi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F89e56fa5-d049-4221-803b-592b606658f2_453x342.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dTZi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F89e56fa5-d049-4221-803b-592b606658f2_453x342.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/89e56fa5-d049-4221-803b-592b606658f2_453x342.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!dTZi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F89e56fa5-d049-4221-803b-592b606658f2_453x342.png 424w, https://substackcdn.com/image/fetch/$s_!dTZi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F89e56fa5-d049-4221-803b-592b606658f2_453x342.png 848w, https://substackcdn.com/image/fetch/$s_!dTZi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F89e56fa5-d049-4221-803b-592b606658f2_453x342.png 1272w, https://substackcdn.com/image/fetch/$s_!dTZi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F89e56fa5-d049-4221-803b-592b606658f2_453x342.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>It is noteworthy that many of these trajectories appear to still be converging towards a terminal state, particularly so for the larger lateral size systems.</p><p>In inspecting these results, we can see cases where the trajectories terminate in either a fully up spin (1.0) or a fully down spin (-1.0). Other trajectories terminate with the system having a mix of up and down spins. It is noteworthy that the trajectories for <em>l</em>=500 don&#8217;t show terminal stabilization, which suggests these systems would tend towards a fully up or down terminal state if simulated for longer.</p><p>Next, trajectories are classified as either being in a configuration with a single predominant state or being in a mixed configuration. Specifically, the average spin of the last 100 configurations is computed for each simulation and if the mean spin is greater than 0.95 or less than -0.95, then the system is classified as being in a predominant state. The relationship between pair interaction strength and system lateral size on this behavior is shown in the following figure.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7-Th!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F936e856b-7da8-40de-8add-6570eed753ab_403x270.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7-Th!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F936e856b-7da8-40de-8add-6570eed753ab_403x270.png 424w, https://substackcdn.com/image/fetch/$s_!7-Th!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F936e856b-7da8-40de-8add-6570eed753ab_403x270.png 848w, https://substackcdn.com/image/fetch/$s_!7-Th!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F936e856b-7da8-40de-8add-6570eed753ab_403x270.png 1272w, https://substackcdn.com/image/fetch/$s_!7-Th!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F936e856b-7da8-40de-8add-6570eed753ab_403x270.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7-Th!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F936e856b-7da8-40de-8add-6570eed753ab_403x270.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/936e856b-7da8-40de-8add-6570eed753ab_403x270.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!7-Th!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F936e856b-7da8-40de-8add-6570eed753ab_403x270.png 424w, https://substackcdn.com/image/fetch/$s_!7-Th!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F936e856b-7da8-40de-8add-6570eed753ab_403x270.png 848w, https://substackcdn.com/image/fetch/$s_!7-Th!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F936e856b-7da8-40de-8add-6570eed753ab_403x270.png 1272w, https://substackcdn.com/image/fetch/$s_!7-Th!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F936e856b-7da8-40de-8add-6570eed753ab_403x270.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>It is noteworthy that a non-monotonic trend is observed with respect to pair interaction strength for smaller lateral sizes of 25 and 50. This suggests that stronger interactions make the system more likely to get stuck in local free energy minima.</p><h3>Conclusion</h3><p>This work demonstrates the power of modern computational technologies for performing long-time simulations. Further, the results show that even 10 billion Monte Carlo updates are insufficient for convergence of the quenching process. Nonetheless, the preliminary results show that such simulations can converge to a predominantly up or predominantly down configuration and the conditions under which this occurs is complex with respect to lateral grid size and pair interaction strength.</p>]]></content:encoded></item><item><title><![CDATA[Developing simple chemical physics simulations that run in the browser]]></title><description><![CDATA[I&#8217;ve been experimenting with using Scala.js to create education simulations and would like to share the results and what I&#8217;ve learned.]]></description><link>https://matthagy.substack.com/p/developing-simple-chemical-physics-simulations-that-run-in-the-browser-fa1665879c78</link><guid isPermaLink="false">https://matthagy.substack.com/p/developing-simple-chemical-physics-simulations-that-run-in-the-browser-fa1665879c78</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Sun, 07 Apr 2019 23:15:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YtYB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4>I&#8217;ve been experimenting with using Scala.js to create educational simulations and would like to share the results and what I&#8217;ve&nbsp;learned.</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YtYB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YtYB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png 424w, https://substackcdn.com/image/fetch/$s_!YtYB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png 848w, https://substackcdn.com/image/fetch/$s_!YtYB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png 1272w, https://substackcdn.com/image/fetch/$s_!YtYB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YtYB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!YtYB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png 424w, https://substackcdn.com/image/fetch/$s_!YtYB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png 848w, https://substackcdn.com/image/fetch/$s_!YtYB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png 1272w, https://substackcdn.com/image/fetch/$s_!YtYB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F605f0182-fb62-4452-b44b-8cac7210e8fb_800x263.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Simulation snapshots</figcaption></figure></div><p>I&#8217;m a software engineer with a background in chemical physics and I&#8217;m excited to experiment with developing free online educational resources that teach chemical physics, particularly simulation. To that end, I&#8217;ve been exploring Scala.js and assorted JavaScript libraries. Here are some of the preliminary resources I&#8217;ve developed.</p><ul><li><p><a href="https://matthagy.com/random_walk.html">Random Walk in a Periodic Box</a></p></li><li><p><a href="https://matthagy.com/soft_spheres.html">Simulation of Soft Spheres in a Periodic Box</a></p></li><li><p><a href="https://matthagy.com/polymers.html">Simulation of Polymer Chains</a></p></li></ul><p>All the initial rough code is available at <a href="https://github.com/matthagy/chem_prog_exp">github.com/matthagy/chem_prog_exp</a>. I apologize for the current lack of documentation.</p><p>Chiefly, I&#8217;m using <a href="https://www.scala-js.org/">Scala.js</a>, which is a framework for writing Scala code that compiles to JavaScript so that we can write Scala that runs in the browser. I like how this allows us to leverage the full power of Scala for developing complex simulations using a clear and concise language with a functional (i.e., mathematical) formalization.</p><p>While I don&#8217;t know enough JavaScript (and know nothing about TypeScript) to fully comment on the pros/cons of Scala.js, I&#8217;ve found Scala.js to be a great language/framework for writing simulations, visualizations, and analyses that run in the browser. You can learn more about my general thoughts on Scala in my post, <a href="https://medium.com/@matthagy/initial-impressions-of-scala-from-a-java-and-python-data-engineer-c8e2038aca3d">Initial impressions of Scala from a Java and Python data engineer</a>.</p><p>Beyond Scala.js, I&#8217;ve also explored several JavaScript libraries related to developing simulations. <a href="https://threejs.org/">Three.js</a> has proven to be an excellent 3D rendering library and it has made it easy for me to develop simulation visualizations. <a href="https://plot.ly/javascript/">Plotly.js</a> makes the development of dynamic and interactive plots effortless; I&#8217;ve literally spent less than 15 minutes learning about this library. Lastly, I&#8217;ve found the <a href="https://ace.c9.io/">Ace</a> editor to be a robust, browser-based editor that allows me to represent simulation configuration in user-editable JavaScript.</p><p>Overall, I&#8217;m excited about how easy it has been to develop these simple, rough proof-of-concept simulations. I&#8217;m looking forward to developing more interactive and sophisticated simulations in the future as a hobby project. I&#8217;m also starting to brush up on my chemical physics knowledge so that I can make these into better educational resources.</p><p>I&#8217;m even starting to think about how some of these resources could be useful to practitioners; i.e., academic and industrial researchers and engineers. To that end, we&#8217;ll need the code to run outside of the browser and I think that should be straightforward if everything is in Scala since Scala primarily runs on the JVM. It might be cool to provide a simple, browser-based interface into simulations that run in the cloud. If I do this, it would be within a non-profit organization since I don&#8217;t think there&#8217;s much potential for profit margins.</p><p>Let me know what you think about this preliminary work and any ideas you have for how this work could evolve. I&#8217;m also certainly open to collaboration. You can reach me at <a href="mailto:matthew.hagy@gmail.com">matthew.hagy@gmail.com</a>.</p>]]></content:encoded></item><item><title><![CDATA[What does a Principal Data Scientist look like in 2025?]]></title><description><![CDATA[Sure is an exciting time to be in data science! Particularly so with the magic of machine learning (ML). Why it&#8217;s so exciting that it&#8217;s&#8230;]]></description><link>https://matthagy.substack.com/p/what-does-a-principal-data-scientist-look-like-in-2025-545a571ec89f</link><guid isPermaLink="false">https://matthagy.substack.com/p/what-does-a-principal-data-scientist-look-like-in-2025-545a571ec89f</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Wed, 06 Mar 2019 16:01:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TPdz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4>Sure is an exciting time to be in data science! Particularly so with the magic of machine learning. Why it&#8217;s so exciting that it&#8217;s attracting millions of highly intelligent and deeply trained future professionals. Hence, I think we should reflect on the future of data science. Here are my predictions&#8230;</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TPdz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TPdz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TPdz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TPdz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TPdz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TPdz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg" width="800" height="345" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:345,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!TPdz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TPdz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TPdz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TPdz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F434e5cac-fb0f-4d83-ad37-6e80eb34de42_800x345.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>It&#8217;s 2025 and one of the most coveted careers pinnacles in large corporations is Principal Data Scientist (PDS). It should be clear from the title that this is an elite role. Some innovative companies have even started using the title &#8220;Senior Data Manager&#8221; to attract the right candidates in 2025.</p><p>PDSs are charged with the mission of leveraging their strengths in ML to solve the hardest artificial intelligence problems facing tech companies. For example, social media companies are still searching for the perfect autonomous content moderating technologies. And only PDSs can help them.</p><p>PDSs are uniquely suited to solve such problems due to their advanced training. For example, PDSs advancing the state-of-the-art in comment moderations have each completed a Ph.D. in digital anthropological communication with ML applications.</p><p>In their training, they&#8217;ve each received five days of in-person lectures on such complex topics as meme quality and whether or not a comment counts as a hateful or if it was just meant ironically. Further, in the second week of their boot camp, they each complete an independent ML-research project and write a three-paragraph thesis. On the last day, everyone in the class gets to defend their thesis and pick up their Ph.D. certificate.</p><p>In 2019, we might struggle to see how one could complete such an advanced ML project in only one week despite no prior experience. Isn&#8217;t ML still hard? Well, of course, it&#8217;s still hard! That&#8217;s why we need PDSs. And they&#8217;re certainly experts in ML. They&#8217;ve each read the 80-page Machine Learning as a Service (MLaaS) manual provided by Google Cloud Platform (GCP). (Don&#8217;t be intimidated&nbsp;by&nbsp;this&nbsp;long&nbsp;book, it&#8217;s only a picture book. Or, as one might say, a slide deck.)</p><p>Hence, each PDS has mastered this technology and therefore knows how to click through the ML wizard&#8202;&#8212;&#8202;always accepting the default settings&#8202;&#8212;&#8202;and finally, click the big &#8220;Run Machine Learning!!!&#8221; button. (Yes, Google added the exclamation points in response to overwhelming customer feedback.)</p><p>But their expertise in ML alone are insufficient for them to solve such challenging artificial intelligence problems. For as every PDS knows, ML applied to poorly prepared data is useless. Hence, PDSs also need deep expertise in their problem domain so as to properly prepare their data. Their specialized graduate coursework trains them accordingly.</p><p>Further, PDSs are experts at leveraging data microscopes. These are advanced technologies that allow their highly-technical users to explore the structure of data and annotate data elements. For example, a PDS specialized in comment moderation knows how to discover flagged comments by clicking the appropriate tab in their data microscope. They then apply their professional judgment in annotating individual comments with the right labels. After roughly a week, they&#8217;ve prepared sufficient data (averaging 2k comments/day) to start applying state-of-the-art ML methods. In 2025, running MLaaS on GCP takes on average 4 minutes and costs $7.21.</p><p>A newly minted PDS Ph.D. may think this is where the project ends. But as any veteran knows, no ML solution is perfect on the first try. Instead, real-world data science is an iterative loop whereby we constantly improve the methods through user feedback. One might call this &#8220;organic reinforcement learning&#8221; whereby users of a platform let the PDS know where the AI methods are currently failing by contesting ML-predicted labels.</p><p>In an attempt to improve the ML performance, some junior PDSs may be tempted to play with the MLaaS settings in GCP&#8202;&#8212;&#8202;thinking they can do ML better than Google&#8202;&#8212;&#8202;but they soon find this to be in vain. For our God, Google, is omnipotent in the domain of ML. Instead, the problem is always insufficient prepared data. Back to the microscope!</p><p>And remember, don&#8217;t hit that &#8220;Run Machine Learning!!!&#8221; button more than once a week; it costs us real money.</p><p>As you might imagine, PDSs are well-compensated professionals in 2025. They average $18/hr and the top contractors can make north of $32/hr. These top professionals are chiefly distinguished by their emotional fortitude in such soul-racking domains as identifying child pornography. Hence, the big bucks. Like dentists before them, these professionals exhibit a statistically-significant higher rate of depression. Too bad they don&#8217;t know statistics.</p><p>Look out for part II where we consider how large teams of PDSs are coordinated to collaboratively tackle massive artificial intelligence problems in 2025. Spoiler: coordinating and managing PDSs is such a crummy job that only computers are willing to do it.</p><p><em>For a more serious discourse on the impact of Machine Learning as a Service on the data science field see &#8220;<a href="https://liveramp.com/engineering/opinion-our-exciting-journey-as-data-scientists-onwards-to-higher-levels-of-abstraction/">Our Exciting Journey as Data Scientists Onwards to Higher Levels of Abstraction</a>.&#8221;</em></p>]]></content:encoded></item><item><title><![CDATA[Introducing scalaps: Scala-inspired data structures for Python]]></title><description><![CDATA[A functional, object-oriented approach for working with sequences and collections. Also similar to Java Streams. Hope you find they&#8230;]]></description><link>https://matthagy.substack.com/p/introducing-scalaps-scala-inspired-data-structures-for-python-53f3afc8696</link><guid isPermaLink="false">https://matthagy.substack.com/p/introducing-scalaps-scala-inspired-data-structures-for-python-53f3afc8696</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Thu, 28 Feb 2019 04:38:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-Y3r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4>A functional, object-oriented approach for working with sequences and collections. Also similar to Spark RDDs and Java Streams. Hope you find they simplify your code by providing a plethora of common algorithms for working with sequences and collections.</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Y3r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Y3r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png 424w, https://substackcdn.com/image/fetch/$s_!-Y3r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png 848w, https://substackcdn.com/image/fetch/$s_!-Y3r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png 1272w, https://substackcdn.com/image/fetch/$s_!-Y3r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Y3r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!-Y3r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png 424w, https://substackcdn.com/image/fetch/$s_!-Y3r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png 848w, https://substackcdn.com/image/fetch/$s_!-Y3r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png 1272w, https://substackcdn.com/image/fetch/$s_!-Y3r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02fdf4c-cab3-4291-a0fe-3aa68e5e43cc_800x324.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">An example of using scalps to analyze Reddit&nbsp;posts</figcaption></figure></div><p>I&#8217;ve found that working on collections of elements by applying functions through well-defined algorithms (e.g., <code>map</code>, <code>filter</code>, and <code>reduce</code>) to greatly simplify my code and remove many sources of errors. Therefore I was delighted to discover that Scala really pushes this to the next level by introducing a plethora of built-in algorithms on data structures. These concepts share some similarities to Spark RDDs and Java Streams, but I find the Scala approach simpler and more elegant.</p><p>As I return to data analysis and machine learning with Python, I&#8217;ve found it helpful to port these concepts to Python in a new library, <a href="https://pypi.org/project/scalaps/">scalaps</a>. You can find the code at <a href="https://github.com/matthagy/scalaps">github.com/matthagy/scalaps</a>.</p><p>In this article, we&#8217;ll walk through a few examples of how scalaps can simplify our code. Let&#8217;s start with this basic, contrived example.</p><p><code>ScSeq</code> is a wrapper around any sequence and it provides numerous methods for operating on its input sequence. Many of these methods return another <code>ScSeq</code> instance.</p><p>Rather than analyze the contrived example, let&#8217;s walk through a more realistic <a href="https://github.com/matthagy/scalaps/blob/master/examples/analyze_reddit_posts.py">example of analyzing Reddit posts using scalaps</a>. For background, we have a sample of Reddit posts in the following CSV format.</p><p>We start by accessing the data and parsing it.</p><p>You can see the following <code>ScSeq</code> methods used in this example.</p><ul><li><p><strong>map(func): </strong>map a function across the current sequence to create another sequence</p></li><li><p><strong>to_frozen_list()</strong>: create a frozen, realized list of the current sequence as implemented in <code>ScFrozenList</code>.</p></li><li><p><strong>take(n)</strong>: return a sequence that will have at most the first <code>n</code> elements of the current sequence</p></li><li><p><strong>for_each(func)</strong>: call the function on every element of the sequence in order</p></li></ul><p>Here&#8217;s the equivalent conventional Python for these operations.</p><p>Which is perfectly reasonable Python and we haven&#8217;t yet seen the strength of scalaps.</p><p>Next, let&#8217;s look at counting the number of elements that match a criteria.</p><p>This introduces two more <code>ScSeq</code> methods.</p><ul><li><p><strong>filter(func)</strong>: select elements that match a criteria</p></li><li><p><strong>count()</strong>: count the number of elements in the sequence</p></li></ul><p>Note that <code>filter</code> is lazy. It doesn&#8217;t evaluate to a realized collection but instead, is a lazily computed sequence. The same is true for other methods such as <code>map</code>. In fact, an entire <code>ScSeq</code> can be a lazy sequence when sourced from an appropriate lazy source. E.g., readings lines from a file.</p><p>In contrast, <code>count</code> is a sink. It realizes each element of the sequence through a chain of operations starting from the source. <code>count</code> is a constant memory sink and can, therefore, consume massive lazy sequences. Other sinks include <code>to_fozen_list</code>, which realizes the sequence into an immutable list of type <code>ScFrozenList</code>.</p><p>Once a <code>ScSeq</code> has been realized, it cannot run again. Instead, we can reconstruct the sequence to realize it again. It can be useful to have functions that build a sequence from passed-in source(s) so that we can easily reconstruct the sequence as needed. E.g.,</p><p>Returning to the Reddit post example, let&#8217;s compute the most popular subreddits in this sample of posts. This is accomplished with the following code.</p><p>This introduces a few new scalaps concepts. First, we&#8217;re passing a string to <code>map</code>. This is interpreted as &#8220;select the attribute of that name for each element&#8221;. Similarly, integers are interpreted as integer item lookups in a collection.</p><p>Next, we use the method <code>value_counts()</code>. This sink computes an <code>ScDict</code> in which each key is an element from the sequence and the value is the number of times the key occurred. <code>ScDict</code> is an augmented Python dictionary that includes functionality such as returning <code>ScSeq</code>s for <code>keys()</code>, <code>values()</code>, and <code>items()</code>. In the example, we use the <code>items()</code> method to generate a sequence of key/value tuples.</p><p>The sequence is then sorted into a <code>ScList</code> using <code>sort_by(key)</code>. Note, we&#8217;re using the integer <code>1</code> as the key so as to select the second element, the count, of each tuple. Hence, the list is now sorted by the number of posts.</p><p><code>reverse()</code> is used to generate a <code>ScSeq</code> that is in the reversed order so that the posts are ordered by descending score. <code>take(n)</code> is used with <code>n=5</code> to select the first five posts. Lastly, they&#8217;re printed through <code>forach(print)</code>.</p><p>I find this to be a more elegant description of this algorithm than the comparable Python. Do you agree? If not, in your opinion, what would the comparable Python be and why is it more elegant? Let me know in the comment section below.</p><p>Lastly, let me leave you with a more sophisticated use of scalaps that computes the frequency of title words in each subreddit.</p><p>I won&#8217;t explain the full example. Instead, see if you can reason through what the code is doing based upon the naming of the methods and the names of the functions used with them.</p><p>I will point out two interesting methods.</p><ul><li><p><strong>flat_map(func)</strong>: takes a function that returns sequence for each element in the original sequence. Each returned sequence is expanded, in order, within a returned <code>ScSeq</code>.</p></li><li><p><strong>group_by(func)</strong>: construct an <code>ScDict</code> where the keys are computed by <code>func</code> and each value is an <code>ScList</code> with all the elements that have that same key.</p></li></ul><p>In reading through this example, what are you&#8217;re thoughts on the legibility of the Python code with scalaps? I personally find this approach easier to reason through relative to conventional Python. Further, I&#8217;ve used such a style in Scala, Java, and (Py)Spark so as to structure my code as applying functions to collections using built-in algorithms. I&#8217;ve come to find this approach simpler, more legible, and less error prone relative to conventional imperative programming.</p><p>Thanks for considering scalaps! I hope it can help simplify your code, improve the readability, and eliminate errors. Let me know what you think in the comment section below.</p><p>Again, you can find the code at <a href="https://github.com/matthagy/scalaps">https://github.com/matthagy/scalaps</a>. It is a nascent library and very much a work in progress. E.g., it needs tests and I&#8217;ll develop them once I get some feedback on the API. PR&#8217;s are also welcome.</p><p>These examples were derived from a Scala learning resource, <a href="https://towardsdatascience.com/interactively-exploring-reddit-posts-using-basic-scala-in-your-browsers-f394843069de">Interactively exploring Reddit posts using basic Scala in your browser</a>. Check it out if you&#8217;d like to learn more about the elegant and powerful programming language, Scala.</p>]]></content:encoded></item><item><title><![CDATA[Interactively exploring Reddit posts using basic Scala in your browser]]></title><description><![CDATA[This article continues our quick tour through Scala. In these exercises, you&#8217;ll get to explore actual Reddit posts using snippets of&#8230;]]></description><link>https://matthagy.substack.com/p/interactively-exploring-reddit-posts-using-basic-scala-in-your-browsers-f394843069de</link><guid isPermaLink="false">https://matthagy.substack.com/p/interactively-exploring-reddit-posts-using-basic-scala-in-your-browsers-f394843069de</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Mon, 25 Feb 2019 18:28:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!p5gq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4>This article continues our journey through Scala. In these exercises, you&#8217;ll get to analyze actual Reddit posts using snippets of basic Scala code that you write and run in your browser. You may even discover some surprising behavior of Redditors.</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p5gq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p5gq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg 424w, https://substackcdn.com/image/fetch/$s_!p5gq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg 848w, https://substackcdn.com/image/fetch/$s_!p5gq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!p5gq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p5gq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!p5gq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg 424w, https://substackcdn.com/image/fetch/$s_!p5gq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg 848w, https://substackcdn.com/image/fetch/$s_!p5gq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!p5gq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F79df7b98-26f9-4fa1-9dd6-e0ad2ca586a8_800x533.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>This is part three of our tour through Scala. If you&#8217;re just arriving and would like to start at the beginning, checkout <a href="https://medium.com/@matthagy/quickly-learning-the-basics-of-scala-through-structure-and-interpretation-of-computer-programs-ed5bfa90e8dc">Quickly learning the basics of Scala through Structure and Interpretation of Computer Programs examples</a>.</p><p>Today we&#8217;re going to do some novel programming exercises based around actual Reddit data. I&#8217;ve prepared a random sample of roughly ten thousand posts from the month of October 2018 for us to interactively explore by writing basic Scala in widgets within this article.</p><p>Here&#8217;s a preview of some of the Scala we&#8217;ll be writing to analyze Reddit posts.</p><p>Let&#8217;s dive right in and figure out how to access this data, run computations on it, and thereby analyze Redditors by writing and running Scala code directly in our browser.</p><p>The following code fetches the Reddit post data from a web server and shows the first few lines of the Reddit data. There are some new Scala concepts in the code that we won&#8217;t need to understand today since we&#8217;ll just be using the code to fetch the Reddit data. Instead, we&#8217;ll focus on the code we write to explore the data.</p><p>Aside: This is a generally cool feature of programming: we can commonly use functions in libraries developed by other programmers to perform computation for us, even when we don&#8217;t understand the details of the code in the library. Professional software engineers commonly use libraries in their work specifically so they don&#8217;t have to learn the details of how to solve a programming problem that someone else has already solved.</p><p>Hit &#8220;Run&#8221; on the following widget to run the code and see the results.</p><p>(Note, you can click &#8220;Edit on ScalaFiddle&#8221; on any ScalaFiddle widget in this article if you find the ScalaFiddle widget too horizontally compressed in the embedded form. In such cases, you&#8217;ll find the presentation on the ScalaFiddle website to be more readable.)</p><p>Pretty cool how easily we can access this interesting data, right? Now let&#8217;s figure out how to explore the data and compute novel results that provide interesting insights into Redditors.</p><p>We receive the data as one very long string. You can modify the Scala code in the previous ScalaFiddle widget to call<code>.length</code> on the string and print the number of characters. I.e., we&#8217;ll modify our anonymous function at the bottom of the code to have the following form.</p><p>Run that and you&#8217;ll see that the data string consists of just under a million characters. Hence, we have some serious data to process here.</p><p>Let&#8217;s look at the sample again to see how we&#8217;ll want to process this long string.</p><pre><code>MarioAI,nicolasrene,recreation of Mario facing left since i havent got the original picture not the real thing but he did face left once in 1-2...,1
u_seksualios,seksualios,Seksuali gundanti i&#353;tvirk&#279;l&#279; Alektra Blue juodais drabu&#382;iais,1
Cuphead,[deleted],Just finished Cuphead in an hour and fifteen minutes.,0
videos,lonemonk,Trump On The Traps - Calvin Dick (2017),1 CryptoCurrency,Pseudoname87,Why does binance show a different price than other sites?,1</code></pre><p>This text data is in comma-separated value (CSV) format. Conventionally such data is shown as a table.</p><p>We can see that each single line of the file corresponds to a single post. Hence, first, we&#8217;ll want to break this string up by lines to access the individual line for each post. We can split a string into substrings&#8202;&#8212;&#8202;based on a specific splitting character&#8202;&#8212;&#8202;using the string method <code>split</code>. To split into lines, we&#8217;ll use the newline character <code>"\n"</code> as the splitting character.</p><p>Lastly, we&#8217;ll convert the return value of <code>split</code> to a list using <code>toList</code> and show the number of lines. You can go back to the ScalaFiddle widget and modify our processing code to be as follows.</p><p>The results show that we have roughly 11,000 Reddit posts in this data.</p><p>Now we still have some more work to do in preparing our data for programmatic exploration because each Reddit submissions contains multiple attributes. Going back to the sample, we see that each line is a comma-separated string of values for each post. In order, the attributes are:</p><ul><li><p><strong>subreddit</strong>: Subreddit to which post was submitted</p></li><li><p><strong>author</strong>: The user account who posted the submission</p></li><li><p><strong>title</strong>: The title of the post</p></li><li><p><strong>score</strong>: The voting score of the submission at the time the data was pulled</p></li></ul><p>We&#8217;ll again use <code>String.split</code> to access the individual fields of each post, this time using <code>","</code> as the splitting character.</p><p>We want a way to organize together all of the different attributes of a single post and for that, we can create a Scala <code>class</code>. At a high level, a class just allow us to organize together related data elements like the different attributes of a Reddit post. Here&#8217;s how we define a class for this data.</p><p>Here&#8217;s an example of how we can use the Post class. Modify the code as you like to get a feel for our<code>Post</code> data type.</p><p>We&#8217;ll cover classes in more detail in the future. For now, it&#8217;s good enough to know that this class defines a new data type to represent Reddit posts, with each post having four attributes: subreddit, author, title, and score.</p><p>Let&#8217;s now modify our processing code to parse our raw data into a list of posts. I.e., create a<code>List[Post]</code>.</p><p>Now we have a list of posts in <code>val posts: List[Post]</code>. So let&#8217;s start exploring this Reddit post data!</p><p>First, let&#8217;s count the number of posts for a single subreddit. You can add the following code to our processor function in the previous ScalaFiddle widget.</p><p>Here we&#8217;re using the <code>filter</code> method of<code>List</code> to create a new list that just contains the posts that are from the subreddit &#8220;AskReddit&#8221;. In general, we can use <code>filter</code> with any function we write to select elements of a <code>List</code> and thereby create a new <code>List</code> that just contains those elements of interest.</p><p>Feel free to modify the code to count the number of posts in our sample for any subreddit you&#8217;re interested in.</p><p>Building off that exercise, let&#8217;s compute the number of posts for every single subreddit. In this computation, we&#8217;ll build a data structure that associates each subreddit with its posts count. This will require us to introduce a new Scala data structure called <code>Map</code>.</p><p><code>Map[K, V]</code> is an association between keys of type <code>K</code> to values of type <code>V</code>. In this exercise, we&#8217;ll be building a <code>Map[String, Int]</code> to associate subreddit name to count of posts. Here are some examples of how we can work with such a map.</p><p>Can you add code to create <code>forthMap</code> that adds the key <code>"new key"</code> with a value of <code>12</code> to our <code>val map: Map[String, Int]</code>?</p><p>For people familiar with other programming languages, you may be surprised to see that <code>Map.updated</code> returns another new<code>Map</code>. In general, Scala encourages us to use immutable data structures and therefore we avoid modifying anything in place. Instead, we create new data structures to represent the results of any change. Scala does some really clever things behind the scenes to make such updates efficient in both processing time and memory usage.</p><p>Note that <code>Map[K, V].get(key)</code> returns an <code>Option[V]</code>. <code>Option</code> is used to account for the fact that it&#8217;s possible we don&#8217;t have a value for the given <code>key</code>. <code>Option</code> is a general data type that can take two forms, <code>Some(value)</code> and <code>None</code>. <code>Some(value)</code> denotes that we do have a value for the key and we can access that value through <code>Some.get</code>. Whereas <code>None</code> denotes that there was no value for the key.</p><p><code>Option</code> has a useful method <code>getOrElse(alterantive)</code>. When called on <code>Some</code> it returns the value contained in <code>Some</code>and ignores <code>alterantive</code>. Whereas <code>None.getOrElse(alternative)</code> returns the value of <code>alternative</code>. We&#8217;ll use this method in our code to replace <code>None</code> with zero when we fetch the count for a subreddit that we currently don&#8217;t yet have a count for.</p><p>Using <code>Map</code>, here is how we can compute the number of posts for each subreddit.</p><p>Note how we&#8217;re using <code>foldLeft</code>, a variant of <code>fold</code>, to process each post and increment the count for the corresponding subreddit in the map. You may recall that <code>fold</code> is used to aggregate all values in a list down to a single value. In this case, the final value is a<code>Map[String, Int]</code> that associates subreddits to their count of posts.</p><p>A quicker refresher on <code>fold</code> functions: We call <code>foldLeft</code> with our initial value of aggregation and our folding function. <code>fold</code> calls our folding function for every element in the list. In each call, the folding function also receives the current value of the aggregation. Our function returns the updated value of the aggregate that incorporates the list element. The <code>fold</code> functions return the final value of aggregation after processing every element in the list using our folding function.</p><p>Spend some time reviewing this code to see if you can reason through how we&#8217;re computing the number of posts for each subreddit. As an exercise, can you modify this example code to instead count the number of posts for each user?</p><p>While the current results are nice, we&#8217;re more interested in knowing the results for the top subreddits; i.e., those with the most posts in this sample of Reddit posts. To that end, we&#8217;ll need a way to order the subreddits by the number of posts so that we can select the top few subreddits to show. In computer science terminology, such a process is referred to as sorting.</p><p>You can add the following code to the preceding example to sort the subreddits by post count and then show the top 10 in this sample of Reddit posts.</p><p>There are a few new things going on here. First, we&#8217;re converting <code>subredditCount</code> from <code>Map[String, Int]</code> to <code>List[(String, Int)]</code> using the <code>Map.toList</code> method. This introduces a new concept called tuples in that <code>(String, Int)</code> is the type for a length-two tuple where the first element is a string and the second element is an integer.</p><p>Tuples are a general data type in Scala that can be used to represent fixed length collections of elements whereby each position has a fixed type. E.g., <code>(String, String, String, int)</code> is a length-four tuple. We could&#8217;ve used this tuple type instead of the class <code>Post</code> to represent the data in a single Reddit post.</p><p>In general, classes are a more legible way to group together related elements. Tuples can be useful in some cases, particularly in cases where we want to write generic algorithms that use placeholder types. This is the case in wanting a general method to convert a <code>Map[K, V]</code> in a list of associated pairs, <code>List[(K, V)]</code>.</p><p>Next, we&#8217;re using the method <code>sortBy</code> to sort our list of tuples. The method takes a function that computes a ranking score for each element of the list. The elements of the list are sorted by rank and a new list is returned by <code>sortBy</code> in which the elements are ordered. You can see that our ranking function just fetches the count for each subreddit by accessing the second element of the tuple, <code>t._2</code>.</p><p>The results for our sample of Reddit posts are as follows.</p><pre><code>(AskReddit,254)
(AutoNewspaper,214)
(The_Donald,84)
(CryptoCurrency,71)
(SteamTradingCards,69)
(RocketLeagueExchange,65)
(newsbotbot,65)
(videos,64)
(GlobalOffensiveTrade,59)
(PewdiepieSubmissions,58)</code></pre><p>In thinking about the numbers, we should remember that this is a small random sample of all Reddit posts so the counts are going to be much smaller than the full number of posts. Our sample is 0.1% sample of all Reddit posts in October 2018, so we could multiply these numbers by 1000 to estimate the total number of posts for each subreddit for this month.</p><p>With my passing familiarity with Reddit, I&#8217;d say these results seem consistent with my intuition about popular subreddits like &#8220;AskReddit&#8221;. What do you think?</p><p>Can you modify your earlier exercise code that computes the number of posts per author so that the results are sorted? Who are the top authors in this sample of Reddit posts?</p><p>Next, let&#8217;s see if our sample includes any posts with Scala in the title. You can add the following snippet to the previous ScalaFiddle widget to answer this question.</p><p>What do you think about these posts? Is every one of them about Scala or is there a deficiency in using this heuristic to programmatically identify relevant posts? We&#8217;ll consider more sophisticated ways to analyze posts soon.</p><p>What other words are interesting to you? Modify the code as you&#8217;d like to look for other posts that have certain keywords. In many ways, we&#8217;re building a simple, custom search engine to find posts relevant to our interests across this small sample.</p><p>Note, I myself have discovered a non-trivial amount of obscene language. As an exercise, you could write some Scala code to find posts that contain swear words. I&#8217;m not including example code for this because I don&#8217;t want to have a list of curse words on my blog.&nbsp;:)</p><p>In general, we&#8217;d be interested in computing the frequency of different words in post titles across each subreddit. Here&#8217;s some moderately sophisticated code that accomplishes such an analysis.</p><p>Take some time and think through this example. It&#8217;s a good review of many of the concepts we&#8217;ve considered so far in current and past articles. Reminder, that you can click &#8220;Edit on ScalaFiddle&#8221; on the widget to open the example in a separate window that doesn&#8217;t have the horizontal compression of the widget to better read the code.</p><p>The example code includes some concepts we haven&#8217;t yet explored. If you&#8217;d like, you could explore these concepts on your own&#8202;&#8212;&#8202;ahead of our shared journey through Scala&#8202;&#8212;&#8202;using resources at <a href="http://scala-lang.org">scala-lang.org</a>. In general, that website is a great place to learn about Scala concepts. And, of course, a general Google search can also turn up some useful resources, including StackOverflow questions and answers.</p><p>One thing I&#8217;d like to explain at present is how this code example uses two cases of using pattern matching to deconstruct data structures. In these cases, we&#8217;re accessing the elements of a tuple through pattern matching deconstruction. Here&#8217;s an isolated example of deconstructing tuples in a function.</p><p>You can see we&#8217;ve defined the function in a non-standard fashion. In general, we&#8217;d primarily use this pattern in anonymous functions, which is what we&#8217;ve done in the word frequency example.</p><p>In addition to analyzing the Scala code, what do you think of these results? Do the word frequency results seem appropriate given your knowledge of Reddit? Are there any surprising results in highly frequent words for certain subreddits?</p><p>You can modify and extend these examples however you&#8217;d like to compute anything that interests you about Reddit posts. Here are some ideas for things you might want to compute for this sample of Reddit posts.</p><ul><li><p>What posts have the highest score? <em>(Example from intro of this article)</em></p></li><li><p>Which Redditors have the highest average scores?</p></li><li><p>Who are the most prolific-posting Redditors in each subreddit?</p></li><li><p>What words are frequent in high scoring posts? Versus what words are frequent in low scoring posts?</p></li><li><p>Which words have a generally low frequency across all posts, but a high frequency in specific subreddits? I.e., what words are uniquely characteristic of a given subreddit? We can quantify this by taking the ratio of <code>subredditWordFrequency/generalWordFrequency</code> for each subreddit/word pair and looking for high ratios. (This one is a good challenge to further develop your Scala proficiency.)</p></li></ul><p>I hope you&#8217;re enjoying applying Scala to analyze Reddit and learn a bit about Redditors. In the future, I&#8217;ll be showing you how to perform this analysis on the full set of Reddit posts for the month of October 2018. There are 11,306,843 posts in this month so we&#8217;ll need to learn how to apply Scala using the &#8220;big data&#8221; technology Spark.</p><p>You&#8217;ll be surprised to see how the code we write in these &#8220;big data&#8221; exercises is no more complicated than the code we&#8217;ve written in today&#8217;s exercises. Processing &#8220;big data&#8221; can be just as easy as small data when we use powerful technologies like Spark and Scala.</p><p>And thank you for working through another series of Scala exercises with me. I hope this one has been particularly fun because we&#8217;re getting to learn about real-world data. I&#8217;ll do what I can to create more exercises with this style.</p><p>I&#8217;d like to thank <a href="https://pushshift.io/">pushshift.io</a> for hosting Reddit data dumps. This is a really interesting source of data and it was easy for me to take a small sample from the full dataset for October 2018 for these examples and exercises. You can download this data yourself and write your own Scala code to start performing more sophisticated analyses.</p>]]></content:encoded></item><item><title><![CDATA[A brief tour of lists in Scala and algorithmically processing them in SICP exercises]]></title><description><![CDATA[Let&#8217;s continue our quick journey through Scala using SICP exercises to demonstrate the beauty and simplicity of this powerful programming&#8230;]]></description><link>https://matthagy.substack.com/p/a-brief-tour-of-lists-in-scala-and-algorithmically-processing-them-in-sicp-exercises-935ff4d77775</link><guid isPermaLink="false">https://matthagy.substack.com/p/a-brief-tour-of-lists-in-scala-and-algorithmically-processing-them-in-sicp-exercises-935ff4d77775</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Mon, 25 Feb 2019 00:07:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ARgh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4>Let&#8217;s continue our journey through Scala using SICP exercises to demonstrate the elegance and simplicity of this powerful programming language in processing list data structures.</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ARgh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ARgh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ARgh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ARgh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ARgh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ARgh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/fe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!ARgh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ARgh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ARgh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ARgh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe24b3db-0e8d-4c80-a890-210d7418418f_800x546.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>This article builds off of part 1, <a href="https://medium.com/@matthagy/quickly-learning-the-basics-of-scala-through-structure-and-interpretation-of-computer-programs-ed5bfa90e8dc">Quickly learning the basics of Scala through Structure and Interpretation of Computer Programs examples</a>. That article also covers reasons for why you may want to learn Scala.</p><p>We continue our exploration of Scala using examples that solve exercises from the classic book, &#8220;<a href="https://web.mit.edu/alexmv/6.037/sicp.pdf">Structure and Interpretation of Computer Programs</a>&#8221; (SICP). Small exercises for the reader are also included.</p><p>Today we&#8217;re going to start working with some data in that we&#8217;re going to learn how to create and processes lists of elements. A list is a simple data structure that consists of a sequence of elements. There are many cases where we&#8217;ll need a collection of elements and lists can be a reasonable data structure in many of these cases. E.g., if we wanted to programmatically analyze some tweets from a famous person then we could store their tweets in a list for processing in Scala.</p><p>A list is constructed as a linear chain of elements whereby each element points to the next element in the list. Totally reasonable if that doesn&#8217;t sound intuitive. I think the concept is best illustrated with an example. The following figure shows a list of three elements; 12, 99, and 37.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rbRe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rbRe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png 424w, https://substackcdn.com/image/fetch/$s_!rbRe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png 848w, https://substackcdn.com/image/fetch/$s_!rbRe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png 1272w, https://substackcdn.com/image/fetch/$s_!rbRe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rbRe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!rbRe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png 424w, https://substackcdn.com/image/fetch/$s_!rbRe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png 848w, https://substackcdn.com/image/fetch/$s_!rbRe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png 1272w, https://substackcdn.com/image/fetch/$s_!rbRe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0fee8eb1-1220-4d49-8cc5-e5e2640a7ab4_800x80.png 1456w" sizes="100vw"></picture><div></div></div></a><figcaption class="image-caption">From Wikipedia article <a href="https://en.wikipedia.org/wiki/Linked_list">Linked&nbsp;list</a></figcaption></figure></div><p>Each list element consists of a value and a pointer to the next element. You can see how the first element of the list contains the value 12. This element also points to the second element in the list. The second element contains the value 99 and points to the third element. Finally, the third element of this list contains the value 37 and points to a special &#8220;end-of-list&#8221; terminal.</p><p>In Scala, we call this special terminal element <code>Nil</code>. We need such a terminal value to let us know when the list ends. We can think of <code>Nil</code> as a special element of the list that neither contains a value nor points to another value. It just exists to cap off the end.</p><p>So let&#8217;s go ahead and build the 12-to-99-to-37-to-Nil list in Scala.</p><p>Interestingly, we have to build the list starting from the tail. This makes sense when we reflect on how we&#8217;re going to build this list. We can&#8217;t create the first element until we have the second one since the first element needs to know what it&#8217;s going to point to when we create it. Similarly, we can&#8217;t create the second element until the third has been created.</p><p>So let&#8217;s start by creating the last non-<code>Nil</code> element of the list that contains the value 37 and points to <code>Nil</code>. Because lists are used all through Scala, the list element is given a special, concise name,&nbsp;<code>::</code>. Yes, the formal name of the list element in Scala is just two colons. While unusual, as you work more with lists, you&#8217;ll come to appreciate the novel naming and brevity. Here&#8217;s the Scala code for creating a list with just the single element 37.</p><p>We&#8217;re simply calling&nbsp;<code>::</code> like a function and this corresponds to creating a new list element of type&nbsp;<code>::</code>. Each&nbsp;<code>::</code> element has two attributes:</p><ul><li><p><code>head</code>&nbsp;: the value of the list element (e.g., 37 in this example)</p></li><li><p><code>tail</code>&nbsp;: the pointer to the next element in the list (<code>Nil</code> in example)</p></li></ul><p>E.g.,</p><p>Note that the Scala shows the single-element list&nbsp;<code>::(37, Nil)</code> in a special format that downplays the role of individual list elements and just shows the values contained in the list. <code>List(37)</code> is the clearer representation of this list with just this one element. Scala could also show this as&nbsp;<code>::(37, Nil)</code>, but that&#8217;ll be harder to interpret when we get to longer lists.</p><p>Now let me introduce a generally cool Scala feature that motivates the&nbsp;<code>::</code> naming convention:&nbsp;<code>::(head, tail)</code> can also be written as <code>head&nbsp;:: tail</code>. E.g.,</p><p>Hence,&nbsp;<code>::</code> can be thought of as a binary operator in math, similar to say <code>+</code> or <code>-</code>. Do you agree that this infix notation is a simpler syntax than&nbsp;<code>::(37, Nil)</code>? We can appreciate it more when we see that multiple usages of&nbsp;<code>::</code> can be chained in creating the rest of the list. Here&#8217;s what the code looks like to construct the full list with conventional constructor function calls.</p><p>Contrast that to the infix notation.</p><p>Would you agree that the infix notation is a more legible way to define the elements that make up a list?</p><p>And we can do even better. The <code>List(12, 99, 37)</code> notation shown in the shell is a valid Scala expression to create a list of these three elements in the shown order. This is because <code>List</code> is a function for constructing lists. It can take any number of arguments, including zero. Behind the scenes, it does the work of creating the individual list elements and it returns the start of the list. The <code>List</code> function will be helpful as we create lists to process in today&#8217;s exercises.</p><p>Lists also introduce a new concept in terms of data types in that we want to be able to differentiate between lists with different types of elements. E.g., differentiating a list of <code>Int</code> values from a list of <code>String</code> values. This is necessary to ensure that all elements in a list conform to the same element type so we can write code that knows how to process all elements in an arbitrary list of a certain element type.</p><p>E.g., say we wanted to write a function to compute the sum of the values in a list of integers.</p><p>What would happen if we passed in a list of strings? E.g., <code>List("a", "b")</code>. If our code expected integers, then it would encounter an error when it tried to treat strings as integers. To avoid such errors, each Scala list type specifies the type of its list elements. The syntax for specifying a list of type <code>X</code> is <code>List[X]</code>. E.g., <code>List[Int]</code> and <code>List[String]</code>.</p><p>This allows us to write the following type declaration for the list argument in our function that expects a list of integers.</p><p>And thereby Scala ensures that we can never accidentally call <code>sumListIntegers</code> with a list of anything other than integers.</p><h3>SICP List Exercises</h3><p>Let&#8217;s go ahead and implement<code>sumListIntegers</code> using our understanding of lists. As in part 1 of this series, we&#8217;re going to use recursion in place of looping to consider each element in computing the sum of a list.</p><p>Let me show you the example code and then explain what it&#8217;s doing.</p><p>The main strategy is that we recurse on the sub-list formed by removing the first element. E.g., <code>List(12, 99, 37).tail</code> is the list <code>List(99, 37)</code>. We then combine together the result of the recursive call with the value of the first element through addition. In turn, the recursive call to <code>sumListIntegers</code> with argument <code>List(99, 37)</code> again makes a recursive call, this time with an argument of <code>List(37)</code>. And we&#8217;re not done yet! That call, in turn, calls <code>sumListIntegers</code> with the tail of <code>List(37)</code> which is <code>Nil</code>. The recursion then terminates because the empty list <code>Nil</code> has a sum of zero and we can return that.</p><p>That&#8217;s a lot of words. Let&#8217;s consider what the expansion looks like in math/code.</p><p>Take some time if you&#8217;d like and think through this recursion strategy to process all elements in a list. When you&#8217;re ready, you can then try out creating a recursive function to compute the length of a list by filling out the following template. I.e., count the number of elements in a list.</p><p>You can test your solution in <a href="https://scastie.scala-lang.org/">Scastie</a>. (Note, you have to remove the lines that start with <code>&gt;</code> when running your code. I added those lines to show the expected output for each example input.)</p><p>Next, let&#8217;s consider a function that constructs a new list from its input list. E.g., let&#8217;s write a function to add five to every element of a <code>List[Int]</code>. This can be done recursively with the following code.</p><p>Can you follow through how the recursive function calls build a new list that contains the results of adding five to each element of the input list? If not, take some time and work through the individual examples and reason through what the recursion chain looks like. I.e., write out the recursion expansion as we did with <code>sumListIntegers</code>.</p><p>Once you feel comfortable with the example, can you generalize the example to be a higher-order function that takes an arbitrary input function, <code>func</code>, in addition to a <code>l: List[Int]</code> and creates a new list that is the result of applying <code>func</code> to every element in the input list? Recall that a higher-order function is a function that takes other functions as input.</p><p>Let us call this new function <code>map</code> since it is mapping the function <code>func</code> across every element of the input list to create a new list. Here&#8217;s a template to get you started.</p><p>Again, you can test your solution in <a href="https://scastie.scala-lang.org/">Scastie</a>.</p><p>Once you&#8217;ve completed that exercise, let me show you a neat and more legible way to recurse over lists using Scala&#8217;s <code>match</code> expression. You may recall from the previous article how <code>match</code> allows us to define different conditions for matching a value. Scala then evaluates different code based upon which condition matches.</p><p>Here&#8217;s a neat way to implement <code>add5toElement</code> using <code>match</code> to determine whether or not we&#8217;re dealing with the <code>Nil</code> element.</p><p>You can see that we&#8217;re matching against the first element in the list. The first <code>case</code> matches <code>Nil</code> and terminates recursion since we&#8217;ve reached the end of the list. The second <code>case</code> statement is more interesting. Here we&#8217;re using deconstruction to not only match an&nbsp;<code>::</code> element, but to also unpack its <code>head</code> and <code>tail</code> attributes into the local <code>val</code>s of <code>h</code> and <code>t</code>. We can then use these variables in processing the list element and recursing on the tail.</p><p>This starts to hint at some of the power of <code>match</code>. You&#8217;ll find many cases in Scala where <code>match</code> can be used to not only match against data but to also concisely access the attributes of a data type like&nbsp;<code>::</code>. We&#8217;ll further explore <code>match</code> in later articles.</p><p>Can you modify your <code>map</code> function to use <code>match</code>?</p><p>We actually didn&#8217;t need to implement <code>map</code>. It&#8217;s already built into Scala. Specifically, lists in Scala have a <code>map</code> method (i.e., a function attached to the data structure) that we can use to apply a function to every element in the list, returning a new list of the results of applying the function. E.g.,</p><p>It was still a great exercise to implement <code>map</code> to learn about recursion on lists, which is a common pattern in Scala. Nonetheless, you can commonly avoid writing your own recursive functions by leveraging builtin Scala algorithms like <code>List.map</code>.</p><p>As we&#8217;ll explore more in the future, <code>map</code> can work with lists of any element type as long as you pass in a function that can accept such elements. E.g., it doesn&#8217;t just work on <code>List[Int]</code>, but it also works on <code>List[String]</code> and any other type of list as long as we have an appropriate function to map across the list. Further, the mapping function can have any return type and we get a list of elements with the return type of the given function.</p><p>This type flexibility is possible due to placeholder types in Scala. We&#8217;re gonna briefly look at simplified code examples for <code>List</code> that demonstrate this concept. In doing so, we&#8217;ll encounter a few parts of Scala that we haven&#8217;t yet studied and don&#8217;t be surprised if you can&#8217;t follow all of the code. I just want to introduce the idea that Scala has generic data structures like <code>List</code> that can hold any type of element and that this is accomplished through placeholder types. Here&#8217;s the simplified example code.</p><p>No need to understand the details yet. Just see if it makes sense how both&nbsp;<code>::[A]</code> and <code>NilClass[A]</code> implement the behavior of <code>List[A]</code> in terms of methods <code>head</code>, <code>tail</code>, and <code>map</code>. Further, these data structures can work on any generic type of list values as represented by the placeholder type <code>A</code>.</p><p>Only showing this example to hint at the power of Scala&#8217;s types. See if you can reason through why a calling <code>map</code> on a<code>List[A]</code> with a function of type <code>f: A =&gt; B</code> generates a <code>List[B]</code> where <code>A</code> and <code>B</code> can be any arbitrary Scala types. They can even be the same type.</p><p>To reiterate,&nbsp;<code>::</code> and <code>Nil</code> are two types of <code>List</code> elements that have different behavior. Hence why we can use <code>List[Int]</code> to represent a sequence of&nbsp;<code>::</code> elements that have <code>Int</code> values and terminate with <code>Nil</code>. We&#8217;ll explore this topic of traits and classes more in future articles.</p><p>There&#8217;s also a builtin list method called <code>fold</code> that can be used to aggregate across all elements in a list. E.g., we could re-implement <code>sumListIntegers</code> as follows.</p><p>Note how we call fold with two different parameter lists. The first parameter list provides a starting value of aggregation, in this case, zero. The second parameter list takes a single function that operates on two elements.</p><p>Also, this example introduces the concept of an anonymous function in the code<code>(aggregate: Int, element: Int) =&gt; aggregate + element</code>. Anonymous functions can be useful to make our code more concise by not needing to define and name every function we write.</p><p>The &#8220;folding&#8221; function will be called multiple times. Each time it receives the current value of aggregation so far, as well as an element of the list. The function computes the new aggregation value, in this case by adding the list element value to the aggregate. This is repeated for every element in the list and results in a final aggregation value that returned by <code>fold</code>.</p><p>The name fold corresponds to how we create the recursion chain of form <code>f(f(f(0, 37), 99), 12)</code> for the folding function <code>f</code> with an input of <code>List(12, 99, 37)</code>. We&#8217;re essentially repeatedly calling <code>f</code> and <em>folding</em> the list down to a single aggregate value through the recursion chain.</p><p>FYI, here&#8217;s a simplified implementation of <code>fold</code> in Scala. Take a few minutes and see if you can reason through some parts of what&#8217;s going on. Totally fine if you find some parts confusing and don&#8217;t yet understand them. We&#8217;ll be exploring the details of placeholder types and classes in the future.</p><p>Both <code>map</code> and <code>fold</code> can be used in many cases to simplify our processing of lists. Further, as we&#8217;ll see in future installments of this series, there are other Scala data structures that also implement <code>map</code> and <code>fold</code> methods for processing their elements. Lastly, there are many other useful algorithms implemented in built-in methods of Scala data structures that can simplify our code and we&#8217;ll explore them over time.</p><p>As always, thanks for following along on our journey through Scala. And please let me know if any part of this article could be made more clear so as to help future readers. Send any feedback to <a href="mailto:matthew.hagy@gmail.com">matthew.hagy@gmail.com</a>.</p><p>Part three is out and it&#8217;s particularly fun in that you get to analyze Reddit data in your browser and learn a bit about Redditors. Checkout <a href="https://medium.com/@matthagy/interactively-exploring-reddit-posts-using-basic-scala-in-your-browsers-f394843069de">Interactively exploring Reddit posts using basic Scala in your browser</a>.</p>]]></content:encoded></item><item><title><![CDATA[Quickly learning the basics of Scala through Structure and Interpretation of Computer Programs…]]></title><description><![CDATA[Scala is a programming language of the future and anyone can learn the basics of Scala to work with technologies such as Spark. This&#8230;]]></description><link>https://matthagy.substack.com/p/quickly-learning-the-basics-of-scala-through-structure-and-interpretation-of-computer-programs-ed5bfa90e8dc</link><guid isPermaLink="false">https://matthagy.substack.com/p/quickly-learning-the-basics-of-scala-through-structure-and-interpretation-of-computer-programs-ed5bfa90e8dc</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Sat, 23 Feb 2019 18:34:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-yqo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4>Scala is a programming language of the future and anyone can learn the basics of Scala to work with technologies such as Spark. This tutorial demonstrates the simplicity of basic Scala and teaches everyone enough to get&nbsp;started.</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-yqo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-yqo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-yqo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-yqo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-yqo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-yqo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!-yqo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-yqo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-yqo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-yqo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F53a061dc-8899-4a45-9e8d-33ed008cd50b_800x390.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h3>Why Scala is so&nbsp;exciting</h3><p>I&#8217;ve used a lot of programming languages over the last 15 years as an academic researcher, data scientist, and engineer. I&#8217;ve recently learned Scala and have found it to be an exceptionally elegant and powerful language. Specifically:</p><ul><li><p>Scala is a highly legible language that is a pleasure to read.</p></li><li><p>Scala code is concise.</p></li><li><p>Scala has a powerful type system to catch errors while you&#8217;re writing code. The type annotations further add to the legibility in that you know the types of variables for each snippet of code.</p></li><li><p>Scala encourages a functional programming style that is more natural to many non-engineers than conventional procedural programming languages.</p></li></ul><p>You can find more details of my thoughts on Scala in my article, &#8220;<a href="https://medium.com/@matthagy/initial-impressions-of-scala-from-a-java-and-python-data-engineer-c8e2038aca3d">Initial impressions of Scala from a Java and Python data engineer</a>&#8221;. Also, you can check out <a href="https://www.scala-lang.org/">scala-lang.org</a> for an overview of what makes the language great.</p><p>In this article, you&#8217;ll explore some basic Scala examples so you can see for yourself how simple and elegant the language can be. Yes, Scala is a rich language and ecosystem that has a steep learning curve for people looking to fully master the technology. But I believe anyone can start using Scala with just a basic understanding of the language. One can always learn more advanced Scala features later if they need a more sophisticated language.</p><p>You may even appreciate using such a highly <em>scalable</em> language (which is where the name Scala comes from) in that there are always more advanced features to learn when you have a problem appropriate for them. There are even a lot of Open Source libraries that extend the language to make it more powerful in certain domains such as analyzing and processing &#8220;big data&#8221;.</p><p>In this article, we&#8217;ll work through some basic programming examples from the legendary &#8220;<a href="https://web.mit.edu/alexmv/6.037/sicp.pdf">Structure and Interpretation of Computer Programs</a>&#8221; (SICP) book. You can run these examples, including modified versions, in your browser using <a href="https://scastie.scala-lang.org/">Scastie</a>. We won&#8217;t digress on the details of any single example and instead, we&#8217;ll explore a range of examples so you can start to see the patterns for yourself. Small exercises are included to help you learn Scala. We&#8217;ll again use Scastie for testing out the code we write in exercises.</p><h4>Hello World</h4><p>Before diving into SICP, let&#8217;s cover the time-honored tradition of showing a <a href="https://en.wikipedia.org/wiki/%22Hello,_World!%22_program">Hello World</a> program, which simply prints &#8220;Hello World&#8221; as output.</p><p>We&#8217;re simply using the &#8220;print line&#8221; function. You can copy this code into <a href="https://scastie.scala-lang.org/">Scastie</a> to test this out.</p><h4>Math Expressions</h4><p>SICP starts by considering some example math expressions.</p><p>The format of these math expressions is rather intuitive. Also, if you&#8217;ve worked with other programming languages, then you may find the math syntax identical to other languages such as Python, Java, C#, C, and Javascript.</p><p>Note that the lines starting with <code>&gt;</code> are not Scala code. I just added those lines to show us the results of each expression.</p><p>As an exercise, how would you multiply the numbers 7, 3, and 5 in Scala? Try out your code in your browser using <a href="https://scastie.scala-lang.org/">Scastie</a>.</p><h4>Variables</h4><p>In Scala, we can create a variable and assign it a value as follows.</p><p>Variables can be reassigned.</p><p>Variables are useful because they allow us to save the results of computation for reuse. They&#8217;re particularly helpful when we want to use the value of an expression in multiple places.</p><h4>Vals (i.e., constant variables)</h4><p>In general, Scala encourages us to avoid reassigning variables as that can make programs more complicated. Instead, Scala encourages the use of <code>val</code> variables, which cannot be reassigned.</p><p>We should use <code>val</code> in place of <code>var</code> whenever possible to keep our code simple and easy to reason about. Working with Scala will teach us patterns to avoid variable reassignment.</p><h4>Functions</h4><p>We&#8217;ll commonly want to define computation that can be reused. For that, we use functions. Functions take input parameters and compute a resulting value. E.g.,</p><p>The big thing to note in the function definition (i.e., <code>def</code>) is that we have to specify the types for both function parameters and the return value of the function. In this case, the function takes a single integer parameter, <code>x</code>, and returns an integer.</p><p>Functions can take more than one input parameter.</p><p>In the previous two examples, the function just consisted of a single expression. We can have more complicated functions with multiple statements, including defining local variables.</p><p>Brackets are used to group together these multiple statements. Note, that the function evaluates to the value of the last expression and there&#8217;s no need for an explicit <code>return</code> statement as in some other programming languages. This example also introduces a new type, <code>Double</code>, that is used to represent numbers with decimal points; in math terms, <a href="https://en.wikipedia.org/wiki/Real_number">real numbers</a>.</p><p>Function parameters don&#8217;t have to be limited to numeric types and can take any data type. For instance, there is also the <code>String</code> type, which consists of text; i.e., a string of characters. Further, functions don&#8217;t have to evaluate to a usable value and these functions are declared with <code>Unit</code> return types.</p><p>How would you write a function that takes two integers, defines a <code>val</code> that is the sum of the two integers, and then print that value? Here&#8217;s a template.</p><p>Does your code run in <a href="https://scastie.scala-lang.org/">Scastie</a>?</p><h4>Conditionals</h4><p>Scala supports <code>if</code> expressions to conditionally evaluate expressions. Unlike more procedural languages where <code>if</code> is a statement (i.e., code that doesn&#8217;t evaluate to a value), the Scala <code>if</code> is an expression that evaluates to a value.</p><p>Just like functions, you can have a conditional expression that combines multiple statements (e.g., assigning a <code>val</code>) and expressions. Same as functions, brackets are used to create such a compound expression and it evaluates to the value of the last expression.</p><p>Scala <code>if</code> expressions can be used to conditionally execute statements with side effects; e.g., printing a value. Note, a side effect is anything that happens outside of our code evaluating to a value, including printing output.</p><p>In this example, there is no else clause.</p><p>Can you modify the function to be called <code>printClassification</code> that prints both large and small numbers, with a suffix that says either &#8220;is large enough&#8221; or &#8220;is too small&#8221;?</p><p>Conditionals can be nested as shown in the following example for SICP <code>abs</code> function for computing the absolute value of an integer.</p><h4>Recursive Functions</h4><p>Sometimes we just want to repeat something in code. For example, printing something out <em>n</em> times or summing the integers from <em>a</em> to <em>b<strong>. </strong></em>Historically, many programming languages used something called loops to repeat code. This coding practice is called procedural or imperative coding and was the dominant trend in mainstream programming languages until recently.</p><p>In contrast, a common pattern in functional programming languages, including Scala, consists of using function recursion in place of looping. I.e., functions that call themselves. We can see how this is applied in Scala with the classic <a href="https://en.wikipedia.org/wiki/Factorial">factorial</a> example.</p><p>This example also introduces the concept of <code>throw</code>ing exceptions. We won&#8217;t cover the details yet. Just know it&#8217;s a way for our code to handle erroneous situations like passing an invalid input to a function.</p><p>Can you write a function called <code>sumUpTo(x: Int)</code> that uses recursion to sum all integers from zero up to <code>x</code> (inclusive)?</p><p>Again, you can test your solution in <a href="https://scastie.scala-lang.org/">Scastie</a>.</p><h4>An aside on basic pattern&nbsp;matching</h4><p>I&#8217;d like to take a moment to show how the Scala <code>match</code> construct can be used to implement the conditional logic of the <code>factorial</code> function.</p><p>Here we&#8217;re using the <code>match</code> construct to evaluate different logic based upon the value of <code>x</code>. Further, you can see we&#8217;re not explicitly handling the negative value case. Instead, negative inputs result in throwing a <code>MatchError</code> because none of the defined <code>case</code> statements match that input. Also, note how we introduced the <code>val xp</code> that is only operated on when its value is positive.</p><p>This is a basic usage of <code>match</code> and it can do much more powerful things. We&#8217;ll consider more advanced usage of <code>match</code> in future articles.</p><h4>Higher Order Functions</h4><p>As the last part of this introduction to Scala, let&#8217;s explore higher-order functions. These are functions that take other functions as arguments. Consider the following example where we want to call a function, <code>func</code>, exactly <code>n</code> times using a function <code>callFunctionNTimes</code>.</p><p>You can see that the <code>func</code> argument of <code>callFunctionNTimes</code> is defined as <code>(String) =&gt; Unit</code>. This means that <code>func</code> is a function that takes a single <code>String</code> argument and has no return value. We can pass in any function that takes this form, including both <code>println</code> and <code>printTwice.</code></p><p>Can you write a higher-order function of the form: <code>callForIntegersInRange(func: (Int) =&gt; Unit, start: Int, end: Int): Unit</code></p><p>Here&#8217;s a template.</p><p>Again, you can test your solution in <a href="https://scastie.scala-lang.org/">Scastie</a>.</p><p>Aside: Is it interesting that we can treat <code>println</code> as both a <code>(String) =&gt; Unit</code> function and a<code>(Int) =&gt; Unit</code> function? We&#8217;ll explore how Scala allows us to do this later in this series when we explore a concept called generic types. The short answer is that<code>println</code> is defined as a function of type <code>(Any) =&gt; Unit</code> and both <code>String</code> and <code>Int</code> can be treated as <code>Any</code> type.</p><h4>Closing Remarks</h4><p>Thank you for exploring Scala with me! I hope you&#8217;ve enjoyed learning a bit about Scala and are excited to learn more. If any parts have been confusing, please let me know and I&#8217;ll revise those parts. Further, if there are parts you really liked, let me know and I&#8217;ll try to preserve that style in the future. Let me know what you think at <a href="mailto:matthew.hagy@gmail.com">matthew.hagy@gmail.com</a>.</p><p>When you&#8217;re ready to continue on, the next installment in our series is <a href="https://medium.com/@matthagy/a-brief-tour-of-lists-in-scala-and-algorithmically-processing-them-in-sicp-exercises-935ff4d77775">A brief tour of lists in Scala and algorithmically processing them in SICP exercises</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6P0u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6P0u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png 424w, https://substackcdn.com/image/fetch/$s_!6P0u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png 848w, https://substackcdn.com/image/fetch/$s_!6P0u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png 1272w, https://substackcdn.com/image/fetch/$s_!6P0u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6P0u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/bbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!6P0u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png 424w, https://substackcdn.com/image/fetch/$s_!6P0u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png 848w, https://substackcdn.com/image/fetch/$s_!6P0u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png 1272w, https://substackcdn.com/image/fetch/$s_!6P0u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbdab8a9-ddf3-475a-8075-9687aec48340_800x160.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>&#128221; Read this story later in <a href="https://usejournal.com/?utm_source=medium.com&amp;utm_medium=noteworthy_blog&amp;utm_campaign=guest_post_read_later_text">Journal</a>.</p><p>&#128478; Wake up every Sunday morning to the week&#8217;s most noteworthy Tech stories, opinions, and news waiting in your inbox: <a href="https://usejournal.com/newsletter/?utm_source=medium.com&amp;utm_medium=noteworthy_blog&amp;utm_campaign=guest_post_text">Get the noteworthy newsletter &gt;</a></p>]]></content:encoded></item><item><title><![CDATA[An introduction to Spark GraphFrame with examples analyzing the Wikipedia link graph]]></title><description><![CDATA[The Spark GraphFrame is an incredibly powerful tool for performing distributed computations with large graphical data. This article&#8230;]]></description><link>https://matthagy.substack.com/p/an-introduction-to-spark-graphframe-with-examples-analyzing-the-wikipedia-link-graph-67e58c20a107</link><guid isPermaLink="false">https://matthagy.substack.com/p/an-introduction-to-spark-graphframe-with-examples-analyzing-the-wikipedia-link-graph-67e58c20a107</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Sat, 23 Feb 2019 03:11:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8agm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4>The Spark GraphFrame is an incredibly powerful tool for performing distributed computations with large graphical data. This article introduces the GraphFrame abstraction and shows how it can be leveraged to analyze the graph formed by the links between Wikipedia articles.</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8agm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8agm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8agm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8agm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8agm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8agm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/beea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!8agm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8agm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8agm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8agm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbeea79bd-d1f6-46bb-b68f-b226ba06648c_800x276.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>The Spark <a href="https://github.com/graphframes/graphframes">GraphFrame</a> is a powerful abstraction for processing large graphs using distributed computing. It provides a plethora of common graph algorithms including <a href="https://en.wikipedia.org/wiki/Label_Propagation_Algorithm">label propagation</a> and <a href="https://en.wikipedia.org/wiki/PageRank">PageRank</a>. Further, it provides the foundations for implementing complex graph algorithms, including a robust implementation of the <a href="http://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf">Pregel</a> paradigm for graph processing. Anyone who&#8217;s interested in working with large graphs should learn how to apply this powerful tool.</p><p>In this article, I&#8217;ll introduce you to the basic of GraphFrame and demonstrate how to use this tool through several examples. These examples consider the link graph between Wikipedia articles and I demonstrate how to analyze this graph by leveraging the GraphFrame abstraction.</p><p>Note that the examples in this post build off some more elementary Spark concepts such a DataFrames. Additionally, it uses basic Scala code to demonstrate algorithms. Only small and simple examples are shown so that one doesn&#8217;t need to be well-familiar with these concepts to learn about the power of the GraphFrame abstraction.</p><p>Let&#8217;s dive right in and consider how to create a GraphFrame. I&#8217;ll start by introducing the Wikipedia link data in a basic Spark RDD. Each element of this RDD is a single Wikipedia article page represented with the following Scala class.</p><p>Note that each link is the title of another page. I.e., each page knows all the other pages that it links to by title.</p><p>We begin with a single RDD <code>pages</code> that contains 19,093,693 Wikipedia article pages. From that, we generate two Spark DataFrames, one consisting of the vertices (i.e., page nodes) and the other consisting of the directed edges.</p><p>Note that there are 206,181,091 directed edges in this graph.</p><p>Next, we create a GraphFrame using these two DataFrames.</p><p>And that&#8217;s all we have to do to access this powerful abstraction. We can now start using some of the builtin graph algorithms to analyze the Wikipedia link graph.</p><p>Let start by computing something simple: the Wikipedia pages with the largest number of outbound links. To this end, we can use the GraphFrame method <code>outDegrees</code>, which is a computed DataFrame that corresponds to the number of outbound edges for each vertex. Since it&#8217;s a DataFrame, we can use the <code>orderBy</code> method and <code>limit</code> to select the top 10.</p><p>This gives the following results.</p><p>Interestingly, we can see that many special &#8220;Wikipedia:&#8221;-prefix pages have the highest number of outbound links.</p><p>Next, let&#8217;s consider the number of inbound edges for each page and find the top 10 linked-to pages using the corresponding GraphFrame method, <code>inDegrees</code>.</p><p>We can see that locations, including countries and cities, are among the most heavily linked to pages.</p><p>Now let&#8217;s explore some more complex graph computations. Let&#8217;s consider the most heavily-linked to article, &#8220;United States&#8221;, and find the other articles in the link graph that are furthest away from this article in terms of the number of links you have to follow to arrive at &#8220;United States&#8221;.</p><p>To this end, we can use the GraphFrame method, <code>shortestPaths</code>, which takes a collection of landmark vertices and returns the path length for every vertex in the graph to every landmark vertex.</p><p>It is interesting that there are only three articles that are a full 10 links removed from the &#8220;United States&#8221; article in terms of shortest path length.</p><p>Let&#8217;s go one step further and compute the number of pages at each path length. I.e., how many Wikipedia articles are 1 link removed from &#8220;United States&#8221;, how many are 2 links removed, etc.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FVId!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FVId!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png 424w, https://substackcdn.com/image/fetch/$s_!FVId!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png 848w, https://substackcdn.com/image/fetch/$s_!FVId!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png 1272w, https://substackcdn.com/image/fetch/$s_!FVId!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FVId!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/dd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!FVId!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png 424w, https://substackcdn.com/image/fetch/$s_!FVId!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png 848w, https://substackcdn.com/image/fetch/$s_!FVId!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png 1272w, https://substackcdn.com/image/fetch/$s_!FVId!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd07229d-0daa-4b4c-a758-94d3aa0b341f_800x301.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>(Note, that I&#8217;m using the built-in <code>display</code> function of the <a href="https://databricks.com/">Databricks</a> notebook. I&#8217;ll talk more about the joy of using Databricks in a future post.)</p><p>Here we can see that there are millions of pages that are between 2 and 4 links removed from the &#8220;United States&#8221; article. There are also a vanishingly small number of articles that are six or more links removed. Further, the -1 path length denotes articles that aren&#8217;t at all connected to the &#8220;United States&#8221; article at all and there are roughly a million pages that meet this criterion.</p><p>Lastly, no demonstration of GraphFrame would be complete without showing how easily it can be used to perform the PageRank algorithm.</p><p>The page rank of the top 10 articles is:</p><p>It may not be surprising that &#8220;United States&#8221; has the highest vertex rank as we know it&#8217;s the most heavily linked-to article.</p><p>I hope these examples have helped to convince you that GraphFrame is a powerful abstraction for performing distributed computation on large graphs. There are additional more advanced concepts that I hope to share in future articles, including how to implement custom graph algorithms using the Pregel compute paradigm with GraphFrame.</p><p><strong>Update</strong>: If you&#8217;ve found the Scala examples in this article interesting and would like to learn more about this powerful programming language you can check out my article, <a href="https://medium.com/@matthagy/quickly-learning-the-basics-of-scala-through-structure-and-interpretation-of-computer-programs-ed5bfa90e8dc">Quickly learning the basics of Scala through Structure and Interpretation of Computer Programs examples (Part 1)</a>.</p>]]></content:encoded></item><item><title><![CDATA[Thoughtfulness: The oft-forgotten dimension in interviewing professionals]]></title><description><![CDATA[In interviewing over a thousand professionals, I&#8217;ve found you can commonly identify high-caliber candidates based on their high-level of&#8230;]]></description><link>https://matthagy.substack.com/p/thoughtfulness-the-oft-forgotten-dimension-in-interviewing-professionals-4d00aeab4dac</link><guid isPermaLink="false">https://matthagy.substack.com/p/thoughtfulness-the-oft-forgotten-dimension-in-interviewing-professionals-4d00aeab4dac</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Wed, 20 Feb 2019 19:46:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!i8-l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4><em>In interviewing over a thousand professionals, I&#8217;ve found you can commonly identify high-caliber candidates based on their high-level of thoughtfulness in their motivation for a new job and any professional opinions they&nbsp;hold.</em></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i8-l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i8-l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg 424w, https://substackcdn.com/image/fetch/$s_!i8-l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg 848w, https://substackcdn.com/image/fetch/$s_!i8-l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!i8-l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i8-l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/abdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!i8-l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg 424w, https://substackcdn.com/image/fetch/$s_!i8-l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg 848w, https://substackcdn.com/image/fetch/$s_!i8-l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!i8-l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabdfe350-d446-4232-960a-bea4cc816668_800x534.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@punttim?utm_source=medium&amp;utm_medium=referral">Tim Gouw</a> on&nbsp;<a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure></div><p>I &#8216;ve found that few people list interviewing as their favorite work responsibility, and I myself have never been delighted to see my week fill up with interviews.</p><p>Nonetheless, I&#8217;ve tried to make an art-and-science out of interviewing. By reviewing the subsequent outcome of candidates that I&#8217;ve interviewed, I&#8217;ve been able to pick up on some patterns in what made a candidate successfully earn an offer. While professional proficiency is certainly a requirement, I&#8217;ve found it to be well correlated with thoughtfulness and further believe thoughtfulness to be a generally valuable habit in identifying higher performing professionals.</p><p>What do I mean by thoughtfulness? My favorite example question is a great warmup to open any interview:</p><blockquote><p>What&#8217;s important to you in a new&nbsp;role?</p></blockquote><p>Strong candidates almost always have a clear and concise explanation of what they want in a future role. Further, their expectations are well aligned with our job posting, which shows they thought a bit about which companies to apply to.</p><p>When people are leaving a superficially similar role, such as software engineer applying for an engineering role, I ask them:</p><blockquote><p>What would you like to be different in a future role relative to your current&nbsp;role?</p></blockquote><p>Again, strong candidates have generally thought this through. Maybe they&#8217;re looking to learn and apply a specific, more powerful technology stack so that they can make bigger contributions and be a stronger professional. Other times they&#8217;re looking for a change in company size or industry and they can well explain what they want to be different in their future employer.</p><p>Weaker preliminary answers would just consist of generic reasons. E.g., &#8220;I want to work with X&#8221;, where X is something very generic like &#8220;big data&#8221;. I would always dig into these answers to try to better understand what parts of X they&#8217;re interested in and what skills they want to learn. It&#8217;s great when they&#8217;ve already started to learn some of these skills (e.g., reading a book or attending a course) and can talk intelligently about the problem space at an initial level of sophistication.</p><p>At times, I&#8217;ve had candidates think through some things over the course of a few minutes and come up with decent preliminary thoughts. This may show that they&#8217;re early in their career search and career planning, but they&#8217;re willing to give it serious consideration. They may have planned on doing more thinking before accepting any offer and are looking to first gain info on interesting potential employers. In my opinion, this is forgivable, especially when someone is early in their career.</p><p>The lower-end-performing candidates are those that just wanna get through this phase quickly, using only generic answers, and get on through the interview. Commonly, these candidates will go on to also rush through the technical exercises with generic &#8220;pattern matching&#8221; and without thinking through the problem.</p><p>I return to thoughtfulness again in the interview when I ask candidates to explain their choices. E.g., &#8220;why would you want to use Spark for data engineering versus say Hadoop MapReduce?&#8221; If someone has years of experience with this area, then I would hope they could clearly explain why they developed their opinion. It&#8217;s great when they can describe alternative approaches and explain why they find them inadequate. I can even accept, &#8220;That&#8217;s a company/industry standard that I have yet to reflect on&#8221; when they still demonstrate they understand the domain well.</p><p>Lastly, in my own professional development, I&#8217;ve found thoughtfulness in reflecting on my strengths and weaknesses and how I want to develop, to greatly aid in my growth as a professional. I even feel more confident in tackling larger, new challenges when I&#8217;ve put a little thought into why I&#8217;m excited to do this new responsibility.</p><p>One might hypothesize that professionals who make a habit of thoughtfullness simply grow into more well-developed professionals. And it&#8217;s a habit we can all develop. I certainly have found myself growing more thoughtful about my profession with time and I&#8217;d hope we can all continue to grow along this dimension.</p><p>Thank you for considering my thoughts. What do you think? Do you believe thoughtfulness is an important attribute to interview for? If so, how do you interview for it? Let me know in the comment section below.</p>]]></content:encoded></item><item><title><![CDATA[The limits of SQL in data science, analytics, and engineering]]></title><description><![CDATA[SQL has always seemed like an elegant solution to implement simple data analysis and ETL, but it always seems to break down beyond a&#8230;]]></description><link>https://matthagy.substack.com/p/the-limits-of-sql-in-data-science-analytics-and-engineering-4d7e48271a2f</link><guid isPermaLink="false">https://matthagy.substack.com/p/the-limits-of-sql-in-data-science-analytics-and-engineering-4d7e48271a2f</guid><dc:creator><![CDATA[Matt Hagy]]></dc:creator><pubDate>Wed, 20 Feb 2019 17:21:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!26SG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4>SQL has always seemed like an elegant solution to implement simple data analysis and ETL, but it always seems to break down beyond a certain level of complexity. Might Spark, DataFrames, and Scala (SDS) be a good solution for more complex work with data, even for non-engineers?</h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!26SG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!26SG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png 424w, https://substackcdn.com/image/fetch/$s_!26SG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png 848w, https://substackcdn.com/image/fetch/$s_!26SG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png 1272w, https://substackcdn.com/image/fetch/$s_!26SG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!26SG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/abd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&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_!26SG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png 424w, https://substackcdn.com/image/fetch/$s_!26SG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png 848w, https://substackcdn.com/image/fetch/$s_!26SG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png 1272w, https://substackcdn.com/image/fetch/$s_!26SG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fabd4c2ae-1ec0-4053-8eed-d278e0c0ebf4_800x441.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>I truly want to do more with SQL. It seems like such a simple and elegant way to represent data joins, filtering, and basic transformations in a concise format. In many ways, I feel SQL is closer to a mathematical way of defining computation (i.e., a functional, LISPy, declarative approach) than conventional imperative code, which is a plus for SQL in my opinion. I particularly treasure short SQL queries that can quickly answer random ad hoc questions such as the following.</p><p>Further, I find many people who don&#8217;t identify as highly technical can learn basic SQL quickly and if necessary master it well enough to perform serious data analysis and transformations. As a data scientist and engineer, I find it great to be able to work with a larger set of stakeholders in thinking through the business logic we want to implement in computing stats or processing data. We simply access more people&#8217;s critiques and ideas when non-engineers can work with the logic.</p><p>But I always find SQL inadequate once the complexity grows beyond about a dozen lines of code in that I immediately start worrying about correctness and legibility. I&#8217;d much rather implement the transformation in Spark with DataFrames using Scala (or if necessary PySpark using Python). I can then break my logic down into simple well-named functions and rigorously unit test each function. Simple integration tests can be used to verify that everything is connected together correctly. All around, I&#8217;m simply more confident in the correctness of a Scala solution and feel more capable in refining and maintaining the code in the future.</p><p>In many ways, I wish it didn&#8217;t have to be that way with SQL. I&#8217;d really like a great way to extract arbitrary SQL expression into functions and further have a great environment for testing SQL. I have yet to find anything that works for a range of SQL dialects and is also open source. Let me know if there is a good tool I should be looking into.</p><p>I further find SQL to be a difficult language for expressing certain complex logic. For example, parsing JSON and then extracting and transforming specific fields. I know there exist solutions for loading nested JSON into SQL engines for subsequent processing, but I&#8217;d rather write a Spark workflow that just directly reads the raw SQL data and perform the parsing and transformations in Scala.</p><p>Further, I&#8217;ve found myself having to implement complex business logic to perform various analysis and transformations (particularly for feature engineering) that just couldn&#8217;t be written in SQL. Or at least it wasn&#8217;t straightforward to implement in a conventional SQL approach. Sometimes I&#8217;ve found hacky solutions, but they don&#8217;t seem like a good representation of the logic we want to develop and maintain. Here&#8217;s an example of a Spark workflow that I&#8217;d struggle to implement elegantly in SQL.</p><p>Can you think of a good way to implement this logic in SQL?</p><p>Traditionally, user-defined functions (UDFs) would be developed in a conventional programming language to extend SQL capabilities. I find that solution inelegant in that we&#8217;re now mixing two languages. Further, there are limits to what can be implemented in UDFs (and user-defined aggregates, UDAs). Nowadays, I think it&#8217;s just better to use (Py)Spark and define the custom logic alongside the data processing definitions.</p><p>Lastly, I really like types in any programming language. I think types convey so much information not only to the compiler but also to people reading the code. I find well-named functions, objects, and members &#8212;with type annotations&#8202;&#8212;&#8202;provide a great level of self-documentation in code. Combine that with some small comments and concise external documentation, and you end up with highly legible code that anyone familiar with the language can learn and work with.</p><p>Scala has an excellent type system and even modern Python has optional type annotations. While most SQL dialects support some level of types in stored procedures and functions, I&#8217;ve found this limited to basic types and therefore can&#8217;t be used to the same extent as type annotations in a robust programming language.</p><p>I just don&#8217;t see a path forward to getting SQL to the same quality as a Spark, DataFrame, and Scala solution. Yet, I recognize the need for data processing logic to be legible and modifiable to more than just engineers. I hypothesize that Spark, DataFrames, and basic Scala (SDS) could be used to that end.</p><p>I&#8217;m not proposing that non-engineers be able to read, reason about, and modify a full production Scala engineering system, but instead that they can work with small code snippets at a complexity level comparable to SQL. Further, DataFrame operations can build off their current understanding of SQL operations such as joins, filtering, and mapping transformations. They simply need only to learn the new syntax for implementing these familiar operations. Over time, they can learn more Scala to implement more complex logic when their work requires it.</p><p>To further facilitate this education, I&#8217;d like to develop a small tutorial of transferring SQL concepts to the SDS stack. Further, to really sell the materials, I&#8217;d like to also develop a cool SQL-&gt;SDS transpiler. People could use this to see how their current SQL logic is transformed into this other tech stack. Combined with a snazzy web app, people could immediately start learning the equivalent SDS code for their work. This would allow people familiar with SQL to start learning the specific SDS knowledge they need to start solving problems.</p><p>Such education synergizes with the development of cloud solutions for hosting Spark (e.g., AWS EMR, GCP Dataproc, Databricks, Cloudera Altus Cloud) such that more people can now easily access a Spark environment. Over time, maybe we could even get AWS and GCP to create ad hoc managed Spark environments comparable to the SQL solutions of Athena and Big Query. Overall, I anticipate more and more professionals are going to have access to Spark environments when they want them.</p><p>I could even see data scientists transitioning to more complicated data engineering work when they need to build something to facilitate their data science work. Similarly, product managers may find themselves coding up complex business logic in Scala because it&#8217;s simply harder to write up the logic in English. If we teach these SQL-to-Scala converts how to modularize code and write tests, we may soon find ourselves with an army of situational engineers that can implement parts of systems important to their work.</p><p>What do you think? Do you believe Spark/DataFrames/Scala (SDS) can replace SQL for a growing number of non-engineers? Could it even help us all get more engineering work done, which all data companies are constantly looking to do? Let me know your thoughts in the comment section below because I&#8217;d like to collect feedback on this idea before investing too much time in helping SQL aficionados transition to SDS.</p><p>If you&#8217;re interested in collaborating on SQL-to-SDS tutorials and/or the transpiler, drop me a message at <a href="mailto:matthew.hagy@gmail.com">matthew.hagy@gmail.com</a>. Also, feel free to beat me to it! I&#8217;ll gladly help develop and promote however I can.</p><p><strong>Update</strong>: If you&#8217;ve found the Scala examples in this article interesting and would like to learn more about this powerful programming language you can check out my article, <a href="https://medium.com/@matthagy/quickly-learning-the-basics-of-scala-through-structure-and-interpretation-of-computer-programs-ed5bfa90e8dc">Quickly learning the basics of Scala through Structure and Interpretation of Computer Programs examples (Part 1)</a>.</p>]]></content:encoded></item></channel></rss>