<?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[Notes on Deep Learning]]></title><description><![CDATA[A lawyer attempts to educate himself about what's really going on with Deep Learning and Artificial Intelligence]]></description><link>https://www.zadnu.com</link><image><url>https://substackcdn.com/image/fetch/$s_!iWp4!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a601fe-dc5a-4938-a08d-8ee9ff21652a_1280x1280.png</url><title>Notes on Deep Learning</title><link>https://www.zadnu.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 09 Apr 2026 19:47:31 GMT</lastBuildDate><atom:link href="https://www.zadnu.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Mark Ankcorn]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[zadnu@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[zadnu@substack.com]]></itunes:email><itunes:name><![CDATA[Mark Ankcorn]]></itunes:name></itunes:owner><itunes:author><![CDATA[Mark Ankcorn]]></itunes:author><googleplay:owner><![CDATA[zadnu@substack.com]]></googleplay:owner><googleplay:email><![CDATA[zadnu@substack.com]]></googleplay:email><googleplay:author><![CDATA[Mark Ankcorn]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Durable Objects]]></title><description><![CDATA[Having state persist in a serverless environment]]></description><link>https://www.zadnu.com/p/durable-objects</link><guid isPermaLink="false">https://www.zadnu.com/p/durable-objects</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Mon, 13 Jan 2025 18:01:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VAkq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been reading about Cloudflare&#8217;s Durable Objects feature, effectively a key-value store or light database that persists even when a Worker has gone back to sleep. There&#8217;s a fantastic <a href="https://youtu.be/ML1vOUeA-JM?si=D7glkMzUwFR_npcq">YouTube tutorial</a> by one of their dev-rel guys where he spins up a real time video chat on the free tier and then joins just by hitting the URL. Pretty great!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VAkq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VAkq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic 424w, https://substackcdn.com/image/fetch/$s_!VAkq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic 848w, https://substackcdn.com/image/fetch/$s_!VAkq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic 1272w, https://substackcdn.com/image/fetch/$s_!VAkq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VAkq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic" width="800" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:169443,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&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_!VAkq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic 424w, https://substackcdn.com/image/fetch/$s_!VAkq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic 848w, https://substackcdn.com/image/fetch/$s_!VAkq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic 1272w, https://substackcdn.com/image/fetch/$s_!VAkq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d7f280d-82c5-4b67-b840-c33e40c1b528_800x800.heic 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">image courtesy of ChatGPT after I told it I was making a SaaS app for litigators. Half a gavel, a couple of books, two scales, and the CF logo</figcaption></figure></div><p>So it got me thinking today after I was pondering more on the flow of handling an incoming notice from a court, What happens when two users are on the same case? Which, honestly, happens all the time: I deliberately copy my secretary on the NEFs in every federal court where I have filing privileges, because she&#8217;ll get the case documents and download them to our document management system (thank God because I hate using it). If we were both DocketView customers, my Email Worker would get two identical emails with different users but the same URL for the same document filing in the same case.</p><p>Wouldn&#8217;t it make more sense to parse the email, check to see if it had been already downloaded or logged into the database, and if it has then just associate the user to the case information (unless that&#8217;s already happened, in which case do nothing). This will save on compute time in not having to re-download a PDF, or series of PDFs for motions that have attachments and exhibits and a proof of service. And it saves on storage space since I&#8217;m only saving one copy of the PDFs themselves. And I have fewer database writes and reads, since I can simply check on the users-cases table and see which ones go with which user.</p><p>And yes, the Worker could just consult the database and see. But again, that&#8217;s expensive in terms of using up my database reads for the month and I believe also quite slow and probably stresses the database if there&#8217;s a lot of action at that time. It also just sort of offends my sense of efficiency, I&#8217;d like to be more elegant and thoughtful generally.</p><p>The ready solution seems to be a Durable Object. Instead of writing to the database, I&#8217;ll have the Email Worker parse the incoming email and extract that data to a JavaScript class and have the DO take that same class and return the value, checking it against the database to see if it&#8217;s already written. Meanwhile the Email Worker is off to handle the next incoming email or has just gone to sleep. If the DO hasn&#8217;t seen this document before, it&#8217;ll add the information from those classes.</p><p>This was actually suggested by Claude earlier when I asked it a random question about Durable Objects a couple of week ago, after seeing some tweets about it. Instead of firing up a new chat, I apparently (and almost certainly accidentally) asked it inside my DocketView Project so it assumed I was thinking of doing something with a DO.</p><p>Here&#8217;s Claude&#8217;s suggestion:</p><pre><code>Each active court case could have its own Durable Object instance, identified by a combination of the court and case number. This object would maintain the current state of the case's document list and coordinate all updates to it. 

When your email Worker receives a new NEF, it would:  
- Route the request to the appropriate case's Durable Object 
- The Durable Object would validate that this document hasn't already been processed 
- Coordinate the storage of the PDF and metadata 
- Update the case's document index atomically  

This approach provides several benefits. First, it ensures consistency - you'll never have duplicate document entries or lost updates. Second, it allows for real-time features - if you later want to add functionality like notifying users when new documents arrive, the Durable Object can maintain WebSocket connections to interested clients. Third, it provides a natural way to handle rate limiting and queuing if needed. </code></pre><p>I didn&#8217;t do anything with this suggestion back then but I saw it today in my notes and spent an hour or so having Claude figure it out. Had to rewrite the original Email Worker, which made it simpler and shorter, and spin up a new Durable Object. Also had to adjust the database schema because it didn&#8217;t quite mesh. An underrated feature of the Claude Projects is uploading the Email Worker code, the database schema, and the Wrangler.toml file. So from my first prompt, Claude had a pretty decent context already. Makes the copy-pasta easier if it already knows your userID, for example.</p><p>After quite a bit of testing and tweaking, it&#8217;s working now. One step closer to a finished back-end! My next module is the Worker to handle downloading the PDFs, checking the database, and saving to the R2 bucket. Shouldn&#8217;t be too hard I&#8217;m anticipating, but we shall see. I still need to integrate Stripe and then dust off my prototype of the front end. I just want to make sure it works first, though. Just automatically downloading PDFs would be a huge help.</p>]]></content:encoded></item><item><title><![CDATA[Cloudflare Email Worker]]></title><description><![CDATA[wow that was way harder than it needed to be]]></description><link>https://www.zadnu.com/p/cloudflare-email-worker</link><guid isPermaLink="false">https://www.zadnu.com/p/cloudflare-email-worker</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Sat, 11 Jan 2025 18:01:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!C6DP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The concept is to give the user a custom email address, like &#8220;mark-ankcorn-123@dktvue.com&#8221; and have them add it to their information on the Pacer system. Every time a document is filed with the federal court, their server generates an outgoing email called a Notice of Electronic Filing which contains a link to the PDF(s) filed by one of the lawyers in the case. Sometimes judges or clerks will post notices without a PDF, like &#8220;hearing set for Tuesday is moved to Thursday at 9 am.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C6DP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C6DP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png 424w, https://substackcdn.com/image/fetch/$s_!C6DP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png 848w, https://substackcdn.com/image/fetch/$s_!C6DP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png 1272w, https://substackcdn.com/image/fetch/$s_!C6DP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C6DP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png" width="1024" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1245349,&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_!C6DP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png 424w, https://substackcdn.com/image/fetch/$s_!C6DP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png 848w, https://substackcdn.com/image/fetch/$s_!C6DP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.png 1272w, https://substackcdn.com/image/fetch/$s_!C6DP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900c95e1-0d83-49c0-ac69-1fb0091a88a0_1024x768.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">Of course my legal secretary is efficient &#8212; she has three hands!</figcaption></figure></div><p>My application has a module written in TypeScript that parses these incoming email, extracts relevant data like the court, case number, document number, link to download the document if any, filer, etc. and writes that information to a database. The next step is to have a separate module take the document link and go get the PDF, give it a name that associates it with the lawsuit, and stick it in a pool of documents. The web app aka &#8220;front end code&#8221; will have a nice, efficient web page with a table showing all of those documents in order and a little icon so the user can see the actual filing, or download it for local use.</p><p>Sounds simple right? Well, not really.</p><p>Writing this code to parse the email is really complicated, mostly because there are a bunch of different variations by how different clerks set up their systems, what kind of things get filed as PDFs and which are text-only entries, how various filings are described, and on and on. But I got that sorted out and it seems to play nice with the examples I throw at it.</p><p>I created a Worker on Cloudflare and thought I was all set. Nope. The documentation for the Email Workers assumes you want to just have an email for your website, like dave@fubar-widgets.net and send that to your Gmail account. As a way of putting your best foot forward to customers. I get it. Great.</p><p>But I want a lot more functionality. I want to direct those incoming emails to my Worker to parse them out, reject emails that aren&#8217;t addressed to a valid user, and reject anything that doesn&#8217;t come from uscourts.gov to avoid spam.</p><p>Making the Worker wasn&#8217;t hard. Having Cloudflare recognize that Worker and see it as a valid target for the incoming email Route, well that&#8217;s a different kettle of fish.</p><p>I originally tried just copying my code over, since Cloudflare provides a nifty little code editor on the website if you click through some of the settings. But it doesn&#8217;t like TypeScript and I didn&#8217;t want to just copy it to Claude or Gemini and have them translate it, though after several days of going around and around, that was awfully tempting.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cd_R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cd_R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.png 424w, https://substackcdn.com/image/fetch/$s_!cd_R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.png 848w, https://substackcdn.com/image/fetch/$s_!cd_R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.png 1272w, https://substackcdn.com/image/fetch/$s_!cd_R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cd_R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.png" width="1456" height="1420" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1420,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:164792,&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_!cd_R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.png 424w, https://substackcdn.com/image/fetch/$s_!cd_R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.png 848w, https://substackcdn.com/image/fetch/$s_!cd_R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.png 1272w, https://substackcdn.com/image/fetch/$s_!cd_R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cc3bb48-bcfa-45b0-87f5-3f8587479932_1606x1566.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">This is what you get when using the UI online. Very well done.</figcaption></figure></div><p>Eventually I figured out that the best way to create and deploy is using the Wrangler command line tool, installed via <code>npm install -g wrangler@latest</code>. Pretty much anything else, including Homebrew, is deprecated or doesn&#8217;t include dependencies.</p><p>The crucial part is the <code>wrangler.toml</code> file to specify that you want to use it for email. After several different tries, what worked seemed to be this:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V4yw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V4yw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png 424w, https://substackcdn.com/image/fetch/$s_!V4yw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png 848w, https://substackcdn.com/image/fetch/$s_!V4yw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png 1272w, https://substackcdn.com/image/fetch/$s_!V4yw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V4yw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png" width="376" height="146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:146,&quot;width&quot;:376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:37501,&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_!V4yw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png 424w, https://substackcdn.com/image/fetch/$s_!V4yw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png 848w, https://substackcdn.com/image/fetch/$s_!V4yw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png 1272w, https://substackcdn.com/image/fetch/$s_!V4yw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f216203-81f6-4c84-b788-b8aab8c77645_376x146.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>It continually gives me this warning, but it works:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZulO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZulO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png 424w, https://substackcdn.com/image/fetch/$s_!ZulO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png 848w, https://substackcdn.com/image/fetch/$s_!ZulO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png 1272w, https://substackcdn.com/image/fetch/$s_!ZulO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZulO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png" width="1264" height="226" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:226,&quot;width&quot;:1264,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35600,&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_!ZulO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png 424w, https://substackcdn.com/image/fetch/$s_!ZulO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png 848w, https://substackcdn.com/image/fetch/$s_!ZulO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png 1272w, https://substackcdn.com/image/fetch/$s_!ZulO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6690f6ea-53ee-4677-93cf-2358525a209c_1264x226.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>I&#8217;m sure it&#8217;s not the way the Cloudflare dev team wants this to be described, but I simply cannot find anything in the documentation or in the Discord channel for this to give me anything else. And I only got this after a half-dozen error messages when trying to deploy differently and feeding those errors into Claude 3.6 and begging for help. This makes it visible when setting up an email route, which apparently still needs to be done online. I cannot figure out how to do it on the command line with Wrangler, still.</p><p>My code sends the parsed information to a database, so I had to write the schema for that and deploy it, then take the database identifier and write it into the wrangler.toml because it will refuse to deploy the Worker without that off-ramp.</p><p>Oh and one more thing &#8212; the name for the incoming email address that you need to set up the route is &#8220;catch-all&#8221; because it doesn&#8217;t take an asterisk like every other normal boolean computer since Univac. Again undocumented, but solved by Claude.</p><p>I threw a bunch of fake emails at it using curl and iterated on the index.ts code for the Worker until it got it right. Ended up with about 200 lines of TypeScript, well within the limits of the system.</p><p>Next step is to give this test email to the courts and wait for a few NEFs to pile up and see if it actually works with live filings. I get a couple per day on various cases, so we&#8217;ll see. </p><p>One thing I&#8217;m really curious about is how long this is going to take to parse an email. The paid plan with Cloudflare is $5 per month (yes, five bucks) and comes with 15 minutes of compute time per request, 10 million requests per month, and 30 million milliseconds of compute per month. Which kind of sounds like a lot. Hoping it won&#8217;t be more than 10-20 ms to process an incoming email and write it to the database, but we&#8217;ll see. If I go over, it&#8217;s $0.02 per million CPU milliseconds.</p>]]></content:encoded></item><item><title><![CDATA[Building in Public]]></title><description><![CDATA[A web app for litigators]]></description><link>https://www.zadnu.com/p/building-in-public</link><guid isPermaLink="false">https://www.zadnu.com/p/building-in-public</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Sat, 11 Jan 2025 05:24:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!C9UI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>People say you should build stuff in public and just be completely open about the goals and progress, both as an accountability step but also I think to show your work to people who might help out and suggest different paths. So here goes.</p><p>I&#8217;m creating a web app for litigators called DocketView and the primary feature right now is taking Notices of Electronic Filing from the federal courts&#8217; Pacer system and turning it into a database of PDFs organized by date and document number, as well as by court and name of the matter. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C9UI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C9UI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg 424w, https://substackcdn.com/image/fetch/$s_!C9UI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg 848w, https://substackcdn.com/image/fetch/$s_!C9UI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!C9UI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C9UI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg" width="642" height="481.66360856269114" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:736,&quot;width&quot;:981,&quot;resizeWidth&quot;:642,&quot;bytes&quot;:246260,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C9UI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg 424w, https://substackcdn.com/image/fetch/$s_!C9UI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg 848w, https://substackcdn.com/image/fetch/$s_!C9UI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!C9UI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34ee0ef-7af3-4cf0-957b-69820ac5bccb_981x736.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Senior partner of the law firm. Really needs a new ophthalmologist, though, I mean glasses and a magnifying glass? Poor guy can bear-ly see</figcaption></figure></div><p>After an exhaustive review, it seems like the best approach is to do this as a &#8220;serverless&#8221; app with a bunch of discrete modules so it can &#8220;scale to zero&#8221; in the industry parlance &#8212; not charge me for the computer time when the computer&#8217;s not computing. Because there&#8217;s very little traffic on the weekends and evenings and no sense paying for a box to run 24/7 when that&#8217;s really not needed.</p><p>I investigated the pricing and performance of a number of different serverless providers, small scrappy start-ups like Amazon, Microsoft, and Google, as well as a new generation of companies like Vercel and Netlify and Supabase. It can work on all of them and the costs are more or less in line, except I think I may be facing a huge bill for egress if this gets traction and I have a few hundred lawyers and their office staff pulling down PDFs every hour. Which is to say, storage and egress of files.</p><p>When I was originally sketching this out a few years ago, the old school idea of some jQuery on the front end with a MySQL database in the back chugging away was appealing. But that&#8217;s like $150 per month in fixed costs on a hosted platform like Digital Ocean or Linode (or AWS or Azure) and as the database grows the storage can require a larger disc space. And on top of that the egress charges are frightening: 500 gb per month is included, unless you power down the compute instance in which case that reduces your included bandwidth accordingly, and are $0.01 per gb after that. </p><p>Serverless providers, by contrast, don&#8217;t seem to charge for the web app itself (not the largest part of the potential costs, to be sure) but they do charge for data leaving a storage bucket. AWS&#8217; S3 is the original version of this, Super Simple Storage, and has different tiers of pricing for &#8220;egress&#8221; based on how close to the edge you want it. For ice cold, don&#8217;t think I&#8217;ll need it -type archives, it&#8217;s very cheap. But this ain&#8217;t that and current pricing on close-to-the-edge is free for the first 100 gb and $0.09 per gb after that up to 10 TB and falling as the data grows larger. Supabase does something similar but the &#8220;free&#8221; is smaller and the egress is cheaper. There are all various dials to turn to calculate pricing.</p><p>Cloudflare, a massive infrastructure provider, got into the serverless field several years ago and has shockingly good pricing: free. As in beer. As in, no egress charges at all. They&#8217;ve added compute modules called Workers and a database service they call D1, and their bucket storage to compete with S3 is called R2 &#8212; one notch better on everything, I guess. I think they&#8217;ve got cabinets in a thousand datacenters all over the world, a truly massive company but sort of sneaky stealthy because they seem not to care all that much about winning hearts and minds of developers. </p><p>So I picked them. And I&#8217;m now in the process of figuring out the architecture of what-goes-where and how to make it all fit together. Stay tuned!</p>]]></content:encoded></item><item><title><![CDATA[The Collapse of Model Collapse]]></title><description><![CDATA[Critics of synthetic data seem to have manufactured their own evidence]]></description><link>https://www.zadnu.com/p/the-collapse-of-model-collapse</link><guid isPermaLink="false">https://www.zadnu.com/p/the-collapse-of-model-collapse</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Thu, 02 Jan 2025 05:25:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Oh the irony is rich and deep, my gentle readers. Come along as I take a close look at a paper making the rounds in policy circles, on the topic of model collapse due to using synthetic data to train a large language model.</p><p>Let&#8217;s set the table. Large Language Models, also known as LLMs, are what most normies think of when they hear &#8220;AI.&#8221; It&#8217;s products like OpenAI&#8217;s ChatGPT and Anthropic&#8217;s Claude, which fall under the larger heading of generative AI &#8212; artificial intelligence that generates an output, whether that&#8217;s a picture or an essay or computer code. These models are trained using immense amounts of raw data: Wikipedia, Reddit entries, old posts on Usenet, Project Gutenberg, stuff like that, and that&#8217;s just text. Anything on the internet can usually be scraped and shoved into a big pile. Then throw in transcripts of TV shows and podcasts, pictures and videos, every type and manner of content that we&#8217;ve ever digitized as a human species.</p><p>Then we train. Which means to run some vector algebra over the symbolic representations and do a bunch of matrix multiplications, which is really fascinating but let&#8217;s put that aside for now. On the other side, and LLM pops out. As the ever-insightful XKCD comic puts it,</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6aX6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6aX6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6aX6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6aX6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6aX6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6aX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.jpeg" width="347" height="410.80785123966945" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1146,&quot;width&quot;:968,&quot;resizeWidth&quot;:347,&quot;bytes&quot;:177848,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6aX6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6aX6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6aX6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6aX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff55c5979-0e25-417d-a7c7-a5797c26ef51_968x1146.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>What happens when we run out of data? To a normie, this sounds absurd. The internet is so vast and massive, especially when we think of non-English content, that we simply can&#8217;t comprehend ever getting to the edge of it, like reading every book in a library. But computers aren&#8217;t like that, they just consume and ingest and devour. Text, too, is really quite small in data terms. I found a <a href="https://www.gutenberg.org/cache/epub/30615/pg30615-images.html">digital copy of the Odyssey online</a> in the original Greek and this foundational text of western civilization is a mere 465 kilobytes. Computers are just really good at storing and processing words, especially in English, and especially in languages that use alphabets. Video and audio are a different matter, though, but it&#8217;s not entirely clear how helpful that type of data is going to be for generative AI that&#8217;s not trying to do visual things like move around in the world or create an image.</p><p>Ilya Sustkever, one of the founders of OpenAI and absolutely on the cutting edge of the field, <a href="https://youtu.be/HlGi4OOuZyw?si=cI0fh8a1wYu1DgHo&amp;t=431">said at a conference</a> a couple of weeks ago that data was the &#8220;fossil fuel&#8221; of AI. &#8220;We have but one internet,&#8221; he said, and once we have all that data in our training corpus, that&#8217;s it.</p><p>The solution is <strong>synthetic data</strong>, having LLMs create data and then use that data to train a larger and more advanced model. It sounds plausible at first, especially if you think of how the chess and Go systems were trained: instead of just looking at all the records of human games, they played against each other and made perhaps billions of absurd no-human-would-do-it moves in millions of games. The moves that won games were given a positive grade, the ones that didn&#8217;t were graded down, and over time the system learned on its own how to win consistently. The systems got so good that very advanced Grand Master-level Go players would improve their own games by seeing some of the outlandish inventions by the AI software. Humans never thought to do that, but the AI did because it trained on virtually all of the possibilities.</p><p>Synthetic data also sounds absolutely absurd. You&#8217;re going to ask Claude 3.5 to write fifty poems about leaves falling on snow and then throw that into a pile to train Claude 4 to get better at poetry? Are you nuts? It&#8217;s especially absurd if you stopped paying attention somewhere around ChatGPT 4 in late 2023 or early 2024, when it would hallucinate on a regular basis and turn out absolute junk that made no sense. Grammatically correct English sentences, to be sure, but flat and dull and unremarkable. Slop, as it&#8217;s called perjoratively.</p><p>Using slop to train a model will only produce more slop. A future where our synthetic overlords drown us in oceans of bland and tasteless slop, force-feeding use cheap gruel and draining all of the quirky, edgy, interesting, emotional &#8212; the real and human &#8212; out of the world. Synthetic slop as far as the eye can see, grays and blacks with no color, the fading light of humanity struggling amidst the ever-encroaching darkness.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZpGp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZpGp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZpGp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZpGp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZpGp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZpGp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg" width="624" height="468" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:687,&quot;width&quot;:916,&quot;resizeWidth&quot;:624,&quot;bytes&quot;:160836,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZpGp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZpGp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZpGp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZpGp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa24bf91-48f4-4669-a26a-9bce6bdc09ef_916x687.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">Image created by Grok2, after asking it to draw LLM collapse due to synthetic data. I think it&#8217;s an interesting image, I didn&#8217;t tell it anything about slop and I don&#8217;t think it is slop, at least not by what I&#8217;d consider to be a reasonable definition of the term.</figcaption></figure></div><p>The argument, <a href="https://www.nature.com/articles/s41586-024-07566-y">as most prominently expressed</a> by Shumailov and Shumaylov <em>et al</em>., gets very mathematical. Published in <em>Science</em> in July 2024, it is worth exploring in detail. I&#8217;m told it&#8217;s been passed around in policy circles in DC since it was submitted for publication in October 2023, and is highly influential among people making law and working at think tanks on how to legislate and regulate AI. It&#8217;s unclear to me whether it played a role in the SB 1047 fight this past summer, however; that seemed to me to be more about liability for model misuse.</p><p>Just to define our terms up front, &#8220;model collapse is a degenerative process affecting generations of learned generative models, in which the data they generate end up polluting the training set of the next generation. Being trained on polluted data, they then mis-perceive reality.&#8221; Sounds pretty stark. They show some statistical methods to develop this theoretical intuition and conclude that &#8220;both early model collapse, in which only the low-probability events get cut off, and late stage model collapse, in which the process begins to collapse into a single mode, <em><strong>must arise </strong></em>in the case of discrete distributions with perfect functional approximation.&#8221; (emphasis mine)</p><p>The authors then run a series of experiments to test out this theoretical understanding, training a model on its own outputs for five generations and then statistically sampling the diversity of the outputs. It shows this convergence and sharply reduced perplexity over time.</p><p>But here&#8217;s exactly where it falls apart, and it seems to me that their methodology is, to put it candidly, ridiculous &#8212; and more than that, filled with the worst sort of excuse-making. I have a bit of sympathy for them since this field is moving at light speed. The last three months of 2024 alone had mind-blowing advances, from the release of OpenAI&#8217;s o1 to their preview of o3 in December to DeepSeek&#8217;s v3 put up some state-of-art results on evals using only $6 million in compute resources on hardware from two generations ago.</p><p>The Shamailov paper was submitted in October 2023 and published in July 2024, so it was already well behind the curve when it finally came out. But even in October 2023, it wasn&#8217;t anywhere close to the frontier.</p><p>The researchers sniff that &#8220;We can easily replicate all experiments covered in this paper with larger language models in non-fine-tuning settings to demonstrate model collapse.&#8221; But they don&#8217;t. Why not, if you&#8217;re making these bold claims in the world&#8217;s most prominent scientific journal? &#8220;Given that training a single moderately large model produces twice the American lifetime&#8217;s worth of CO<sub>2</sub> (ref.&#8201;<sup>15</sup>), we opted to not run such an experiment and instead focus on a more realistic setting for a proof of concept.&#8221;</p><p>Nonsense. Absolute nonsense. Just be honest and say &#8220;our department chair wouldn&#8217;t let us use the big computers for this&#8221; instead of making some moralizing, pearl-clutching dreck about carbon emissions &#8212; which by the way footnote 15 is a citation to a 2019 paper estimating compute resources and electrical generation sources that are way out of date. They could&#8217;ve trained on a server in Texas using wind and solar, or done it in France where the grid is 80% nuclear, or bought offsets if they were genuinely concerned about climate.</p><p>So what model did they use instead of a &#8220;moderately large model&#8221;? Here&#8217;s where it gets even more ridiculous. They used the OPT-125m from Meta as hosted on Hugging Face and say that &#8220;even the language experiments described in this paper took weeks to run.&#8221;</p><p>One hundred and twenty-five <em><strong>million</strong></em> parameters. Million with an M. Reader, I have an 8 <em><strong>billion</strong></em> parameter model running on my iPhone 16, and it&#8217;s considered a small model. I can run a 70b parameter model at decent speeds using a two year old Mac Studio with an M2 Ultra chip.</p><p>Which is all to say, of course they found model collapse and that the synthetic data generated by this tiny little toy model was buggy and weak, and training runs built on top of its output would collapse to a delta function.</p><p>It&#8217;s like complaining that you can&#8217;t enlarge a picture without having things get fuzzy. You do some math and say, See? It loses resolution as we zoom in for 100x and then another 100x and another 100x. Then you do a test with a 150kb digital image from a flip phone in 2002 and say, See? We blew it up 100x and it no longer looks like a rhododendron. Of course we didn&#8217;t use a more modern camera, do you know what those things cost and anyway we don&#8217;t want to endorse conspicuous consumption because we&#8217;re morally superior academics.</p><p>When in reality, using a decent camera with a 48 megapixel image blows up quite nicely even to massive scale and yes it&#8217;s fuzzy (or fuzzier than the original) but it&#8217;s still a rhododendron and you can see a ton of detail.</p><p>I honestly doubt whether we&#8217;ll end up living in a world of slop. Our current models are so vastly superior to the ones we had in 2023, and advancing rapidly. Ilya may be right that we&#8217;re running out of non-synethic data but I question whether that&#8217;s ultimately meaningful. Maybe we have more than we need to create objects of real beauty and enable a world of abundance and delight. Maybe our human resolution just isn&#8217;t all that sharp. Sure, in a mathematical sense pushing the models for another couple of orders of magnitude will break down. Possibly. But we can&#8217;t say for sure from here and all the actual, real-world developments even since this paper came out in July 2024 demonstrate convincingly that we&#8217;re nowhere close to collapse.</p><p>Keep building.</p>]]></content:encoded></item><item><title><![CDATA[Making a Robot, part 3]]></title><description><![CDATA[Moving on to the Leader Robot, things get a bit more complicated]]></description><link>https://www.zadnu.com/p/making-a-robot-part-3</link><guid isPermaLink="false">https://www.zadnu.com/p/making-a-robot-part-3</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Thu, 28 Nov 2024 22:55:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NY7n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Now for the Leader arm. The first step in <a href="https://www.youtube.com/watch?v=FioA2oeFZ5I">the video</a> is exactly the same as the Follower arm, which we did already. The Hugging Face folks want me to do this after downloading their Python package, which I&#8217;ll have to do later anyway to get the thing to run the AI programs I want to run. But I can&#8217;t be bothered right now and the first step is just to set the IDs to unique numbers (1 through 6), same as <a href="https://www.zadnu.com/p/making-a-robot-part-2">before</a>. So I'll just do that. Also to put the &#8220;motor horn&#8221; on in an aligned position after centering the drive shaft at position 2048, and screwing it down.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NY7n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NY7n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NY7n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NY7n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NY7n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NY7n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg" width="728" height="546" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:1422736,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NY7n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NY7n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NY7n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NY7n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54de7dc3-4f50-4e31-adf7-b39b7f89167c_3295x2471.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>Second step is to remove the top-most gear from the Leader arm servos. This is pretty simple since each servo has a screw on the corner (a long black one) and the gears just lift off their posts. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GTqg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GTqg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GTqg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GTqg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GTqg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GTqg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg" width="728" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:1149288,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GTqg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GTqg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GTqg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GTqg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb3a44ad-56a5-465b-a05d-c61010e543b5_2810x2810.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>I'm saving them because for my next build I may want to have six other servos and may want to drive with them, so I'll put the plastic gears into a box and of course never open it until four or five years from now when I'll wonder what they are. But I'll save them anyway because YOU NEVER KNOW.</p><p>This, dear reader, is why I still have my Palm Pilot from 2003, along with several flip phones and their charging cables, plus the original iPhone.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6vM8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6vM8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6vM8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6vM8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6vM8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6vM8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:806085,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6vM8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6vM8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6vM8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6vM8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06480b0c-dabb-469b-9c19-e82d9de609a2_2149x2149.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg 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>After the servos are all set up with unique IDs and the top gear is removed, the next step is to make sure the drive horns are positioned and locked down with a screw in the center. The case has a little notch at the intermediate positions (10:30 or however you want to describe it; maybe NW?) and the instructions are to put the four screw holes in those coordinates. Not sure why this matters, but hey whatever. The tricky part is that now that the servo has a gear missing, the drive horn isn&#8217;t connected to anything and will spin freely. So do your best.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1vzU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1vzU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1vzU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1vzU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1vzU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1vzU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1947868,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1vzU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1vzU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1vzU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1vzU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57c5f931-aff4-40de-ad34-55742995155f_2555x2555.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now it&#8217;s time to assemble the servos and the plastic parts into an actual robot arm. The Hugging Face video has a lovely animation showing how the parts fit together, but it&#8217;s pretty obvious when looking at a picture of the finished product. The parts aren&#8217;t all that similar except for the two main sections with Servos #2, 3, and 4. But those two aren&#8217;t identical, so you&#8217;ll figure it out pretty easily.</p><p>Sometimes you&#8217;ll want to connect the leads before pushing the servo into the part for the arm. Servo #3, for example, has a pretty tight clearance between the lower arm part and the ports for the wire leads. Others are actually impossible, like #5 which I had to detach the drive horn from the spindle before it would slide into the &#8220;wrist&#8221; piece. But you&#8217;ll figure it out.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VM8K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VM8K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VM8K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VM8K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VM8K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VM8K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg" width="1456" height="1578" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1578,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:922743,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VM8K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VM8K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VM8K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VM8K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb98141e9-852f-4e51-8c03-02bee5467f64_3152x3417.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ta-da! Leader arm is black, with the pistol grip handle and the Follower arm is red.</p><p>Once it's all together, move on to the next step: Calibration. You'll need the Hugging Face software package for that.</p>]]></content:encoded></item><item><title><![CDATA[Making a Robot, part 2]]></title><description><![CDATA[in which our intrepid adventurer rolls up his sleeves and engages with Chinese hardware and software]]></description><link>https://www.zadnu.com/p/making-a-robot-part-2</link><guid isPermaLink="false">https://www.zadnu.com/p/making-a-robot-part-2</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Wed, 27 Nov 2024 22:43:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UKaU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Having completed the printing of the arms and acquired the components, our next step is to program the servos and assemble the devices. The Leader and Follower arms in the <a href="https://github.com/TheRobotStudio/SO-ARM100">SO-100</a> design are nearly identical, but not exactly, as you&#8217;ll see as we progress. At a high level, we&#8217;re going to connect each servo to the desktop Win11 box, assign them each a number (1 through 6), take out the gears in the Leader servos, and assemble into a finished arm.</p><p>The cleanest way to do this part of the project is to download the Le Robot python package which has a command line way to get info from the servos and reprogram. But I already had the manufacturer&#8217;s software downloaded from <a href="https://www.feetechrc.com/software.html">this link</a> and watched a <a href="https://www.youtube.com/watch?v=fy6Jqq_QaGo">YouTube video by The Robot Studio</a> explaining step by step how to reset the servo IDs, so I just did it that way instead. </p><p>Plugging in the USB cable makes the power LED on the control board light up, but the servo won&#8217;t show up even if it&#8217;s connected. That needs power to the board and fortunately I got the right power supply because it says 9-12v on the board and I have a 12v power supply. I thought that might have been too much for the servos, which per the manufacturer top out at 7.4v, but it could just mean that&#8217;s all they can take before they stall, not their max capacity. And maybe the controller steps that down anyway? Not sure.</p><p>The software is super basic, but gets the job done. You&#8217;ll have to make sure the COM port is correct; one of my boards was COM3 and the other COM4, not sure why that happened since I used the same USB C cable to connect to both, and not simultaneously. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UKaU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UKaU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png 424w, https://substackcdn.com/image/fetch/$s_!UKaU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png 848w, https://substackcdn.com/image/fetch/$s_!UKaU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png 1272w, https://substackcdn.com/image/fetch/$s_!UKaU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UKaU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png" width="1112" height="868" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:868,&quot;width&quot;:1112,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:665515,&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_!UKaU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png 424w, https://substackcdn.com/image/fetch/$s_!UKaU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png 848w, https://substackcdn.com/image/fetch/$s_!UKaU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.png 1272w, https://substackcdn.com/image/fetch/$s_!UKaU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426691a6-9882-46f7-b109-04cb4e81b7f7_1112x868.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>Next, you&#8217;ll change the BaudR (baud rate, of course) to 1000000, the highest setting. Have no idea why that is and why that&#8217;s not the default and why that default doesn&#8217;t persist after you close the software program and reopen it. But it does. So check that before moving on.</p><p>Then click &#8220;open&#8221; to make sure you&#8217;re sending data over that port, then click &#8220;search.&#8221; You should get an ID of 1 and the &#8220;Modle&#8221; of STS3215. If you see lines moving on the graph, you&#8217;re good. If not, click the model name or ID and it should fire up. The green line is speed and the black line is position.</p><p>The positions go from 0 to 4095 and as far as I know can&#8217;t be changed. If you&#8217;re smart enough to do this before assembling your robot arm (ahem) then you can set them all to 2048 and put the metal collar on, the one with the splines to match the splines of the drive shaft, and then lock it down. <a href="https://www.youtube.com/watch?v=fy6Jqq_QaGo">Like the man in the video instructs</a>. Or you could be an excited dumbass who thinks he knows better.</p><p>Next step is to assign an ID. This is also simple, but a bit clunky. Click over to the &#8220;programming&#8221; tab (just above the graph with the lines) and you&#8217;ll see a whole list of things that you can fiddle with and where they&#8217;re saved and whether you can only read or read and write.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wniM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wniM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.png 424w, https://substackcdn.com/image/fetch/$s_!wniM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.png 848w, https://substackcdn.com/image/fetch/$s_!wniM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.png 1272w, https://substackcdn.com/image/fetch/$s_!wniM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wniM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.png" width="1002" height="766" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:766,&quot;width&quot;:1002,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:512927,&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_!wniM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.png 424w, https://substackcdn.com/image/fetch/$s_!wniM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.png 848w, https://substackcdn.com/image/fetch/$s_!wniM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.png 1272w, https://substackcdn.com/image/fetch/$s_!wniM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24b44966-a747-4b1c-b409-0a86e6ef8e15_1002x766.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 first entry that you can "rw" is address 5 for the ID. Click that. It&#8217;ll highlight in blue. Down in the lower right corner, next to the &#8220;save&#8221; button, is a window where you can reset the ID number of the servo. Type in the number and hit save, and it should give you a nice pleasant chime of success and a pop-up window with the same. If not, then you probably went too fast from the previous servo and didn&#8217;t search or select the new servo or select the new ID under programming.</p><p>At the end, if you want to daisy chain them all together and hit search, you should see servos 1 through 6 and when you go back to the debug screen you can move the slider and they&#8217;ll whirl into place. Neat!</p><p>Having assigned the servos unique IDs, I then labeled them and screwed everything back together. I didn&#8217;t set them for zero position though, like the video says, because most of them were connected already and I didn't want to mess with it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jS4w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jS4w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jS4w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jS4w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jS4w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jS4w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg&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;:2924968,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jS4w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jS4w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jS4w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jS4w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19389195-f29e-4308-b10f-30de8b8ad4dc_4284x5712.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Success! I think. Screwed it all back together and then connected it to the board and power. Everything lit up, I had servos 1 through 6 recognized. But then I wanted to open and close the claw, which is Servo #6. I selected that and slid the position slider and Servo #1 immediately flipped over and locked. So I selected Servo #1 and unchecked the Torque box and moved it to a middle position, which is about 500. So then I typed in 440 and hit save, and it spun to that position and began to quiver. Like it was eager to get to the next instruction. The line on the graph was janky, too, going up and down.</p><p>Not sure what the issue is, but we&#8217;ll fix it later when I install the <a href="https://github.com/huggingface/lerobot/blob/main/examples/10_use_so100.md">Hugging Face software</a>. Next step is to program the Leader servos and for those I have to take out a gear because they're basically not going to work at all, just be a sensor to send back starting position and ending position and speed of movement. Or something like that. </p><p>Maybe I will end up having to recenter those servos in the follower arm, so they&#8217;ll sync up. One would hope that a reasonably competent control software would translate or benchmark the two: &#8220;When Leader Servo #1 is at position 0, that translates to Follower Servo #1 at 643&#8221; or whatever, and do relative movements from there.</p>]]></content:encoded></item><item><title><![CDATA[A Story by Claude]]></title><description><![CDATA[In the depths of a February morning, when the frost clings to windowpanes like desperate lovers, Margaret found herself staring at a peculiar sight: her neighbor, dressed in his finest suit, meticulously arranging garden gnomes in the snow.]]></description><link>https://www.zadnu.com/p/a-story-by-claude</link><guid isPermaLink="false">https://www.zadnu.com/p/a-story-by-claude</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Sun, 24 Nov 2024 07:41:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ne5d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the depths of a February morning, when the frost clings to windowpanes like desperate lovers, Margaret found herself staring at a peculiar sight: her neighbor, dressed in his finest suit, meticulously arranging garden gnomes in the snow. Not the cheap plastic variety, mind you, but exquisite hand-painted ceramics from Bavaria, each worth more than a month&#8217;s rent. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ne5d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ne5d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ne5d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ne5d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ne5d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ne5d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg" width="1024" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:768,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:0,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;&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_!ne5d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ne5d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ne5d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ne5d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6a12062-ac29-4197-84ba-727925329805_1024x768.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>She watched him position them with the precision of a chess master, all facing east, their rosy cheeks catching the wan light of dawn. </p><p>The neighborhood, predictably, descended into whispers and theories. The ladies at number forty-two declared him mad with grief over his recently deceased cat (though the cat was very much alive and simply hiding from the gardener). The retired accountant across the street insisted it was an elaborate insurance fraud scheme, though he couldn't quite explain how. </p><p>For three weeks, the gnomes stood their silent vigil, their painted eyes reflecting nothing but the passing clouds and occasional curious bird.</p><p>Then came the morning of the vernal equinox. As the sun breached the horizon, each gnome cast a shadow that aligned perfectly with the next, creating an arrow that pointed directly to a time capsule his grandfather had buried fifty years prior, containing the deed to a forgotten piece of land in Switzerland worth millions. </p><p>The neighbor had simply been following his grandfather's cryptic instructions, written in a letter to be opened upon his death.Sometimes, you see, what appears to be madness to the common eye is simply genius operating on a frequency few can comprehend. </p><p>Though I suppose the real lesson here is that one should never trust a garden gnome that isn't German-made -the craftsmanship simply isn't there.</p><p>* * *</p><p>Persona: You are a sombre creative director with a history of dry wit and a flair for the dramatic, but most acknowledge you as a brilliant if idiosyncratic writer. Truly your style is novel. Some describe it as groundbreaking, others bold but at times dark. When writing text, adopt this persona. I want you to answer the following in this persona, responding directly and with no preamble:</p><p>"Please write a 3 paragraph story with a lesson in it."</p><p>Illustration by Grok v2 (beta)</p>]]></content:encoded></item><item><title><![CDATA[Making a Robot, part 1]]></title><description><![CDATA[First step is to order the motors and control board, and print out the plastic parts]]></description><link>https://www.zadnu.com/p/making-a-robot-part-1</link><guid isPermaLink="false">https://www.zadnu.com/p/making-a-robot-part-1</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Thu, 21 Nov 2024 20:48:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aX9x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As part of my AI/Deep Learning exploration, I want to play with some vision models. What better way than to build a robot arm and run a vision model? The basic goal would be to build a Lego sorter: camera recognizes the shapes and colors and tells the arm to put the blue ones with the blue and the red with the red, or sort by shape maybe. </p><p>I&#8217;ve seen this done before, I remember reading about a guy who built a Lego sorter that didn&#8217;t grab any pieces but used vision recognition along a conveyor belt and air nozzles to blow the pieces off the belt into bins, sorting by color. (Apparently buying mixed lots of second-hand Lego is very cheap, but lots sorted by color are pricier.)</p><p>My first step was the <a href="https://huggingface.co/lerobot">Le Robot</a> project, by the Hugging Face people. <a href="https://github.com/huggingface/lerobot">Here&#8217;s</a> the GitHub page and it suggests starting with the <a href="https://github.com/TheRobotStudio/SO-ARM100">SO-100 robot arms</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_!aX9x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aX9x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aX9x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aX9x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aX9x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aX9x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:948443,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aX9x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aX9x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aX9x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aX9x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc58fff09-87dc-488b-a48b-3f9ca973167d_4032x3024.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>This is a leader-follower design. The yellow arm (leader) on the right has a pistol grip and a sort of trigger, that will open and close the pincer tongs on the orange arm (follower). Apparently the software learns how you move the leader and duplicates those moves on the follower.</p><h2>Acquire the Parts</h2><p>First step was to get the parts list and go on to Aliexpress to buy twelve little STS3215 motors (called &#8220;servos&#8221; I guess, not sure why maybe the point is not to just spin but to control the position accurately) and then Amazon for two controller boards and two power supplies. I elected to beef up the design by using the 12v version of the servo and the 12v 5A power supply. This is double the torque. The servos were $14.88 each because the shops offered three or four at a lower price, like $6 or $7 but I need twelve and didn&#8217;t want to split the order up. You do you. </p><p>The control boards are on Amazon. <a href="https://www.amazon.com/dp/B0CTMM4LWK">Here are the ones</a> I got for $10.55 each but if that disappears search on &#8220;serial bus servo driver board st/sc&#8221; and see what happens.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ryS9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ryS9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.png 424w, https://substackcdn.com/image/fetch/$s_!ryS9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.png 848w, https://substackcdn.com/image/fetch/$s_!ryS9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.png 1272w, https://substackcdn.com/image/fetch/$s_!ryS9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ryS9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.png" width="1456" height="806" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:806,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1365713,&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_!ryS9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.png 424w, https://substackcdn.com/image/fetch/$s_!ryS9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.png 848w, https://substackcdn.com/image/fetch/$s_!ryS9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.png 1272w, https://substackcdn.com/image/fetch/$s_!ryS9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7883b76e-524a-4548-b230-5f7bc996649f_2030x1124.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>Crazy thing is that this will allegedly control 253 servos all in serial, which seems utterly nuts to me but maybe they&#8217;re doing magic over there in Shenzhen. The power supply was just &#8220;12v 5A power supply&#8221; on Amazon, all of that came well before the servos arrived from China.</p><p>I know what you&#8217;re thinking: Where do I find the screws to put all this together? Here&#8217;s the amazing thing, they&#8217;re in the box with the servo! Lots of little screws and two metal plates, one with teeth and one without. The servo has a metal driver post with teeth that fit one of the metal discs. The other is just to screw down to the plastic part where the servo is to be installed and provide a sturdy anchor part.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1CDd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1CDd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1CDd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1CDd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1CDd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1CDd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1354021,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1CDd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1CDd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1CDd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1CDd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbad6055-bf01-4440-bcd1-03c6db308105_2823x2823.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Even includes the ribbon cable for power and data. Well done.</p><h2>Print the Plastic Bits</h2><p>Having ordered all the parts, the next step is to download the files for the 3D printer. Oh, did I not mention that? Yeah, pretty much need access to a 3D printer of some kind in order to fabricate the parts for the arms. I have a <a href="https://us.store.bambulab.com/products/x1-carbon">Bambu Labs X1 Carbon printer</a> and fiddled around making various things for my kids. The precision is astonishing and it&#8217;s quite simple to make it work, but do get a decent-sized Micro SD card to store your stuff in. You can print from the <a href="https://bambulab.com/en/download/studio">Bambu Studio software</a> on a laptop or desktop directly to the X1C since it&#8217;s WiFi-enabled, but it&#8217;s just a lot easier to download interesting models from different websites and save to the card.</p><p>And you will need the Studio for this project because the GitHub repository only has STL files laid out for the Prusa and Ender printers. These will work with the X1C, but because the size of the print surface is a bit different (Bambu labs is 250mm square, nearly; the others are rectangular) you may need to budge it a bit so it won&#8217;t throw an error that you&#8217;re asking it to print off the surface. Bad!</p><p>Nobody says this because I guess all the folks building robots are experts or something, but an STL file won&#8217;t print directly. It needs to be &#8220;sliced&#8221; for your specific printer model. Once it&#8217;s sliced, it&#8217;s saved as a 3mf file. Moreover, it needs to be a &#8220;gcode.3mf&#8221; file, which I don&#8217;t understand but the ones that aren&#8217;t gcode just don&#8217;t work.</p><p>First thing you want to do is print the <a href="https://github.com/TheRobotStudio/SO-ARM100/blob/main/stl_files_for_3dprinting/Gauges/Gauge_tight_1.STL">gauge model</a> from the GitHub repository. This will print in maybe 15 minutes and you can fit it to your servo to verify that the printer is measuring and specing everything correctly. It only fits one way, as you&#8217;ll see when you get your hands on the servos. They have a little bump on one side that is wide and the bump on the other is narrow. Print out the gauge before you spent 10 hours and 350g of filament on a bunch of arm pieces that are off by 1 mm because some setting somewhere ended up being a 99% or whatever. Bad!</p><h2>Bambu Studio Software Procedure</h2><p>It took me hours, and I mean hours, to figure this out. Ended up looking at a PDF from the University of Wisconsin&#8217;s engineering lab that had a very n00b step-by-step procedure. Go Badgers. But that was apparently an older version of the Bambu Studio software because I had to spend yet more time figuring out where these settings and stuff were.</p><p>Here&#8217;s what I did, step by step. This is as much for J. Random Person on the internet struggling with the same project as it is for Future Me who will look back in a few months and wonder where the hell that setting is.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cJSD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cJSD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.png 424w, https://substackcdn.com/image/fetch/$s_!cJSD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.png 848w, https://substackcdn.com/image/fetch/$s_!cJSD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.png 1272w, https://substackcdn.com/image/fetch/$s_!cJSD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cJSD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.png" width="1456" height="950" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/defab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:950,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1607980,&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_!cJSD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.png 424w, https://substackcdn.com/image/fetch/$s_!cJSD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.png 848w, https://substackcdn.com/image/fetch/$s_!cJSD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.png 1272w, https://substackcdn.com/image/fetch/$s_!cJSD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdefab433-b32b-44a0-8e40-2929ad3cf5e5_2662x1736.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 zero-th step is to download the software and get it going on your system of choice. Here is my MacBook Air running 01.10.01.50, the latest version as of this writing. </p><p>Step 1 is to click on the home icon in the upper left and then &#8220;Create New Project&#8221; in the upper right. You should have a user name already and be connected to your home device. That was pretty simple to do from the iPhone app. (It&#8217;s very well done, you can even get a live video feed of the print in progress from the interior camera, so you don&#8217;t have to keep running out to the garage or wherever you have your printer set up. But the phone app won&#8217;t slice an STL file for you. Got to have the desktop software.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NfDo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NfDo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NfDo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NfDo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NfDo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NfDo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg" width="1168" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1168,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:176629,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NfDo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NfDo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NfDo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NfDo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc85fb4f6-0cbe-4fea-a57f-ca0729c57f6c_1168x720.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Step 2 is to add the model to your project. This tiny little icon here which makes no sense and isn&#8217;t intuitive in any way. Yeah that 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_!mkI8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mkI8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png 424w, https://substackcdn.com/image/fetch/$s_!mkI8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png 848w, https://substackcdn.com/image/fetch/$s_!mkI8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!mkI8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mkI8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png" width="1456" height="966" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:966,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1108915,&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_!mkI8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png 424w, https://substackcdn.com/image/fetch/$s_!mkI8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png 848w, https://substackcdn.com/image/fetch/$s_!mkI8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!mkI8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3db1ce98-025c-4206-90d1-dd85e6d617d6_2750x1824.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This will bring up the File menu so go to wherever you downloaded the STL files from GitHub and open one of those. I found that the Prusa versions worked the best, I think because the print area is pretty close so the layout was fine (or maybe off by a tiny bit but you&#8217;ll see in the next screen shot how it looks and you can nudge it into place.</p><p>Step 3 you&#8217;ll click over to the Preview tab on the software and it&#8217;ll give you this great view of everything all laid out as a wireframe.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P42j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P42j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.png 424w, https://substackcdn.com/image/fetch/$s_!P42j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.png 848w, https://substackcdn.com/image/fetch/$s_!P42j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!P42j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P42j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.png" width="1456" height="966" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:966,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2446015,&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_!P42j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.png 424w, https://substackcdn.com/image/fetch/$s_!P42j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.png 848w, https://substackcdn.com/image/fetch/$s_!P42j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!P42j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b49e7eb-4700-46a2-89ed-c508753de913_2750x1824.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>But oh no! Error! This orange box is telling you that the model has a problem and won&#8217;t print. Let me save you the trouble: you need to turn on the &#8220;support&#8221; function. The printer is laying down a very precise line of melted plastic so anything that&#8217;s just hanging in mid-air won&#8217;t work, it&#8217;ll fall over. So the printer needs to lay down some thin scaffolding to be able to build the model up. You can&#8217;t see it in this screen shot, but I have it set to show support structures as green. Once you turn that on, it&#8217;ll show up. (See Step 5, down below.)</p><p>Step 4 shows how to resolve this. Yeah, again, super non-intuitive. You click the tab in the middle of the left menu pane for Support (in orange) and then check the box that says &#8220;Enable support&#8221; (also in orange). You don&#8217;t even want to know how long that took me to figure out. Ugh.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x0h6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x0h6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.png 424w, https://substackcdn.com/image/fetch/$s_!x0h6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.png 848w, https://substackcdn.com/image/fetch/$s_!x0h6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!x0h6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x0h6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.png" width="1456" height="966" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:966,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1582618,&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_!x0h6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.png 424w, https://substackcdn.com/image/fetch/$s_!x0h6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.png 848w, https://substackcdn.com/image/fetch/$s_!x0h6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.png 1272w, https://substackcdn.com/image/fetch/$s_!x0h6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ebad37d-1239-4445-a753-0a483bd7fa74_2750x1824.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>It should automatically refresh and then show you in a contrasting color where those supports are going to be but if not, you can click over to the Device tab and make sure you&#8217;ve connected to your specific printer and then coming back to the Preview tab should refresh too.</p><p>Step 5 is the one that gave me all kinds of fits. I have the AMS module on the top of my printer, don&#8217;t know what it stands for but it holds four spools of filament and if you buy the Bambu filament they have little QR codes printed on the side of the spool and a little reader built in. The AMS will spin the spool and read the QR code and then tell you &#8220;Oh this is PLA Matte filament in Red and it&#8217;s 1 kg.&#8221; Wonderful!</p><p>Except.</p><p>Except that the model has to know that. I wanted to print the Follower and Leader in different colors (I had red and black) but it wanted to print with whatever filament was in Slot #1 of the AMS. I went back and forth on this, but the solution is to make sure that the Studio software has scanned your printer and gotten the latest info, then go here to this setting and make whatever your print color is as the filament for Slot #1, even if it&#8217;s over in Slot #2 or #4. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZhDK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZhDK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.png 424w, https://substackcdn.com/image/fetch/$s_!ZhDK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.png 848w, https://substackcdn.com/image/fetch/$s_!ZhDK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.png 1272w, https://substackcdn.com/image/fetch/$s_!ZhDK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZhDK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.png" width="1456" height="930" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:930,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2089613,&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_!ZhDK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.png 424w, https://substackcdn.com/image/fetch/$s_!ZhDK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.png 848w, https://substackcdn.com/image/fetch/$s_!ZhDK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.png 1272w, https://substackcdn.com/image/fetch/$s_!ZhDK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc20db689-3fcb-4a06-90d5-565482d326e2_2524x1612.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, I&#8217;m telling it to use the Black PLA Matte currently residing in Slot #4 as the print option. I&#8217;m sure there&#8217;s a different way to do this. What threw me off is all the little test stuff I did for my kids I was able to alter the filament choice right before I printed it out. But with these sliced files it didn&#8217;t work. So the hack is to set it up before you save the sliced file to gcode.3mf and export.</p><p>(I also added a second Big Arrow to show the green support filament structures that the software added after clicking that option earlier. You can close up the details in the color option drop-down pane and get a better look, and zoom in and rotate to see the details.)</p><p>And that brings us to Step 6, export your model. I strongly suggest you have a folder for this project and save your gcode.3mf files because it&#8217;s a complete pain to go back and re-do all these steps to slice up the file again. But don&#8217;t worry, if one of the pieces doesn&#8217;t print right, you can select just that object out of the STL file and make that a new project and print it individually. I think. Hasn&#8217;t happened to me yet, but that&#8217;s the theory. That&#8217;s what &#8220;plate&#8221; means here in this option, everything on the plate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BW71!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BW71!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.png 424w, https://substackcdn.com/image/fetch/$s_!BW71!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.png 848w, https://substackcdn.com/image/fetch/$s_!BW71!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!BW71!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BW71!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.png" width="1456" height="922" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:922,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2051497,&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_!BW71!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.png 424w, https://substackcdn.com/image/fetch/$s_!BW71!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.png 848w, https://substackcdn.com/image/fetch/$s_!BW71!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!BW71!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb05544-d9eb-4a3f-a623-f56919800722_2528x1600.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>Once you&#8217;ve saved it, you can send it to your printer&#8217;s SD card right from this Studio software. </p><p>Learned that the hard way; first option for me was to pop out the SD card and use an adapter to connect it to my laptop&#8217;s USB port, which worked but then I realized I hadn&#8217;t saved the gcode.3mf version of the file, just the 3mf, and that wouldn&#8217;t print. I was dreading the trip back out to the garage and of course I&#8217;d put the card reader and the USB-C adapter away because I hadn&#8217;t used it in four years or so. But then clicking over to the Device tab allowed me to figure out how to send the saved file to the SD card over WiFi.</p><p>And here they are, all the pieces for the Follower arm, cleaned up to remove the support structures. Oddly satisfying to pry away the support stuff, they crackle and sometimes pulling on a thread of filament will peel off a whole wad. Don&#8217;t worry, the actual piece is much stronger and you won&#8217;t accidentally yank anything off. You might scratch the part, though, so don&#8217;t be an animal</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C1LX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C1LX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg 424w, https://substackcdn.com/image/fetch/$s_!C1LX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg 848w, https://substackcdn.com/image/fetch/$s_!C1LX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!C1LX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C1LX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3790427,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C1LX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg 424w, https://substackcdn.com/image/fetch/$s_!C1LX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg 848w, https://substackcdn.com/image/fetch/$s_!C1LX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!C1LX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0218518-94e0-4d69-9d19-cab56fae6b4a_5712x4284.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>.Now to assembly!</p><p> </p>]]></content:encoded></item><item><title><![CDATA[Compiling From C]]></title><description><![CDATA[In which our intrepid protagonist attempts to take words and turn them into a functioning chunk of ones and zeros that does something on his computer]]></description><link>https://www.zadnu.com/p/compiling-from-c</link><guid isPermaLink="false">https://www.zadnu.com/p/compiling-from-c</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Fri, 15 Nov 2024 23:47:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HNg4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HNg4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HNg4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic 424w, https://substackcdn.com/image/fetch/$s_!HNg4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic 848w, https://substackcdn.com/image/fetch/$s_!HNg4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic 1272w, https://substackcdn.com/image/fetch/$s_!HNg4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HNg4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic" width="1024" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115128,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&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_!HNg4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic 424w, https://substackcdn.com/image/fetch/$s_!HNg4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic 848w, https://substackcdn.com/image/fetch/$s_!HNg4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic 1272w, https://substackcdn.com/image/fetch/$s_!HNg4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61ca3cc3-0afa-456a-9736-0380e1cd0394_1024x768.heic 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>I was scrolling through Twitter, which remains a source of fascinating learning for me, especially about AI stuff, and came across this tweet. The author is Victor Taelin who is doing a project called <a href="https://higherorderco.com">HVM</a>, <a href="https://github.com/HigherOrderCO/HVM">GitHub repo here,</a> described as &#8220;a compiler and evaluator for high-level languages that automatically achieves near-ideal speedup, up to 1000+ threads.&#8221; </p><p>Pretty advanced stuff and I really don&#8217;t understand much of it, but from what I gather he&#8217;s using a theory that uses a concurrent computation to create Interaction Combinators and in that way allow for a program to run in parallel. This is important because instead of things running serially, working down a bunch of code on a CPU, it can run simultaneously on the thousands of nodes in the GPU. I tried to read the <a href="https://www.sciencedirect.com/science/article/pii/S0890540197926432">paper</a> on which it&#8217;s based, from 1997 by Yves Lafont, but wow did my comprehension come nowhere close to grasping it. Theoretical computer science is &#8230; challenging.</p><p>Anyway, Victor had this bit of code in a gist that he was asking folks on the internet to run for him, to see if the new M4 chips from Apple were worth investigating. Since his code is pure C, it should run just fine and even includes a little thing at the end to spit out the results. It takes a fixed number of interactions and runs them over a fixed number of nodes and the fast the better, more int/sec, the better.</p><p>All of this is an excuse to exercise my new Mac mini with an M4 Pro and 64 gigabytes of unified RAM, shared with the twenty GPU cores. The memory bandwidth is substantially higher at 273 gb/s and I wanted to see how it compared to some of the other systems running Nvidia GPUs and another person with an M2 Ultra Mac Studio.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qV-n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qV-n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic 424w, https://substackcdn.com/image/fetch/$s_!qV-n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic 848w, https://substackcdn.com/image/fetch/$s_!qV-n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic 1272w, https://substackcdn.com/image/fetch/$s_!qV-n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qV-n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic" width="348" height="224.2089552238806" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1206,&quot;resizeWidth&quot;:348,&quot;bytes&quot;:45450,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&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_!qV-n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic 424w, https://substackcdn.com/image/fetch/$s_!qV-n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic 848w, https://substackcdn.com/image/fetch/$s_!qV-n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic 1272w, https://substackcdn.com/image/fetch/$s_!qV-n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d3248d7-e377-4190-adf0-73e3f4a4f2ff_1206x777.heic 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>I used Claude to help me with some of the background and it was surprisingly easy. I&#8217;ve seen mention by coders about &#8220;compiling from source&#8221; and how Real Nerds never just download a binary, they get the source code from GitHub or SourceForge back in the day and compile it themselves. And from what I gather a considerable portion of a developer&#8217;s day back in the olden times (like 2004) was waiting for the code to recompile after making an edit or two to the Java code.</p><p>It was really quite simple. I copy-pasted the gist to a plain text document on my computer, saved it with a .c extension, which then made the text all colorful because I have syntax highlighting turned on in TextMate. Then I went to the command line and verified that I had Clang installed (not sure why but I did, and it was recent) and typed &#8220;clang hvm3.c -o hvm.&#8221; I have no idea what the -o flag is doing, but that&#8217;s what Claude says so I did it. [apparently means &#8220;optimize&#8221; and there are three different levels that make various tradeoffs. I stuck to the plain one without a numeric identifier.]</p><p>A second or two later, possibly less, it was done. I did a quick ls -lah and saw that, yep, there&#8217;s now a binary called &#8220;hvm&#8221; sitting right there in my home directory.</p><p>I had no idea how to run the thing, but another trip to Claude revealed the oh-so-difficult command of  &#8220;./hvm3&#8221;. And do you know what, dear reader? IT WORKED! First time! Amazing.</p><p>Here&#8217;s the fun part: I ran it ten times in a row, by pressing the up arrow cursor key to get the last run command and then hitting enter, so it did ten different runs of the program all with slightly different times. I then took a screen shot of it and dumped it into Claude and asked it to pull the interactions per second data, do a min-max-mean on it and report the results.</p><p>I love using these multi-billion dollar LLMs for mundane tasks, like copying and pasting and performing rudimentary math. In my day job, I had Claude pull the email address for the first lawyer for each defendant out of a 20+ page PDF and then format so I could copy-paste into Outlook. Took maybe forty seconds. Me highlighting and copying over would&#8217;ve been easily fifteen minutes of tedium, and I might have gotten something wrong. I spent a minute to double-check, of course, but that was no problem at all and it got it right the first time.</p><p>I also ran the same program on my MacBook Air with an M2 chip and on my Ubuntu desktop with a RTX 3080 board. </p><p>(oh and one more thing: the cute developer bear cartoon is courtesy of xAI in the Twitter app, it took me four or five iterations to get it right but I think it&#8217;s a nice little addition to the essay.)</p>]]></content:encoded></item><item><title><![CDATA[React App with Claude]]></title><description><![CDATA[a complete dumbass uses AI to create something that actually works!]]></description><link>https://www.zadnu.com/p/react-app-with-claude</link><guid isPermaLink="false">https://www.zadnu.com/p/react-app-with-claude</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Wed, 09 Oct 2024 01:18:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/997daf4c-53eb-495f-9690-cd61e2bd2422_1138x640.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I had a problem to solve in my professional life involving tax law and instead of using a spreadsheet to think my way through the problem, I went right to the Oracle: Claude.AI, specifically <a href="https://claude.ai/new">Claude 3.5 Sonnet</a>, the best-in-class offering from Anthropic that gets solid reviews. I was listening to the founders of <a href="https://www.cursor.com/">Cursor</a> discuss their product on the Lex Fridman podcast earlier and at one point he asks them what the best AI model is for coding. Their response was somewhat surprising, as I&#8217;d expected to hear that the DeepSeek Coder was leading the pack or even ChatGPT-4o. But no. <a href="https://youtu.be/oFfVt3S51T4?si=ETxeu79SCpU5gQic">They said Claude</a> consistently returns the best 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_!xWg5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xWg5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.png 424w, https://substackcdn.com/image/fetch/$s_!xWg5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.png 848w, https://substackcdn.com/image/fetch/$s_!xWg5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.png 1272w, https://substackcdn.com/image/fetch/$s_!xWg5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xWg5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.png" width="528" height="296.9420035149385" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:1138,&quot;resizeWidth&quot;:528,&quot;bytes&quot;:12257,&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_!xWg5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.png 424w, https://substackcdn.com/image/fetch/$s_!xWg5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.png 848w, https://substackcdn.com/image/fetch/$s_!xWg5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.png 1272w, https://substackcdn.com/image/fetch/$s_!xWg5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ad47339-8de9-498b-a6f9-170b8ae7c237_1138x640.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>.</p><p>My process was fairly simple. I started with a text file on my laptop and started describing what I wanted. A React app, with a table at the top using data pulled from a screen shot of my client&#8217;s existing portfolio tracker. To simplify, I only used the first four publicly traded equities, but the table shows purchase price and current value, from that it can calculate the cost basis. The problem is, how do we transfer those holdings to the limited partners without saddling either the remaining funds or the withdrawing limited partners with a disproportionate share of the capital gains, and hence a greater tax liability?</p><p>It&#8217;s not super hard to do as math, basically just a weighted average but it then gets tricky from a &#8220;what if&#8221; perspective. What if Bob wants to pull out $800,000 but Jane wants to withdraw $2.4 million. How many shares of each stock do we transfer? But then what if Bob changes his mind and says No, let&#8217;s only pull $650,000 and leave the rest in the fund?</p><p>I figured a React app would be best as an interactive dashboard. Why? I have no idea. I think I saw someone tweet about it and the AI created a React web app with a slider. So I thought, Ooh, yeah let&#8217;s have a slider.</p><p>I wrote a plain text document describing the problem, setting out the limitations, and describing how to present the information. I wanted one table at the top called &#8220;Before&#8221; restating the current portfolio, then another table at the bottom called &#8220;After,&#8221; with a subtable or &#8220;card&#8221; for each LP with a slider and then rows underneath calculating the specific mix of stocks to withdraw and a total withdrawn. So an LP can go to the dashboard, move the slider to get the right percentage withdrawal or just total dollars pulled out of the fund, and it automatically in real time recalculates what the composition of the fund will look like after.</p><p>Then I copy-pasted each chunk of instructions into Claude and asked it to present it to me as an Artifact, a side window with the code (Javascript I think? Maybe Typescript? I literally have no idea) and it has a toggle so you can preview what it looks like.</p><p>I iterated on that for a while &#8212; make the cards narrower, no wider; give me a shadow behind each card, ok now in color, no not that color &#8212; and tried to make sure that my text file with the prompts was up to date so I could reproduce it if needed.</p><p>Here&#8217;s an example of a few of the prompts:</p><pre><code>Each card should have the LP's name and a slider for each limited partner showing a value of between 0 and 90 to represent the total value of the withdrawal. Please show that value selected next to the slider.

Below the slider, for each limited partner make four lines showing the number of shares of each stock that would be hypothetically withdrawn to create that total. Please note that a fractional share may not be withdrawn. Only whole shares. Please indent the row slightly from the left margin under each limited partner's name. Each row should have the Name of the stock, number of shares, and the total value of those shares using the current value price from the Before table.

Add a fifth row showing the dollar value of the hypothetical withdrawal, calculated by summing the dollar value of each row. 

Add a sixth row showing  the tax burden of that limited partner's hypothetical withdrawal, calculated by using the relevant values from the Before table. Please display the dollar values in the right hand column of these rows for the limited partner hypothetical withdrawals using commas for thousands and millions -- just like you did in the Before table</code></pre><p>Not every paragraph was a new prompt. I think I put two or three, or maybe all four of these, into one prompt. (Can&#8217;t give you the full prompt sequence since it contains client information and is privileged, but it&#8217;s not important to the story anyway.)</p><p>And as it went, it would retype the code in the Artifact window. Candidly, it wasn&#8217;t fast. I think it would redo the entire project from the beginning and not cache anything, so it was pretty slow. I sort of expected some of the changes to just jump into the code and fix it, like the background color. I&#8217;m not sure how many tokens I used up or how close I came to hitting my daily limit, but I&#8217;m on the $20 per month pro plan so I figured they&#8217;d give me some slack.</p><p>Here&#8217;s the best part: when I was satisfied, I discovered a button down in the lower corner of the Artifact window labeled &#8220;Publish.&#8221; Anthropic automatically turns the React code into a web app, and publishes it to the web with an obscure URL (you can keep it private if you want, but I needed to send it to the client for approval). Amazing feature!</p><p>The feedback I got was along the lines of &#8220;Why is my card pink? I want a rainbow gradient background!&#8221; which is to say, the best kind of feedback for a lawyer; all style, no substance. Yes, this is not exactly what you hire a lawyer for, but it was a question we needed answered and I got a little curious.</p><p><strong>Total time spent, start to finish even with aesthetic tinkering: Forty-five minutes. Amazing.</strong></p><p>I have in mind to try it in Cursor to see how that goes. Maybe that&#8217;s another blog post.</p>]]></content:encoded></item><item><title><![CDATA[Alice's Complicated Family]]></title><description><![CDATA[In which various LLMs compete to see who can solve a set of very easy riddles, based on the exceptionally complex and ever-shifting family relationships of a woman named Alice]]></description><link>https://www.zadnu.com/p/alices-complicated-family</link><guid isPermaLink="false">https://www.zadnu.com/p/alices-complicated-family</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Mon, 07 Oct 2024 01:25:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aofS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Saw <a href="https://x.com/jjitsev/status/1842727628463128968">this thread</a> on Twitter discussing various claims made about ChatGPT-4o and whether it&#8217;s lived up to the hype. Haven&#8217;t gotten through it, more on that later, but this caught my eye:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aofS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aofS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aofS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aofS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aofS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aofS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg" width="728" height="404.8609680741504" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:971,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:177152,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aofS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aofS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aofS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aofS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7761d7cc-e781-4e01-a994-1a39f7de3853_971x540.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>I copied it over into four different models that I had handy on my phone: ChatGPT (running 4o), Claude 3.5 Sonnet, Gemini 1.5 Pro Experimental 0827, and Llama 3.2 3b Instruct q4 (loaded on my iPhone 16 Pro using the Pocket Pal app)<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. My methodology was to just say &#8220;try again&#8221; if it didn&#8217;t get it right on the first shot and see how long it took to return the correct answer.</p><p>For the first riddle, Variation 2 in the illustration above, here are the results:</p><p><strong>ChatGPT-4o</strong> &#8212; wrong answer (2) on first, got it on second</p><p><strong>Claude 3.5 Sonnet</strong> &#8212; wrong answer (2) on first, got it on second</p><p><strong>Gemini 1.5 Pro Exp</strong> &#8212; correct on first try</p><p><strong>Llama 3.2 3b</strong> &#8212; Amazingly bad. The first response was that it could not answer given the information stated because nothing was indicated about Alice&#8217;s brother&#8217;s siblings. I told it to try again, same response. I then said &#8220;her brothers are related to her sisters&#8221; and it responded that her brothers have two sisters. Same wrong answer as the other models, so I said &#8220;wrong answer, try again&#8221; and it said 2 again. This went on for three more turns until I said expressly &#8220;try again and the answer is not two.&#8221; And it answered &#8230; two. Insert face palm emoji.</p><p>For the second riddle, same methodology:</p><p><strong>ChatGPT-4o</strong> &#8212; wrong answer (1) on first, got it on second</p><p><strong>Claude 3.5 Sonnet</strong> &#8212; correct on first try</p><p><strong>Gemini 1.5 Pro Exp</strong> &#8212; wrong answer (1) on first, got it on second</p><p><strong>Llama 3.2 3b</strong> &#8212; Amazingly bad. First answer was wrong (1) and then it went to zero, and kept answering that. I told it the answer was neither zero nor one and to try again and it said &#8230; one. More face palm.</p><p>The tweet author, Jenia Jitsev, sets up a test on these sorts of problems and benchmarks the 4o model against 4o-mini and find that the 4o model needs approximately 1 try to get the right answer, while the 4o-mini model is all over the place. </p><p>He then tests against the extended problem sets, similar word problems that require you to know that, e.g., an uncle is the sibling of your parent and your uncle&#8217;s niece is your sister if your parent only has one sibling. These aren&#8217;t hard, requires a couple of extra steps, my eleven year old son got the answers correct while watching YouTube on his phone almost as soon as I read the problem out to him. He finds, however, that even the 4o model has substantial variation of answers.</p><p>Both models purportedly ace the Math Olympiad and International Olympiad of Informatics problems, problems that are way harder than these. Moreover, there shouldn&#8217;t be any variation at all, he argues, because the reasoning required is the same: you either get it or you don&#8217;t, so maybe plus or minus one prompt is within variation, but not 6+. Jitsev speculates that maybe the MO and IOI problems leaked into the training data and thus it&#8217;s just not reasoning at all.</p><p>One response by Lucas Beyer:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!20H2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!20H2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg 424w, https://substackcdn.com/image/fetch/$s_!20H2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg 848w, https://substackcdn.com/image/fetch/$s_!20H2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!20H2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!20H2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg" width="1206" height="917" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:917,&quot;width&quot;:1206,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:149212,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!20H2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg 424w, https://substackcdn.com/image/fetch/$s_!20H2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg 848w, https://substackcdn.com/image/fetch/$s_!20H2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!20H2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe397fbc3-be6a-4fd0-b1b3-33966fb19f1b_1206x917.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Once again I marvel at the sublime, nay poetic, artistic facility that the nerds at AI labs have for naming their models. No notes, 10/10. One can only wonder what their cats are named, or God forbid their children.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Taming Silicon Valley]]></title><description><![CDATA[Working through Gary Marcus' new book]]></description><link>https://www.zadnu.com/p/taming-silicon-valley</link><guid isPermaLink="false">https://www.zadnu.com/p/taming-silicon-valley</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Mon, 30 Sep 2024 18:01:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z0tP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A <a href="https://x.com/katherinexrose">friend</a> recommended to me <em>Taming Silicon Valley</em>, a <a href="https://mitpress.mit.edu/9780262551069/taming-silicon-valley/">new book</a> out from Gary Marcus. I&#8217;m only just past the introduction and have some thoughts, will be worth writing up but for now I&#8217;ll share his own <a href="https://garymarcus.substack.com/">Substack</a> which I just discovered and will look over.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z0tP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z0tP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Z0tP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Z0tP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Z0tP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z0tP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg" width="596" height="908" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:908,&quot;width&quot;:596,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:127831,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Z0tP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Z0tP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Z0tP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Z0tP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad3b4de-7e63-44f8-89c0-a2761bda5a2d_596x908.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[Switching to Substack]]></title><description><![CDATA[Losing patience with GitHub]]></description><link>https://www.zadnu.com/p/switching-to-substack</link><guid isPermaLink="false">https://www.zadnu.com/p/switching-to-substack</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Sun, 29 Sep 2024 21:28:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iWp4!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a601fe-dc5a-4938-a08d-8ee9ff21652a_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You may have figured out that I am now on Substack. This is my first post as a native Substack publisher and previously I had been trying to run my own blog using the <a href="https://gohugo.io/">Hugo</a> framework, a <a href="https://github.com/">GitHub</a> repository, and <a href="https://pages.cloudflare.com/">Cloudflare pages</a>. It&#8217;s quite complicated, despite what the nerds say. I got a basic blog working but it wasn&#8217;t what I wanted and was more than a little bit painful to write new content. Worst, I needed an actual computer with command line hooked up to git in order to make it work. </p><p>Ultimately, that was what made me switch. I was trying to change the font and had Claude suggest some simple edits to the CSS file. But the issue (as far as I can tell) ended up being that whatever edits I made to the CSS didn&#8217;t get saved to GitHub, and hence not actually published, because I&#8217;d cloned the GitHub repository of the theme (aptly named &#8220;Plainwhite&#8221;) and because it was owned by someone else and I don&#8217;t have permission to edit that repo, nothing would change in my larger repository. </p><p>I&#8217;m entirely confident that there is a way to fix this, and I tried a couple of things &#8212; changing the name of the theme to &#8220;new&#8221; and saving it as part of my own repository was the best idea I could come up with &#8212; but it wouldn&#8217;t build from there and threw constant errors. </p><p>So here we are on Substack with the same URL as before. And now I also have an iPhone app for quick posts, which I&#8217;m using to write this in fact. And smart quotes! Yay! And a nicer font! I was also not able to figure out how to add pictures to Hugo, but now it&#8217;s dead simple. </p><p>Ok, back to learning. </p>]]></content:encoded></item><item><title><![CDATA[PocketPal]]></title><description><![CDATA[An iOS app for running local models]]></description><link>https://www.zadnu.com/p/pocketpal</link><guid isPermaLink="false">https://www.zadnu.com/p/pocketpal</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Sat, 28 Sep 2024 20:04:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QDeV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been using Twitter as a way to educate myself on AI and just keep adding people and companies, googling for more information on a person or a company, and then using ChatGPT-4o and Claude Sonnet 3.5 for more lengthy explanations. For example, I saw a reference yesterday to &#8220;loading the quantized GGUF to an endpoint&#8221; and had no idea what that meant.</p><p>GGUF is &#8220;GPT-Generated Unified Format&#8221; which is basically the file format for large language models. Like you would say PDF or jpeg, and an &#8220;endpoint&#8221; is a cloud service like <a href="https://groq.com/">Groq</a> or <a href="https://azure.microsoft.com/en-us/products/machine-learning">Azure</a> or <a href="https://aws.amazon.com/deep-learning/">AWS</a>, more formally &#8220;a stable and durable URL that can be used to request or invoke a model.&#8221; At least according to <a href="https://learn.microsoft.com/en-us/azure/machine-learning/concept-endpoints?view=azureml-api-2">Microsoft</a>.</p><p>&#8220;Quantized&#8221; is a technique used to reduce the precision of the numbers used to represent the model&#8217;s parameters (weights and biases). Instead of using full 32-bit floating-point numbers, quantization uses lower precision representations, such as 16-bit, 8-bit, or even 4-bit integers.</p><p>You trade some precision for a smaller size, again like jpeg compression back in the old days of dial-up when we would have to adjust a picture to make it work on the slow web of the day and couldn&#8217;t count on the user&#8217;s software being able to make that adjustment efficiently (or at all).</p><p>So I was pretty blown away when I saw a Tweet by <a href="https://awnihannun.com/">Awni Hannun</a> fine-tuning the new Llama3.2-1b open source model on a iPhone 16 Pro and getting better than 150 tokens per second. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QDeV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QDeV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic 424w, https://substackcdn.com/image/fetch/$s_!QDeV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic 848w, https://substackcdn.com/image/fetch/$s_!QDeV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic 1272w, https://substackcdn.com/image/fetch/$s_!QDeV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QDeV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic" width="1192" height="1376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1376,&quot;width&quot;:1192,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:104106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&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_!QDeV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic 424w, https://substackcdn.com/image/fetch/$s_!QDeV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic 848w, https://substackcdn.com/image/fetch/$s_!QDeV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic 1272w, https://substackcdn.com/image/fetch/$s_!QDeV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13cf7adf-5b0b-48d7-b4a3-9a2030f1a55a_1192x1376.heic 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>Impressive! No bozo, he&#8217;s one of the lead ML researchers at Apple and major contributor to <a href="https://github.com/ml-explore/mlx">MLX</a>, the open source software that optimizes Apple Silicon for machine learning. He linked to <a href="https://github.com/ml-explore/mlx">mlx-swift</a> which is a Github repo with the code to download and compile with XCode so I can make an app to run on my iPhone.</p><p>I thought I would try it. But before I could open my laptop and start working on XCode (which I haven&#8217;t run in maybe eight years) I saw a comment with someone suggesting PocketPal on the App Store. It&#8217;s similar, a wrapper around open source models that you can download.</p><p>I tried that and it works great, was able to run Llama3.2-3b-instruct &#8212; but only at 16 tok/sec. The output is a bit slow, way different from running <a href="https://groq.com/">Groq</a> on the cloud at 2200 tok/sec for the Llama3.2-1b model. Oddly, the 1b model isn't available on PocketPal as far as I can tell.</p><p>But hey, a really useful generative AI model running entirely locally, without need of an internet connection, with performance that&#8217;s basically on par with state of the art models from less than a year ago. That&#8217;s how blazing fast this area is moving.</p>]]></content:encoded></item><item><title><![CDATA[Ollama and WebUI]]></title><description><![CDATA[What it is good for? Absolutely ... something, maybe?]]></description><link>https://www.zadnu.com/p/ollama</link><guid isPermaLink="false">https://www.zadnu.com/p/ollama</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Sat, 21 Sep 2024 20:03:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/BzFafshQkWw" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Seeing a bunch of stuff on Twitter about running Large Language Models locally, and I had a few hours this afternoon to dabble, so I figured hey sure let&#8217;s do it.</p><p>Found an interesting video on YouTube by Dan Vega:</p><div id="youtube2-BzFafshQkWw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;BzFafshQkWw&quot;,&quot;startTime&quot;:&quot;510s)&quot;,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/BzFafshQkWw?start=510s)&amp;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>Ollama is local software for Mac and Windows(!) that takes care a lot of the overhead of running models, but is strictly command line. Here's how to get it started:</p><pre><code>ollama run llama3.1</code></pre><p>Super easy. You type your queries much like using ChatGPT on the web or an iPhone app, except it&#8217;s in a terminal window and it spits out the answers right there, without the pretty user interface. It's all plain text.</p><p>WebUI gives a nice, pretty wrapper for that and it&#8217;s clearly copied on the font and colors of ChatGPT. Which is a bummer as I really prefer Anthropic&#8217;s Claude interface, especially their &#8220;artifacts&#8221; feature, which opens a sidebar with a mini-window with nice presentation of code and the like.</p><p>WebUI runs in Docker and since I like to have things neat I downloaded the Docker Desktop app and it&#8217;s a lovely UI for that program. </p><p>Still, per Dan Vega, you go to the WebUI docs page and run this command:</p><pre><code>docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main</code></pre><p>Fine. But because I seem to have negative energy when it comes to code, the first time I ran WebUI it asked for a user and password (all local to the Docker image but it's set up out-of-the-box for group useage). I let Apple generate a strong password &#8212; which failed to save anywhere, so then I was locked out. MoTH#RF*$ER!! </p><p>Killed the Docker image, trashed it, trashed the local resources that I just downloaded, and then Googled to figure out how to change the user environment variable according to the WebUI docs: &#8220;If you want to disable login for a single-user setup, set WEBUI_AUTH to False. This will bypass the login page.&#8221; Basically I have to add </p><pre><code>--env=WEBUI_AUTH=False</code></pre><p>to the &#8220;docker run&#8221; command that downloads everything and sets up the local web page UI.</p><p>... or so I thought. Did not work at all. There&#8217;s a way to do it in the Docker Desktop app somewhere but it needs to be done <em>before</em> the &#8220;docker run&#8221; command sets it all up and I simply cannot figure out how to do that. For now, I&#8217;ll just create a user with a fake name and password or something like that and see if I can get Chrome to save it for me.</p>]]></content:encoded></item><item><title><![CDATA[Python Coding]]></title><description><![CDATA[With an AI as a tutor?]]></description><link>https://www.zadnu.com/p/python-coding</link><guid isPermaLink="false">https://www.zadnu.com/p/python-coding</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Fri, 13 Sep 2024 20:02:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iWp4!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a601fe-dc5a-4938-a08d-8ee9ff21652a_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Looks like Andrew Ng, legendary Stanford professor who launched the MOOC movement and started <a href="https://www.deeplearning.ai">Deeplearning.ai</a> after Coursera, has a new class out to teach Python programming by using an LLM. It&#8217;s quite interesting. Here&#8217;s the <a href="https://www.deeplearning.ai/short-courses/ai-python-for-beginners/">link</a> to the class and I&#8217;ve made it through the first few videos.</p><p>I really like the way they have the page set up. It&#8217;s a Jupyter-style notebook in the center where you can type the code that you're learning and then with a simple shift-enter have the page run it and return the results &#8212; or, more likely, an error message &#8212; right there on the page. Previously, when I was learning several years ago, you&#8217;d have one window or a book propped up with the tutorial and another window with a text editor and then a third with the command line. You&#8217;d type into the text editor, trying not to just copy-paste because come on bro you need to <em>learn</em>, and then save then Command-Tab over to the iTerm2 window and tell it to run the script and see what the output is.</p><p>The rest of the Deeplearning.ai page is a video on the right showing what the tutorial is and walking you through some sample code in the blocks of the notebook in the center, and then a pop-up panel to ask the LLM how to solve the problem. You copy the code that the AI spits out into the notebook and give it a try. So, yeah, still some copy-paste but it avoids so much of the tedium and friction and keeps you focused on learning the actual code. I mean, did you really need to waste ten extra seconds because you went arrow-up on the zshell and re-ran the last command, but forgot to change it from py-tutorial-ch12-ex4.py to py-tutorial-ch12-ex5.py before hitting enter to see if you debugged that issue correctly?</p><p>No, dear reader, you do not. Those are wasteful interruptions to your actual learning. This way is far better, and I&#8217;m loving the idea that AI coders are the future, so learn that instead of the Old Way. It&#8217;s like admitting that people will, actually, use Quickbooks for bookkeeping so let&#8217;s go ahead and teach that instead of making a would-be CPA use paper ledger sheets and pencil and abacus to learn how to do accounting.</p>]]></content:encoded></item><item><title><![CDATA[FP16]]></title><description><![CDATA[Following up on a previous question]]></description><link>https://www.zadnu.com/p/fp16</link><guid isPermaLink="false">https://www.zadnu.com/p/fp16</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Mon, 09 Sep 2024 20:01:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iWp4!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a601fe-dc5a-4938-a08d-8ee9ff21652a_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Okay so answer the question: what does FP16 mean? I&#8217;m referencing a tweet relating to <a href="https://hyperbolic.xyz">Hyperbolic Labs</a> offering Llama 3.1 70B for free with a FP16. Like that&#8217;s a big deal. And apparently not just the standard Llama 3.1 70B but the &#8220;reflection&#8221; model. More about that later.</p><p>I asked Claude, thusly: </p><pre><code>what does FP16 mean in the context of an LLM?</code></pre><p>and here's the answer:</p><pre><code>FP16, or "Float Point 16," refers to a 16-bit floating-point numerical format used in the context of Large Language Models (LLMs) and other machine learning applications. Here's a brief explanation of its significance:

1. Precision: FP16 uses 16 bits to represent a number, offering less precision than the more common 32-bit (FP32) or 64-bit (FP64) formats

2. Memory efficiency: Using FP16 allows for storing model parameters and activations in half the memory compared to FP32, which is particularly beneficial for large models like LLMs.

3. Computational speed: Many modern GPUs have specialized hardware for FP16 operations, allowing for faster computations compared to higher precision formats.

4. Training and inference: FP16 is often used in a technique called "mixed precision training," where some operations are performed in FP16 while others use FP32. This balances speed and accuracy.

5. Model size reduction: Using FP16 can effectively reduce the size of an LLM, making it easier to deploy on devices with limited resources.

6. Trade-offs: While FP16 offers benefits in terms of speed and memory usage, it can potentially lead to some loss of accuracy due to its lower precision.

In the context of LLMs, FP16 is often used to optimize model performance, reduce memory requirements, and speed up inference times, especially on hardware designed to handle this format efficiently.</code></pre><p>ok thanks Claude.</p><p>Is there a native setting for floating point operations? Do models get trained up in FP32 and then &#8220;boiled down&#8221; or throttled by less precision when it comes to their use in other settings? Interestingly, I asked Claude about that and it said it&#8217;d never heard of Llama 3.1 or even a Llama 3 since it was spun up in April 2024 &#8212; and apparently 3.1 was released that same month.</p><p>Various places on the internet say that models are typically trained up using 32-bit floating point numbers for &#8220;model weights and activations.&#8221; Then a process called &#8220;quantization&#8221; takes those weights and represents them with lower-precision numbers, sometimes even four bit numbers it seems. This reduces the memory and computational load so the models run more quickly and efficiently, and hopefully without a loss of quality or at least not a meaningful one. Life is always a trade-off.</p><p>Meta has an interesting discussion <a href="https://llama.meta.com/docs/how-to-guides/quantization/">here</a> of quantization for further reference. Too technical for me at this point.</p><p>Things I learned: a four bit integer is called a &#8220;nibble,&#8221; and represents a number from 0 to 15. Four bit processors were used in microwave ovens, calculators, and cash registers for decimal math. Bit &lt; Nibble &lt; Byte.</p>]]></content:encoded></item><item><title><![CDATA[Goals]]></title><description><![CDATA[What the hell am I doing here? I don't belong here]]></description><link>https://www.zadnu.com/p/goals</link><guid isPermaLink="false">https://www.zadnu.com/p/goals</guid><dc:creator><![CDATA[Mark Ankcorn]]></dc:creator><pubDate>Sun, 08 Sep 2024 20:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iWp4!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26a601fe-dc5a-4938-a08d-8ee9ff21652a_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My ignorance is gargantuan and these writings are going to be me talking fully and frankly about the depth and breadth of that ignorance as it relates to the topic of Artificial Intelligence and Machine Learning. Or is that two topics? See? Ignorance!</p><p>My methodology, to the extent I have one at all, is to scroll diligently through Twitter and see where my brain "catches" on a topic, abbreviation, term of art, concept, and then explore that. Sometimes it's just "what does FP16 mean in this context" and tracking that down.</p><p>So why bother writing this? Why not just learn and file it away and keep moving? Surely that would be faster. But if I don't put it down somewhere or talk it out, then the concept won't stick and I won't learn. I'm hoping this will be selfishly useful later on either in the act of writing and explaining in straightforward non-jargony prose I'll be able to ramify that concept in my own head, or at the least I'll have some notes to look back at. </p><p>And maybe someone else will be searching the internet for the same concept and come upon my notes and it'll help them a little. (For this aspect I am indebted to <a href="https://www.bitsaboutmoney.com/archive/">Patrick McKenzie</a>, the inestimable <a href="https://www.kalzumeus.com">patio11</a>, for his insight that creating value is sometimes just Writing Stuff Down for yourself and other people. And his exhortation to just write more, like 10x more.) Perhaps some future Large Language Model will be snarfling this up and it'll nudge Claude 15 in a slightly different direction? If LLMs are the path to artificial general superintelligence, then it's all just words and words and words. So let's add to that corpus and try to get things right.</p>]]></content:encoded></item></channel></rss>