<?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[CodeFaster]]></title><description><![CDATA[Subscribe today to be a faster coder]]></description><link>https://codefaster.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!i50A!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png</url><title>CodeFaster</title><link>https://codefaster.substack.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 04 Jun 2026 22:54:06 GMT</lastBuildDate><atom:link href="https://codefaster.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Tyler Adams]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[codefaster@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[codefaster@substack.com]]></itunes:email><itunes:name><![CDATA[Tyler Adams]]></itunes:name></itunes:owner><itunes:author><![CDATA[Tyler Adams]]></itunes:author><googleplay:owner><![CDATA[codefaster@substack.com]]></googleplay:owner><googleplay:email><![CDATA[codefaster@substack.com]]></googleplay:email><googleplay:author><![CDATA[Tyler Adams]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Don't code with claude code]]></title><description><![CDATA[(I was working on this when Geoffrey Litt published a trending article on the same topic, you should read it) https://www.geoffreylitt.com/2025/10/24/code-like-a-surgeon]]></description><link>https://codefaster.substack.com/p/dont-code-with-claude-code</link><guid isPermaLink="false">https://codefaster.substack.com/p/dont-code-with-claude-code</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Mon, 27 Oct 2025 19:20:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6ZQe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c61feb-bf00-4606-8727-84cecb97ad5b_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>(I was working on this when Geoffrey Litt published a trending article on the same topic, you should read it) <a href="https://www.geoffreylitt.com/2025/10/24/code-like-a-surgeon">https://www.geoffreylitt.com/2025/10/24/code-like-a-surgeon</a></p><p>Claude Code is really poorly named. It&#8217;s awesome, powerful, a game changer, but it&#8217;s most powerful use cases are not for <strong>writing production code</strong>.</p><p>Instead, be a surgeon, and use Claude Code as an assistant.</p><h1>The Surgical Team</h1><p>In the legendary book The Mythical Man Month, Fred Brooks introduces Mills&#8217; the surgical team. The idea is simple, one master surgeon who does the core work (production code) supported by <em>assistants</em> (who do literally everything else). The reason for it is because:</p><ul><li><p>Production coders all need to communicate with each other (O(n^2) runtime), but their <em>assistants</em> don&#8217;t, so you scale up the assistants to keep n down.</p></li></ul><ul><li><p>Bad programmers add too much tech debt, but that might be all you can hire. </p></li><li><p>If a 0.5x programmer can improve a 10x programmer by 10%, that&#8217;s on net better than him contributing directly. </p></li></ul><p>This fai&#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/dont-code-with-claude-code">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Worse is still Better]]></title><description><![CDATA[In 1989, Richard P. Gabriel]]></description><link>https://codefaster.substack.com/p/worse-is-still-better</link><guid isPermaLink="false">https://codefaster.substack.com/p/worse-is-still-better</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Sun, 26 Oct 2025 19:19:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!i50A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p> In 1989, Richard P. Gabriel was trying to make Lisp a thing, and he noticed that worst seemed to be better, because Unix won out despite taking a lot of shortcuts and just getting out to the marketplace. The essay is very good, and you should totally read the whole thing, but basically, he realized that first-to-market mattered a lot more than best-to-market. This is disputed by Peter Thiel, who believes that last-to-market wins. For example, Facebook was not the first social media platform, by any means.</p><p> When you read the Unix guys, they talk a lot about this, that 90% today is much better than 100% tomorrow. And this is still true today. I have a draft of an essay that I was working on about coding with Claude Code, about how Claude Code is actually not great for production coding, but is an excellent assistant and therefore you can code with surgeons. And then, as I was working on this and refining it and crafting it and getting it all perfect, someone else came out with the exact&#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/worse-is-still-better">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Claude Code Faster]]></title><description><![CDATA[I&#8217;m back from hiatus, and we&#8217;re pivoting, slightly.]]></description><link>https://codefaster.substack.com/p/claude-code-faster</link><guid isPermaLink="false">https://codefaster.substack.com/p/claude-code-faster</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Tue, 21 Oct 2025 23:59:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!i50A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;m back from hiatus, and we&#8217;re pivoting, slightly.</p><p>We&#8217;ll be coding faster with claude code.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Except, not much has changed. </p><p>Fundamentals still matter. Expertise still matters. </p><p>That&#8217;s what Coding Faster is really about, but instead of doing it through programming language directly, now sometimes we do it through claude code.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>
      <p>
          <a href="https://codefaster.substack.com/p/claude-code-faster">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Sometimes complicated is clearer]]></title><description><![CDATA[await page.screenshot(path="ss_0.jpg") await asyncio.sleep(1) await page.screenshot(path="ss_1.jpg") await asyncio.sleep(5-1) await page.screenshot(path="ss_5.jpg") await asyncio.sleep(10-5) await page.screenshot(path="ss_10.jpg") await asyncio.sleep(20-10) await page.screenshot(path="ss_20.jpg")]]></description><link>https://codefaster.substack.com/p/sometimes-complicated-is-clearer</link><guid isPermaLink="false">https://codefaster.substack.com/p/sometimes-complicated-is-clearer</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Wed, 19 Feb 2025 00:52:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<pre><code>await page.screenshot(path="ss_0.jpg")
await asyncio.sleep(1)
await page.screenshot(path="ss_1.jpg")
await asyncio.sleep(5-1)
await page.screenshot(path="ss_5.jpg")
await asyncio.sleep(10-5)
await page.screenshot(path="ss_10.jpg")
await asyncio.sleep(20-10)
await page.screenshot(path="ss_20.jpg")</code></pre><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>
      <p>
          <a href="https://codefaster.substack.com/p/sometimes-complicated-is-clearer">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Optimizing for learning vs results]]></title><description><![CDATA[Yesterday, there was an active discussion on Hacker News that was inspired by a blog post of somebody railing against the woes of large language models being able to allow people to do things without understanding what they're doing.]]></description><link>https://codefaster.substack.com/p/optimizing-for-learning-vs-results</link><guid isPermaLink="false">https://codefaster.substack.com/p/optimizing-for-learning-vs-results</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Mon, 17 Feb 2025 23:15:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Yesterday, there was an <a href="https://news.ycombinator.com/item?id=43074852">active discussion on Hacker News</a> that was inspired by a <a href="https://nmn.gl/blog/ai-and-learning">blog post</a> of somebody railing against the woes of large language models being able to allow people to do things without understanding what they're doing. In particular, his gripes were, in the end, around edge cases, at least on the surface. But deep down, psychologically, this discussion happens every time there's a new technology where someone laments that the old technology had nice benefits, the new one doesn't.  Or that in order for them to get where they are, they had to go through certain difficult trials that involved pain and suffering, whereas the new ones don't. And yet they can get the same things done. One of the two. </p><p>In particular, there's one theme that always comes up, which is that the new technologies allow you to do things without understanding what you're doing. In the short term, this is fantastic. Now you can do things that you didn't know how to do before, and you don't need to pay t&#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/optimizing-for-learning-vs-results">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Don't use functional programming languages]]></title><description><![CDATA[You aren&#8217;t God.]]></description><link>https://codefaster.substack.com/p/dont-use-functional-programming-languages</link><guid isPermaLink="false">https://codefaster.substack.com/p/dont-use-functional-programming-languages</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Wed, 18 Dec 2024 00:13:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!liYF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!liYF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!liYF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png 424w, https://substackcdn.com/image/fetch/$s_!liYF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png 848w, https://substackcdn.com/image/fetch/$s_!liYF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png 1272w, https://substackcdn.com/image/fetch/$s_!liYF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!liYF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png" width="790" height="414" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:414,&quot;width&quot;:790,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64357,&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_!liYF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png 424w, https://substackcdn.com/image/fetch/$s_!liYF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png 848w, https://substackcdn.com/image/fetch/$s_!liYF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.png 1272w, https://substackcdn.com/image/fetch/$s_!liYF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31c7e4bc-9a55-44d6-877b-7cd623418c2a_790x414.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>You aren&#8217;t God.</p><p>You are a programmer. Use a language that maps to how you think. That&#8217;s fast.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Using an unnatural language? That&#8217;s slow.</p><p>Plus of course python has way more library support, stackoverflow support, reddit support, friend support, better gpt support, and programmer market liquidity.</p><p>JaneStreet of Ocaml fame has had to write everything themselves in Ocaml&#8230;because nobody else wrote it in Ocaml. That&#8217;s slow. Yes they&#8217;re good, but not because of Ocaml. At <em>best</em>, you could say a Prop shop needs to write everything anyways for security reasons so its <em>less slow</em>, but I doubt even that&#8217;s true.</p><p>Now functional programming <em>ideas</em>. Like map, filter, reduce. Those are great, go study them. I highly recommend SICP, posibly the greatest book on programming ever written. It uses LISP, <em>but only as a teaching device to express the books ideas.</em></p>
      <p>
          <a href="https://codefaster.substack.com/p/dont-use-functional-programming-languages">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Use bad standards]]></title><description><![CDATA[Crypto has a bad standard: chainId.]]></description><link>https://codefaster.substack.com/p/use-bad-standards</link><guid isPermaLink="false">https://codefaster.substack.com/p/use-bad-standards</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Thu, 28 Nov 2024 13:04:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Crypto has a bad standard: chainId. It&#8217;s this weird opaque <em>universal </em>standard for a chain. Values include 1, 137. 500, What are those, who knows.</p><p>So you might think, oh that standard sucks, it&#8217;s opaque. I&#8217;m going to make my devs lives better and make a human friendly version.<br>That&#8217;s what the devs who designed moralis did:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><a href="https://docs.moralis.com/web3-data-api/evm/reference/get-token-metadata">https://docs.moralis.com/web3-data-api/evm/reference/get-token-metadata</a></p><p>instead of 1 we have eth. eth, I know what that means!</p><p>instead of 137 we have polygon, I know what that means!</p><p>Except now to use their api with my data, I have to extract their custom list of chain names and map my standard list chain ids to their custom standard that nobody else supports.</p><p>And if every api did this, then I&#8217;d have to do a version of this for <em>every api</em>. O(n) dev time</p><p>If no api did this. I&#8217;d never do this. O(1) dev time</p><p>Chain ids might be a bad standard, but it &#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/use-bad-standards">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Log invalid values]]></title><description><![CDATA[Gpt wrote some slop today:]]></description><link>https://codefaster.substack.com/p/log-invalid-values</link><guid isPermaLink="false">https://codefaster.substack.com/p/log-invalid-values</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Wed, 27 Nov 2024 13:46:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Gpt wrote some slop today:</p><pre><code>if(!valid(value)) {
  console.log("Invalid value")
}</code></pre><p>so people must be writing slop like that, let&#8217;s fix it:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><pre><code><code>if(!valid(value)) {
  console.log(`Invalid value:${value}`)
}</code></code></pre><p>Isn&#8217;t that so much nicer! Now we can see in our logs what the value is. And it&#8217;s DSV so we can parse it with cut if we need  the value (usually in my paste buffer but occasionally elsewhere).</p><p>Sometimes I&#8217;ll write a sick little:</p><pre><code>./run | tail -n1 | cut -d : -f 2 | pbcopy</code></pre><p>or if I log JSON</p><pre><code>console.log(JSON.stringify({s: "Invalid value", value})</code></pre><p>I can get the value via:</p><pre><code><code>./run | tail -n1 | jq .value -r | pbcopy</code></code></pre><p>isn&#8217;t fast programming fun?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>
      <p>
          <a href="https://codefaster.substack.com/p/log-invalid-values">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[building vs taping things together]]></title><description><![CDATA[Is there really a difference?]]></description><link>https://codefaster.substack.com/p/building-vs-taping-things-together</link><guid isPermaLink="false">https://codefaster.substack.com/p/building-vs-taping-things-together</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Wed, 27 Nov 2024 00:19:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Is there really a difference?</p><p>Yes..and..no..and..no.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>The intended difference is that taped together works under demo load but not production load where as &#8220;built&#8221; does. But there&#8217;s a secret to taping stuff together that does handle production load.</p><p>&#8220;Hacky Js&#8221; Should work in theory. In 2024, computers are <em>fast</em>. You shouldn&#8217;t need &#8220;industrial strength code&#8221; or to spend time optimizing performance to get something that&#8217;ll scale.  It should be possible to throw something hacky on a scaling system like Vercel or aws and It Just Scales. But when you do&#8230;something breaks. Something always goes wrong. So how do you pull off the fine art of shipping hacky js?</p><p>Get good.</p><p>One really great thing about getting good at fast programming is that you realize being good at fast programming is mostly about <em>not making fatal mistakes</em>. Don&#8217;t violate SPOT. Keep the code and data trans&#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/building-vs-taping-things-together">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to code for the future]]></title><description><![CDATA[Most mid-level engineers make the same mistake when coding for the future: coding at all.]]></description><link>https://codefaster.substack.com/p/how-to-code-for-the-future</link><guid isPermaLink="false">https://codefaster.substack.com/p/how-to-code-for-the-future</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Tue, 19 Nov 2024 08:38:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most mid-level engineers make the same mistake when coding for the future: coding at all. The trick to coding for the future is to not code at all. </p><h1>Why code for the future?</h1><p>Taking a big step back, when we code for the future, it&#8217;s because we want to make sure our future selves don&#8217;t have <em>more work because of bad decisions today</em>. We&#8217;ve all accidentally made technical debt that made extra work for ourselves. But many times, we&#8217;re so worried about the future, we overcorrect. We make the mistake of trying to predict the future so correctly that we code today so that tomorrow is <em>less work because of good decisions today. </em>That&#8217;s way more than we need to strive for, and it&#8217;s extremely difficult. Instead, let&#8217;s just shoot for &#8220;not more work&#8221; by not making tech debt.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h1>How to not code for the future</h1><p>This means, we should write code that <em>doesn&#8217;t box ourselves in</em> and STO&#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/how-to-code-for-the-future">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Instantly Snap, Copy, and Paste Screenshots]]></title><description><![CDATA[I&#8217;ve been holding a deep secret out on you, my readers.]]></description><link>https://codefaster.substack.com/p/instantly-snap-copy-and-paste-screenshots</link><guid isPermaLink="false">https://codefaster.substack.com/p/instantly-snap-copy-and-paste-screenshots</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Fri, 08 Nov 2024 14:12:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been holding a deep secret out on you, my readers. It changed my life, and now it&#8217;ll change yours. Want to take a screenshot then paste it as an image?</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j27k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9705131-b472-4ec3-873f-003ce2de415b_802x86.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j27k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9705131-b472-4ec3-873f-003ce2de415b_802x86.png 424w, https://substackcdn.com/image/fetch/$s_!j27k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9705131-b472-4ec3-873f-003ce2de415b_802x86.png 848w, https://substackcdn.com/image/fetch/$s_!j27k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9705131-b472-4ec3-873f-003ce2de415b_802x86.png 1272w, https://substackcdn.com/image/fetch/$s_!j27k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9705131-b472-4ec3-873f-003ce2de415b_802x86.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j27k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9705131-b472-4ec3-873f-003ce2de415b_802x86.png" width="802" height="86" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9705131-b472-4ec3-873f-003ce2de415b_802x86.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:86,&quot;width&quot;:802,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16361,&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_!j27k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9705131-b472-4ec3-873f-003ce2de415b_802x86.png 424w, https://substackcdn.com/image/fetch/$s_!j27k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9705131-b472-4ec3-873f-003ce2de415b_802x86.png 848w, https://substackcdn.com/image/fetch/$s_!j27k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9705131-b472-4ec3-873f-003ce2de415b_802x86.png 1272w, https://substackcdn.com/image/fetch/$s_!j27k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9705131-b472-4ec3-873f-003ce2de415b_802x86.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I just copy pasted the above, with this simple script:</p><pre><code>#!/usr/bin/env bash
scrot -s -e 'mv $f ~/Pictures &amp;&amp; xclip -selection clipboard -t image/png -i ~/Pictures/$f'</code></pre><p>Ask AI for help installing any dependencies.</p><p>If you have i3, you can bind it, I bind mine to mod+Shift +p and save it as screen-captue</p><pre><code>bindsym --release $mod+Shift+p exec screen-capture</code></pre><p>Then, try it out.</p><ol><li><p>Execute</p></li><li><p>Click</p></li><li><p>Drag</p></li><li><p>Click</p></li><li><p>Paste</p></li></ol><p>The Image will be dropped both into your <strong>clipboard and ~/Pictures</strong></p><p>That&#8217;s it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>
      <p>
          <a href="https://codefaster.substack.com/p/instantly-snap-copy-and-paste-screenshots">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Abundance mindset (not LinkedIn cringe)]]></title><description><![CDATA[I speaking with someone about changing out an API key when he proposed two solutions:]]></description><link>https://codefaster.substack.com/p/abundance-mindset-not-linkedin-cringe</link><guid isPermaLink="false">https://codefaster.substack.com/p/abundance-mindset-not-linkedin-cringe</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Wed, 30 Oct 2024 00:46:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I speaking with someone about changing out an API key when he proposed two solutions:</p><p>1 - Go find one that&#8217;s been already made</p><p>2 - Make a new one</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>We made a new one because it&#8217;s <em>much much faster</em>. Finding one requires searching codebases, extraction, and maybe, even, dealing with people. It also could requiring verifying that there&#8217;s no pollution issues with reusing the old one.</p><p>All of which, especially people are slow. But creation? That&#8217;s fast.</p><p>So why would <em>anybody </em>even suggest reusing the first one? </p><p>Scarcity mindset.</p><p>The scarcity mindset is <em>toxic </em>for fast coding. If you suspect you have it, you must root it out, remove it, and develop the Abundance Mindset. Stop thinking everything is expensive and you must think hard about how to conserve it. Instead everything is cheap and you must instead think hard about how to lay it out cleanly so you can work quickly us&#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/abundance-mindset-not-linkedin-cringe">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Which OS should I drive?]]></title><description><![CDATA[You&#8217;ll spend more hours with your OS on your daily driver than your spouse.]]></description><link>https://codefaster.substack.com/p/which-os-should-i-drive</link><guid isPermaLink="false">https://codefaster.substack.com/p/which-os-should-i-drive</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Wed, 02 Oct 2024 05:09:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You&#8217;ll spend more hours with your OS on your daily driver than your spouse. Think about it. Will you spend 8+ hours a day, 5+ days a week, for 30+ years with your spouse? If you will spend that much time with your daily driver&#8217;s OS, can you really afford to use a suboptimal OS? Can you waste your life away like that? Isn&#8217;t it worth investing some time in the best OS?</p><h1>The Options</h1><p>Today, there&#8217;s still only the big 3: Windows, Mac, and Linux. non-mac BSD is esoteric. Temple OS doesn&#8217;t support networking. And Plan 9 never made it out of the lab. The big 3 are all popular enough that we won&#8217;t go into them or their differences.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h1>The Golden Rule</h1><p>The golden rule for choosing any long term personal technology choice like an OS or a text editor. Once you&#8217;ve ruled out everything that doesn&#8217;t meet the technical bar, we should pick:</p><pre><code>The one that you&#8217;ll <em>want </em>to spend the mos&#8230;</code></pre>
      <p>
          <a href="https://codefaster.substack.com/p/which-os-should-i-drive">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[LLM workflows]]></title><description><![CDATA[I&#8217;ve been waiting to write about LLMs because I&#8217;ve had very little to say about LLM&#8217;s that isn&#8217;t been obvious.]]></description><link>https://codefaster.substack.com/p/llm-workflows</link><guid isPermaLink="false">https://codefaster.substack.com/p/llm-workflows</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Sun, 22 Sep 2024 18:17:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been waiting to write about LLMs because I&#8217;ve had very little to say about LLM&#8217;s that isn&#8217;t been <em>obvious. </em>All prompt engineering advice I&#8217;ve had and came across online distilled down to:</p><ol><li><p>prompt better like you would to a human.</p></li><li><p>Tell the LLM to be good at it&#8217;s job (fun quirk of LLMs is that it does the <em>average </em>of what it&#8217;s seen, so careful prompting can deal with slop)</p></li></ol><p>and I don&#8217;t need to tell you that. Most of my usage has been the obvious usage, and since I had nothing novel so say, I said nothing. However, lately I&#8217;ve started to come across some non-obvious ways to use LLMs.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h1>Surgeon style programming </h1><p>We can reorganize ourselves as a <em>head surgeon </em>from the <em>surgical team</em> in <a href="https://en.wikipedia.org/wiki/The_Mythical_Man-Month">The Mythical Man Month</a>. The book, from <em>50 years ago</em> discusses that every surgical team needs a <em>human </em>language lawyer, <em>human </em>toolsmith, etc. but getting people to agree to that was hard&#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/llm-workflows">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[I picked a new editor]]></title><description><![CDATA[I&#8217;ve been using vi/vim since 2005...]]></description><link>https://codefaster.substack.com/p/i-picked-a-new-editor</link><guid isPermaLink="false">https://codefaster.substack.com/p/i-picked-a-new-editor</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Thu, 05 Sep 2024 23:55:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been using vi/vim since 2005. 19 years is a long time to use an editor, and switch. It was good knowing you vi, but it&#8217;s time to move on to bigger and better editors.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Just kidding, I&#8217;m moving onto neovim, the latest and greatest vi derivative, here&#8217;s why:</p><p>vi/vim have served me very well for text editing and integrate nicely into the unix shell. However&#8230;vi/vim are not made to be <em>extensible.</em> vimscript is an <a href="https://chatgpt.com/share/dc5f16e5-7cc4-43e5-9bdc-56673ff60626">awful hack</a>. They&#8217;re made to edit text and they do that well, but nothing more, which in the 80s and 90s was the right choice.</p><p>But now, in the 2020s, text editors need some level of extensibility to handle integrations with things like static analysis tooling and genAI. Text is not just edited in isolation, but in coordination with feedback from various daemons. Here, neovim shines as neovim is an <em>extensible</em> vim. A vim you can plug things into.</p><p>By 2024 i&#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/i-picked-a-new-editor">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[From, not to]]></title><description><![CDATA[Bad code:]]></description><link>https://codefaster.substack.com/p/from-not-to</link><guid isPermaLink="false">https://codefaster.substack.com/p/from-not-to</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Wed, 07 Aug 2024 03:25:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Bad code:</p><pre><code>CToD(BToC(AToB(A)))</code></pre><p>Good code:</p><pre><code>DFromC(CFromB(BFromA(A)))</code></pre><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>
      <p>
          <a href="https://codefaster.substack.com/p/from-not-to">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Don't be clever, just try the AI]]></title><description><![CDATA[I thought I was clever solving a problem by having chatgpt generate a parser from the data to convert the whole data to json.]]></description><link>https://codefaster.substack.com/p/dont-be-clever-just-try-the-ai</link><guid isPermaLink="false">https://codefaster.substack.com/p/dont-be-clever-just-try-the-ai</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Tue, 30 Jul 2024 20:32:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I thought I was clever solving a problem by having chatgpt generate a parser from the data to convert the whole data to json.</p><p>NOPE.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Here&#8217;s the query that solved my problem faster:</p><pre><code>make this nice json</code></pre><p>followed by the raw data.</p><p>Just try the AI first, and don&#8217;t be clever.</p><p>If you have too much data for AI, then sure, a parser&#8217;s great. but until then, try the AI.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>
      <p>
          <a href="https://codefaster.substack.com/p/dont-be-clever-just-try-the-ai">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Hackernews Darkmode]]></title><description><![CDATA[Courtesy of https://github.com/susam/userscripts and thanks to chatgpt for fixing the flashing issue]]></description><link>https://codefaster.substack.com/p/hackernews-darkmode</link><guid isPermaLink="false">https://codefaster.substack.com/p/hackernews-darkmode</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Tue, 30 Jul 2024 00:22:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Courtesy of <a href="https://github.com/susam/userscripts">https://github.com/susam/userscripts</a> and thanks to chatgpt for fixing the flashing issue</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m4gy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m4gy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.png 424w, https://substackcdn.com/image/fetch/$s_!m4gy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.png 848w, https://substackcdn.com/image/fetch/$s_!m4gy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.png 1272w, https://substackcdn.com/image/fetch/$s_!m4gy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m4gy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.png" width="1075" height="497" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:497,&quot;width&quot;:1075,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:107151,&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_!m4gy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.png 424w, https://substackcdn.com/image/fetch/$s_!m4gy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.png 848w, https://substackcdn.com/image/fetch/$s_!m4gy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.png 1272w, https://substackcdn.com/image/fetch/$s_!m4gy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde946eaf-f86a-4e99-9072-39aaa3c9fc81_1075x497.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>Install this custom script with <a href="https://www.tampermonkey.net/">TamperMonkey</a>.</p><pre><code>// ==UserScript==
// @name         Dark HN
// @match        https://news.ycombinator.com/*
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Create a style element
    const style = document.createElement('style');
    style.innerHTML = `
        body {
            background: #111 !important;
            filter: saturate(0) invert(1) hue-rotate(180deg) !important;
        }
        td {
            background: #ccc !important;
        }
        img {
            filter: saturate(0) !important;
        }
    `;

    // Append the style element to the head
    const head = document.head || document.getElementsByTagName('head')[0];
    if (head) {
        head.appendChild(style);
    } else {
        // If the head element is not available yet, use a MutationObserver to wait for it&#8230;</code></pre>
      <p>
          <a href="https://codefaster.substack.com/p/hackernews-darkmode">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Don't use pre-commit hooks]]></title><description><![CDATA[A couple of companies ago, I had a report that wanted to prettify our whole codebase.]]></description><link>https://codefaster.substack.com/p/dont-use-pre-commit-hooks</link><guid isPermaLink="false">https://codefaster.substack.com/p/dont-use-pre-commit-hooks</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Fri, 26 Jul 2024 19:42:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A couple of companies ago, I had a report that wanted to prettify our whole codebase. His idea? Prettier in pre-commit hooks! That way, you write, commit and it&#8217;s pretty. Pretty awesome right&#8230;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Nope.</p><p>This works in a narrow use case. You write a change and <em>commit everything you just wrote</em>.  This is, in my experience is not at all how I use git. I&#8217;ll make a bunch of changes and commit&#8230;some of them. There&#8217;s 2 reasons I do this:</p><ul><li><p> I&#8217;ll never commit some changes like adding logs, custom builds, removing flaky tests</p></li><li><p>I break up my changes into lots of small commits. Often times my creation process is super messy. I don&#8217;t really know what I&#8217;m doing until it&#8217;s done. But once it&#8217;s done, then it&#8217;s clear how to break the change up into bite size commits to make a clean history that&#8217;s easier to bisect and analyze for future developers.</p></li></ul><p>Prettier sadly works on not the diff bu&#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/dont-use-pre-commit-hooks">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[PostGres is enough, but is it fast to code?]]></title><description><![CDATA[Digging into the examples, there&#8217;s two separate claims in which &#8220;PSQL is enough&#8221; according to today&#8217;s top post on HN.]]></description><link>https://codefaster.substack.com/p/postgres-is-enough-but-is-it-fast</link><guid isPermaLink="false">https://codefaster.substack.com/p/postgres-is-enough-but-is-it-fast</guid><dc:creator><![CDATA[Tyler Adams]]></dc:creator><pubDate>Tue, 06 Feb 2024 14:46:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc21d3e2d-bc9d-401f-bbe8-225d0d0643d9_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Digging into the examples, there&#8217;s two separate claims in which &#8220;PSQL is enough&#8221; according to today&#8217;s top post on <a href="https://gist.github.com/cpursley/c8fb81fe8a7e5df038158bdfe0f06dbb">HN</a>.</p><ol><li><p>PSQL can handle all your data</p></li><li><p>PSQL can handle all your data operations</p></li></ol><h1>A simple difference</h1><p>The difference between data and operations can be explained with two examples:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://codefaster.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CodeFaster is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>example 1 I need to store customer records and have a message queue for incoming requestions. I could do it in psql for storage and redis for queuing, or just psql.</p><p>example 2 I need to store customer records and run a cron job on them daily. I could do it in psql for storage and use a system cron, or I could do cron within psql.</p><h1>PSQL can handle all your data</h1><p>The claim is you don&#8217;t need to use other dbs, you can do it all with psql.</p><p>This is <em>awesome</em> for a fast coder. You don&#8217;t need to use a different technology for things like nosql, graphql or message queuing. We can use one technol&#8230;</p>
      <p>
          <a href="https://codefaster.substack.com/p/postgres-is-enough-but-is-it-fast">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>