<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Bit Shift]]></title><description><![CDATA[Cutting your work hours in half. Productivity, Software, and latest AI trends.]]></description><link>https://www.bowtiedcrocodile.com</link><image><url>https://substackcdn.com/image/fetch/$s_!bwvb!,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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png</url><title>The Bit Shift</title><link>https://www.bowtiedcrocodile.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 01 May 2026 13:21:47 GMT</lastBuildDate><atom:link href="https://www.bowtiedcrocodile.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[BowTiedCrocodile]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[thebitshift@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[thebitshift@substack.com]]></itunes:email><itunes:name><![CDATA[BowTiedCrocodile]]></itunes:name></itunes:owner><itunes:author><![CDATA[BowTiedCrocodile]]></itunes:author><googleplay:owner><![CDATA[thebitshift@substack.com]]></googleplay:owner><googleplay:email><![CDATA[thebitshift@substack.com]]></googleplay:email><googleplay:author><![CDATA[BowTiedCrocodile]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How a Solo Developer Can Build a Software Empire]]></title><description><![CDATA[Introducing the Factory Architecture V1]]></description><link>https://www.bowtiedcrocodile.com/p/how-a-solo-developer-can-build-a</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/how-a-solo-developer-can-build-a</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Mon, 06 Apr 2026 14:00:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2R7M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg" 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_!2R7M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2R7M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2R7M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2R7M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2R7M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2R7M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:187058,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.bowtiedcrocodile.com/i/193280865?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2R7M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2R7M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2R7M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2R7M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd11c7e1-08e8-4064-a5ef-68eab352e801_1376x768.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>For the first time a solo developer does not need a big team, a custom platform group, or months of internal tooling work to build a serious software delivery system.</p><p>You can bootstrap your own self hosted platform now.</p><p>Not because infrastructure suddenly got simple, and not because AI magically removes engineering discipline, but because modern coding agents make the hard parts of bootstrapping much easier. They can help you write the docs, shape the repo contracts, generate the scripts, wire up CI/CD, clean up infrastructure code, and keep pushing work forward while you focus on the real bottlenecks.</p><p>That is the shift.</p><p>You no longer need to design a giant &#8220;AI-native development platform&#8221; before you get value. You can start with one agent, one terminal, one control repo, and one real application. From there, the agent helps you build the very system it will later operate inside.</p><p>That is what makes this pattern so powerful: it is not heavy. It is not reserved for large teams. There is no vendor lock in who vision isn&#8217;t aligned. It is an agent-first way for a single developer to stand up a practical, self-hosted software factory without drowning in platform work first. The entire system is portable and customizable to your beliefs.</p><p>The goal is not to build the perfect system on day one. The goal is to get unblocked, get a working foundation in place, and let AI help you bootstrap the rest.</p><h2>What a personal software factory actually is</h2><p>A personal software factory is a text-defined, terminal-operated, self-hosted software delivery system. In the model I recommend, <strong>code and markdown are the source of truth</strong>, <em>GitLab</em> is the control plane, the <em>terminal</em> is the execution surface, <em>Terraform</em> defines infrastructure with <em>Cloudflare</em> as traffic control, a <em>secret manager</em> handles credentials, and <em>coding agent(s) </em>like Codex or Claude Code acts as the worker inside the system.</p><p>That sounds bigger than it is.</p><p>At the start, you do <strong>not</strong> need a giant platform team setup. You do <strong>not</strong> need a fleet of specialist agents. You do <strong>not</strong> need a custom web dashboard. You do <strong>not</strong> need to sandbox everything from day one. You do <strong>not</strong> need a perfect project-management layer on day one.</p><p>What you need is a setup where:</p><ul><li><p>the agent can read the repo, docs, and scripts</p></li><li><p>the agent can work in a terminal you control</p></li><li><p>the control plane validates and ships the real changes</p></li><li><p>important actions leave evidence</p></li><li><p>production is gated by policy, not vibes</p></li></ul><p>That is enough to get started. We are building the platform to ship code.</p><h2>The mistake people make</h2><p>The most common mistake is overbuilding the control system before unblocking the work.</p><p>People jump straight to questions like:</p><ul><li><p>Should I have planner agents, reviewer agents, QA agents, and release agents?</p></li><li><p>Do I need containers, VMs, and ephemeral runners everywhere?</p></li><li><p>Should I build a custom orchestration dashboard?</p></li><li><p>Do I need perfect observability before the first agent session?</p></li></ul><p>Those are later questions.</p><p>Your first goal is much simpler:</p><p><strong>Get one capable coding agent doing real work inside a controlled, text-defined workflow.</strong></p><p>That is the bootstrapping problem.</p><h2>Start with one agent type, not a zoo</h2><p>One of the strongest ideas in the factory model is the single-agent-first approach. One primary coding agent type should be enough to plan, implement, review, run local checks, prepare merge requests, and follow the release path through the control plane. Specialized agents may be useful later for scale or isolation, but they are not the starting requirement.</p><p>This matters because most early AI workflows fail from unnecessary complexity, not lack of sophistication.</p><p>If one agent can:</p><ul><li><p>read your issue</p></li><li><p>inspect your docs</p></li><li><p>modify code</p></li><li><p>run local checks</p></li><li><p>open an MR</p></li><li><p>respond to CI results</p></li><li><p>update a runbook</p></li></ul><p>Then you already have something valuable.</p><h2>Your first version should be terminal-first and boring</h2><p>You do not need a fancy runtime to begin.</p><p>A practical v1 looks like this:</p><ul><li><p>the human runs the coding agent in a terminal</p></li><li><p>that terminal is on a trusted laptop or trusted SSH-accessible host</p></li><li><p>the scope is the repo, worktree, Unix user, host network reach, and documented policy</p></li><li><p>repo state and host caches can persist</p></li><li><p>durable knowledge lives in repos, docs, CI artifacts, and runbooks, not the model&#8217;s memory</p></li><li><p>skills that make agentic use easier</p></li></ul><p>That host-shell-first model is not a compromise. It is the easiest setup to supervise, debug, and improve.</p><p>A lot of people try to begin with hard sandboxing, clean-room runners, custom dashboards, and multi-agent orchestration. That is usually premature. The first milestone is not &#8220;perfect isolation.&#8221; The first milestone is &#8220;the agent can actually help me ship.&#8221; The vision of your factory will become clearer as you take more action, and then you can tailor it to your needs.</p><h2>Make the control plane authoritative</h2><p>This is the most important design decision.</p><p>Let the agent iterate locally. Let it run tests. Let it inspect logs. Let it draft infrastructure changes. But do <strong>not</strong> treat the terminal session as the source of truth.</p><p>The control plane should own the authoritative workflow:</p><ul><li><p>build and deployment pipelines</p></li><li><p>CI validation</p></li><li><p>protected branch rules</p></li><li><p>approvals</p></li><li><p>infrastructure plan/apply</p></li><li><p>quality control gates</p></li><li><p>release flow</p></li><li><p>audit evidence</p></li></ul><p>In practice, that means:</p><ul><li><p>&#8220;local checks passed&#8221; is helpful, but not sufficient</p></li><li><p>&#8220;the agent says it&#8217;s ready&#8221; is not enough</p></li><li><p>&#8220;GitLab pipeline passed all verification jobs and the environment gate approved&#8221; is what counts</p></li></ul><p>This is where a lot of agent setups go off the rails. They trust the local session too much and the system too little.  The agent builds and operates the factory. The factory controls what can actually be shipped out.</p><p>The specification below will be your definitive guide.</p><h2>The V1 Software Factory Specification</h2>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/how-a-solo-developer-can-build-a">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[AI Newsletter For CEOs - 3/13/2026]]></title><description><![CDATA[Editors Note: I&#8217;ve been experimenting with OpenClaw (paid article soon) to perform Cron Jobs.]]></description><link>https://www.bowtiedcrocodile.com/p/ai-newsletter-for-ceos-3132026</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/ai-newsletter-for-ceos-3132026</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Fri, 13 Mar 2026 16:38:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vFj3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Editors Note:</em> I&#8217;ve been experimenting with OpenClaw (paid article soon) to perform Cron Jobs. One of those scheduled jobs I wanted was a summary and synthesis of the a variety AI news since AI is moving at light speed and it&#8217;s hard to grab everything. I&#8217;ve been posting these on X but also want to trial these on this Substack. If you find this useful, please like or leave a comment. I may move this to another publication to reduce noise here, or put it here, or keep on X. It all depends on the feedback and data.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vFj3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vFj3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!vFj3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!vFj3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!vFj3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vFj3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp" width="1456" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:223760,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.bowtiedcrocodile.com/i/190852263?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vFj3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!vFj3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!vFj3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!vFj3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f509c8-ca99-4fa5-a409-de202c0e020a_1792x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>EXECUTIVE TAKE</strong></h3><p>The last 24 hours were more about AI infrastructure, control, and commercialization than about flashy frontier-model launches.</p><p>The clearest signals were:</p><ul><li><p>Open models are becoming a strategic hardware and ecosystem play, not just an &#8220;open source&#8221; talking point</p></li><li><p>Agent stacks are standardizing around interoperability, evals, and budget control</p></li><li><p>Safety/reliability work is getting more operational, especially around prompt injection and instruction priority</p></li><li><p>AI policy is now directly shaping procurement and revenue, not just regulation headlines</p></li></ul><p>Notably, no major same-day closed-model launch dominated the window. The model story was NVIDIA&#8217;s expanding open-weight push, with Nemotron 3 Super serving as the most relevant recent anchor.</p><h3><strong>TOP DEVELOPMENTS</strong></h3><p><em>NVIDIA hardens its open-model strategy around Nemotron 3 Super</em></p><ul><li><p>Filing-based reporting says NVIDIA plans to invest $26 billion over five years in open-weight AI models. Its current flagship here is Nemotron 3 Super: a 120B-total / 12B-active hybrid Mamba-Transformer MoE model with up to 1M-token context, open checkpoints, datasets, and training recipes.</p></li><li><p>Why it matters: This is bigger than one model. NVIDIA is using open weights to strengthen its full-stack position: chips, software, inference, and developer lock-in. It also signals a stronger Western response to the pace of Chinese open-model releases.</p></li><li><p>Sources: <a href="https://research.nvidia.com/labs/nemotron/Nemotron-3-Super/">https://research.nvidia.com/labs/nemotron/Nemotron-3-Super/</a> ; <a href="https://the-decoder.com/nvidia-steps-into-the-open-source-ai-gap-that-openai-meta-and-anthropic-left-behind/">https://the-decoder.com/nvidia-steps-into-the-open-source-ai-gap-that-openai-meta-and-anthropic-left-behind/</a></p></li></ul><p><em>A2A Protocol ships v1.0</em></p><ul><li><p>The Agent-to-Agent protocol reached its first stable release, adding enterprise-oriented features including signed Agent Cards, multi-tenancy, version negotiation, and support across JSON+HTTP, gRPC, and JSON-RPC. The spec explicitly positions A2A as complementary to MCP, not a replacement.</p></li><li><p>Why it matters: This is one of the strongest signs yet that multi-agent systems are moving toward an interoperability layer rather than staying trapped in vendor-specific silos.</p></li><li><p>Source: <a href="https://a2a-protocol.org/latest/announcing-1.0/">https://a2a-protocol.org/latest/announcing-1.0/</a></p></li></ul><p><em>OpenAI publishes IH-Challenge and ties safety training directly to agent reliability</em></p><ul><li><p>OpenAI published new work on instruction hierarchy and released the IH-Challenge dataset. The reported gains include better resistance to prompt injection in tool outputs and better handling of conflicting system/developer/user/tool instructions, with minimal capability regressions.</p></li><li><p>Why it matters: This goes straight to the heart of agent deployment. As agents read web pages, parse tools, and take actions, instruction priority and prompt-injection resistance become core production requirements, not academic nice-to-haves.</p></li><li><p>Source: <a href="https://openai.com/index/instruction-hierarchy-challenge/">https://openai.com/index/instruction-hierarchy-challenge/</a></p></li></ul><p><em>Anthropic&#8217;s Pentagon fight becomes a live procurement and revenue story</em></p><ul><li><p>Reuters reported that Anthropic asked an appeals court to stay the Pentagon&#8217;s supply-chain-risk designation, warning the move could cost hundreds of millions to multiple billions of dollars in 2026 revenue. Reuters also reported the Pentagon CTO said there was &#8220;no chance&#8221; of renewed negotiations.</p></li><li><p>Why it matters: AI guardrails are now materially affecting defense access, enterprise confidence, and vendor selection. This is policy turning into procurement power.</p></li><li><p>Sources: <a href="https://www.reuters.com/technology/anthropic-seeks-court-stay-pentagon-supply-chain-risk-designation-2026-03-12/">https://www.reuters.com/technology/anthropic-seeks-court-stay-pentagon-supply-chain-risk-designation-2026-03-12/</a> ; <a href="https://www.reuters.com/technology/pentagon-cto-says-no-chance-renewed-anthropic-negotiations-cnbc-interview-2026-03-12/">https://www.reuters.com/technology/pentagon-cto-says-no-chance-renewed-anthropic-negotiations-cnbc-interview-2026-03-12/</a></p></li></ul><p><em>Grammarly pulls its author-impersonation AI feature after backlash</em></p><ul><li><p>Grammarly/Superhuman removed its &#8220;Expert Review&#8221; feature after backlash and litigation over AI personas modeled on named writers and experts, including Stephen King and Carl Sagan. The CEO publicly apologized and said the approach would be redesigned.</p></li><li><p>Why it matters: Identity, consent, and &#8220;persona rights&#8221; are becoming direct product and legal risks. Expect tighter scrutiny on voice/style simulation features across consumer and enterprise AI products.</p></li><li><p>Source: <a href="https://www.bbc.com/news/articles/cx28v08jpe7o">https://www.bbc.com/news/articles/cx28v08jpe7o</a></p></li></ul><h3><strong>PATTERN SIGNALS</strong></h3><ul><li><p>Interoperability is becoming its own layer. A2A v1.0 formalizes agent-to-agent communication, while newer tools like Mozzie lean on ACP/CLI orchestration for multi-agent coding workflows. The stack is separating into: MCP for tools/context, A2A for agent coordination, and local orchestrators on top. Sources: <a href="https://a2a-protocol.org/latest/announcing-1.0/">https://a2a-protocol.org/latest/announcing-1.0/</a> ; <a href="https://github.com/usemozzie/mozzie">https://github.com/usemozzie/mozzie</a></p></li><li><p>Public benchmark theater is losing credibility. Cursor&#8217;s latest write-up argues public coding benchmarks are increasingly saturated, contaminated, or misaligned, and says real-session offline evals plus live online evals track developer value better. That is where serious buyers should expect the market to move. Sources: <a href="https://cursor.com/blog/cursorbench">https://cursor.com/blog/cursorbench</a> ; <a href="https://news.ycombinator.com/item?id=47364669">https://news.ycombinator.com/item?id=47364669</a></p></li><li><p>Cost control is now a product feature, not a finance afterthought. Prompt-caching tools are pitching token savings as a headline value proposition, while agent platforms like Argus expose hourly/daily token budgets and reserve capacity for high-priority investigations. Sources: <a href="https://prompt-caching.ai/">https://prompt-caching.ai/</a> ; <a href="https://github.com/flightlesstux/prompt-caching">https://github.com/flightlesstux/prompt-caching</a> ; <a href="https://github.com/precious112/Argus">https://github.com/precious112/Argus</a></p></li><li><p>Human approval remains a winning design pattern for operational agents. Argus explicitly uses autonomous investigation plus approve-before-execute remediation. That hybrid pattern continues to look like the most enterprise-ready path for infrastructure, security, and workflow agents. Source: <a href="https://github.com/precious112/Argus">https://github.com/precious112/Argus</a></p></li><li><p>Open weights are increasingly strategic rather than ideological. NVIDIA&#8217;s open-model posture appears aimed at keeping developers and enterprises inside its compute ecosystem. Expect more &#8220;open enough to attract builders, optimized enough to favor my stack&#8221; behavior from major vendors. Sources: <a href="https://research.nvidia.com/labs/nemotron/Nemotron-3-Super/">https://research.nvidia.com/labs/nemotron/Nemotron-3-Super/</a> ; <a href="https://the-decoder.com/nvidia-steps-into-the-open-source-ai-gap-that-openai-meta-and-anthropic-left-behind/">https://the-decoder.com/nvidia-steps-into-the-open-source-ai-gap-that-openai-meta-and-anthropic-left-behind/</a></p></li></ul><h3><strong>AI BUSINESS NEWS</strong></h3><ul><li><p>Credible but not independently confirmed by ByteDance: Reuters, citing the Wall Street Journal, said ByteDance is building offshore AI capacity in Malaysia via Aolani Cloud, reportedly around 500 NVIDIA Blackwell systems or roughly 36,000 B200 chips, with likely cost above $2.5 billion. If accurate, this is a major export-control and competitive signal. Source: <a href="https://www.reuters.com/world/asia-pacific/chinas-bytedance-gets-access-top-nvidia-ai-chips-wsj-reports-2026-03-13/">https://www.reuters.com/world/asia-pacific/chinas-bytedance-gets-access-top-nvidia-ai-chips-wsj-reports-2026-03-13/</a></p></li><li><p>NVIDIA&#8217;s GTC preview is already framing next week&#8217;s narrative around agentic AI, inference, physical AI, and open models. It also highlighted &#8220;Build-a-Claw&#8221; and an OpenClaw playbook for local-first agents on DGX Spark, a sign that always-on personal/workflow agents are moving into mainstream conference positioning. Source: <a href="https://blogs.nvidia.com/blog/gtc-2026-news/">https://blogs.nvidia.com/blog/gtc-2026-news/</a></p></li><li><p>OpenAI Developers posted a high-engagement Codex app update on X, highlighting new personalization options including theme import/share. It is a small product change, but it reinforces continued investment in persistent developer-agent UX rather than just model endpoints. Source: </p></li></ul><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://x.com/OpenAIDevs/status/2032222631538409728&quot;,&quot;full_text&quot;:&quot;We&#8217;ve been cooking.\n\n2 updates in the Codex app &#128071;\n\nYou can now personalize the Codex app with themes that match your taste.\n\nImport themes you like or share your own. &quot;,&quot;username&quot;:&quot;OpenAIDevs&quot;,&quot;name&quot;:&quot;OpenAI Developers&quot;,&quot;profile_image_url&quot;:&quot;https://pbs.substack.com/profile_images/2022002720971096064/l3Kyt4qt_normal.jpg&quot;,&quot;date&quot;:&quot;2026-03-12T22:30:06.000Z&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/HDPnsekbQAEYNFP.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/xOg9vzFxh1&quot;},{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/HDPns1XaAAA94YD.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/xOg9vzFxh1&quot;},{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/HDPntL1bQAAL4pj.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/xOg9vzFxh1&quot;},{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/HDPntivbQAAxDM0.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/xOg9vzFxh1&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:244,&quot;retweet_count&quot;:108,&quot;like_count&quot;:2585,&quot;impression_count&quot;:494137,&quot;expanded_url&quot;:null,&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><ul><li><p>Useful tools/software flow remained strong on HN and GitHub:prompt-caching: Anthropic prompt-cache observability and automatic breakpoint placement. </p><ul><li><p>Mozzie: local-first desktop orchestrator for Codex, Claude Code, and Gemini using worktrees and parallel agents. </p><ul><li><p>Sources: </p><ul><li><p><a href="https://github.com/usemozzie/mozzie">https://github.com/usemozzie/mozzie</a></p></li><li><p><a href="https://news.ycombinator.com/item?id=47355451">https://news.ycombinator.com/item?id=47355451</a></p></li></ul></li></ul></li><li><p>chat.nvim v1.4.0: Neovim assistant adding Anthropic, Gemini, Ollama, and chat bridge integrations. </p><ul><li><p>Sources: </p><ul><li><p><a href="https://github.com/wsdjeg/chat.nvim/releases/tag/v1.4.0">https://github.com/wsdjeg/chat.nvim/releases/tag/v1.4.0</a></p></li><li><p><a href="https://news.ycombinator.com/item?id=47363926">https://news.ycombinator.com/item?id=47363926</a></p></li></ul></li></ul></li><li><p>Argus: open-source observability agent with ReAct-based anomaly investigation, human approval, and token budgets. </p><ul><li><p>Sources: </p><ul><li><p><a href="https://github.com/precious112/Argus">https://github.com/precious112/Argus</a></p></li><li><p><a href="https://news.ycombinator.com/item?id=47364724">https://news.ycombinator.com/item?id=47364724</a></p></li></ul></li></ul></li></ul></li></ul><h3><strong>WATCH ITEMS</strong></h3><ul><li><p>ByteDance/NVIDIA offshore compute: credible report, but still a second-hand report and a likely magnet for export-control scrutiny. Source: <a href="https://www.reuters.com/world/asia-pacific/chinas-bytedance-gets-access-top-nvidia-ai-chips-wsj-reports-2026-03-13/">https://www.reuters.com/world/asia-pacific/chinas-bytedance-gets-access-top-nvidia-ai-chips-wsj-reports-2026-03-13/</a></p></li><li><p>A2A adoption velocity: v1.0 matters only if major vendors and enterprise platforms actually ship around it. Watch for SDKs, hosted runtimes, and cloud workflow support in the next few weeks. Source: <a href="https://a2a-protocol.org/latest/announcing-1.0/">https://a2a-protocol.org/latest/announcing-1.0/</a></p></li><li><p>Anthropic/Pentagon spillover: the core question is whether this remains a defense-specific dispute or starts influencing broader commercial procurement and trust assessments. Sources: Reuters links above.</p></li><li><p>GTC next week: NVIDIA has clearly pre-positioned agentic AI and open models as central themes. More concrete announcements are likely imminent. Source: <a href="https://blogs.nvidia.com/blog/gtc-2026-news/">https://blogs.nvidia.com/blog/gtc-2026-news/</a></p></li></ul><h3><strong>BOTTOM LINE</strong></h3>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/ai-newsletter-for-ceos-3132026">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Powering Up Your Agentic Coding Levels]]></title><description><![CDATA[Building A Terminal Based Multi Project Agentic Coding Interface]]></description><link>https://www.bowtiedcrocodile.com/p/powering-up-your-agentic-coding-levels</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/powering-up-your-agentic-coding-levels</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Mon, 19 Jan 2026 21:51:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8cTk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11213be0-be77-48eb-a8ab-da74f4ef6769_2446x1444.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><em>&#8220;There&#8217;s levels to this&#8221; </em>- Meek Mill</p></blockquote><p>That&#8217;s my current belief of Agentic Coding right now. For every new person still painstakingly working in IDEs instructing their Agent one file at a time, there are people who have entire automated coding workflows going on right now (just check out <a href="https://github.com/clawdbot/clawdbot">clawdbot</a> or <a href="https://linear.app/ai">Linear</a>). We&#8217;ve hit escape velocity for Agentic Coding as we can scale coding agents that are high quality right now. Not enough people have noticed, but the successful people, the people who know how to pivot and be consistently productive, have noticed and are now building 12 coding projects around the clock with minimal oversight. </p><p>This article will introduce how to run multiple projects semi-autonomously all in the terminal and require just basic prompting to accomplish our project goals. This gets our Codex skills upgraded from beginner to intermediate, with room to run to expert as you scale agents out. By the end you&#8217;ll have:</p><ul><li><p>one bash script = full workspace interface setup</p></li><li><p>one zellij tab = one organized project context to work in</p></li><li><p>notifications when the agent finishes its work</p></li><li><p>global agent rules so every repo behaves the same</p></li></ul><p>We&#8217;ve previously talked about getting started with OpenAI&#8217;s Agentic Coder in Codex, if you have not read it, check it out first.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;edeb3392-ac9f-4d6c-a232-33298105c21f&quot;,&quot;caption&quot;:&quot;If you have wanted to start agentic coding and don&#8217;t know where to start, this is the place for you. There are so many coding agents now that it&#8217;s confusing where to start and what offers you the best capabilities. As we speak now, there are agentic interfaces that have already shuttered in this competitive market, but there are many standouts that are at their peak. We are going to use OpenAI&#8217;s Codex, learn how to use the tool, and then take a coding project from idea to a design, and then have Codex implement it.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Getting Started with Agentic Coding with OpenAI's Codex&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-12-16T02:29:12.829Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!yTRF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/getting-started-with-agentic-coding&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:181385326,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:364730,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bwvb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>In this article I am going to share my simple terminal and shell setup with Codex that will help optimize your setup so that it scales up to build multiple projects at once. We will be building a terminal based workflow that has an easy load UI using Zellij to load all CLI tools into the same Tab and then having multiple tabs per Vibe\Agentic coded project. We will tweak Codex a bit more with better configuration so that it operates better across projects. Then I will show you a small project I made for Mac that gives native notifications when Codex finishes its turn. Let&#8217;s begin.</p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/powering-up-your-agentic-coding-levels">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Getting Started with Agentic Coding with OpenAI's Codex]]></title><description><![CDATA[The Fastest Way to Get Started With Agentic Coding]]></description><link>https://www.bowtiedcrocodile.com/p/getting-started-with-agentic-coding</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/getting-started-with-agentic-coding</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Tue, 16 Dec 2025 02:29:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yTRF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you have wanted to start agentic coding and don&#8217;t know where to start, this is the place for you. There are so many coding agents now that it&#8217;s confusing where to start and what offers you the best capabilities. As we speak now, there are agentic interfaces that have already shuttered in this competitive market, but there are many standouts that are at their peak. We are going to use OpenAI&#8217;s Codex, learn how to use the tool, and then take a coding project from idea to a design, and then have Codex implement 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_!yTRF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yTRF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!yTRF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!yTRF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!yTRF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yTRF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp" width="382" height="382" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:382,&quot;bytes&quot;:248826,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.bowtiedcrocodile.com/i/181385326?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yTRF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!yTRF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!yTRF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!yTRF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3ebc5ae-be49-464f-98d7-03b63d924346_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Your agentic coding buddy</figcaption></figure></div><p>Learning these tools will transform your productivity as a solo creator into a one man army when it comes to building out projects rapidly. Let&#8217;s get started.</p><h2>Open AI Codex</h2><p>I&#8217;ve recently checked out OpenAI Codex since I really enjoy using ChatGPT as my main source of technical answers, troubleshooting, high level planning, and detailed implementation designs. I&#8217;ve found for a few years now that OpenAI makes their tools fairly consistent and high quality when it comes to programming implementation, and the release of their CLI interface for Codex inspired me to finally dive into CLI based agentic coding, where before I was using integrated extensions in my visual studio code like Roo Code and Github Copilot. This was a more recent development, and after trying it to port a few projects between languages, I was really shocked how incredible the tool was. I had a NodeJs project that was a proof of concept and experimental, and I ported it to C# and refactored the database layer with it. With all this, I have a new project running on a much cleaner design and I did it all with Codex doing 95% of the work.</p><p>As far as the benefits from CLI based agentic coding vs some sort of GUI, I can&#8217;t fully explain if there is a major benefit from a technical perspective. However I do find that most 1st party apps the experience is generally better than a 3rd party approach, especially as we are still in the storming phase of agentic coding. OpenAI has integrated Codex tightly with their AI models and I&#8217;d imagine there is an efficiency in there from a model and model use perspective. While I do love Roo Code and it&#8217;s incredible feature set, it does also seem to chew through tokens a bit inefficiently it seems, and since I use OpenRouter as the provider which means I cost myself a lot of money in token usage. To me, something with tool usage and file system browsing seems to be better in Codex and is also more efficient on token usage, which matters if you start scaling your Codex use since every token is a direct cost to your wallet.</p><p>As far as CLI vs Non CLI, the CLI experience is really sublime and saying CLI is a bit disingenuous to what the full experience is. Codex is essentially a full on application just presented in the terminal for you. I find it beautiful and simple in its display and feedback of what it is working on. It&#8217;s a real pleasure to use and since it&#8217;s terminal based, you don&#8217;t have a lock in with VS Code or another IDE&#8217;s custom GUI interface, and it&#8217;s highly portable and universal, being just a nodejs application. I&#8217;ve never felt limited in it being a terminal application ever since using it, since all it really is is a glorified chat session.There&#8217;s also some sort of brain switch that happens when coding when you&#8217;re going through the command line versus your Visual Studio Code that maybe makes you think better or differently. Hard to explain but it&#8217;s the same reason some people work better at a designated work desk versus a random table somewhere. I&#8217;ve mentioned in previous articles I feel it&#8217;s important to cultivate a location as a productive zone with the corresponding aesthetic, and this is just an extension of that, just in a virtual world rather than physical.</p><p>Before we get started, even if you don&#8217;t use Codex, there are some general software engineering patterns below that will help any agentic coder (ex: Claude Code), even if you use a different agent to perform the work. A lot of what we discuss is further on  is really just the engineering design mindset applied, and that is universal regardless of who or what codes the software.</p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/getting-started-with-agentic-coding">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Lessons from the Homelab]]></title><description><![CDATA[How to remove dependency on the Cloud and learn to love the containers]]></description><link>https://www.bowtiedcrocodile.com/p/lessons-from-the-homelab</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/lessons-from-the-homelab</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Thu, 06 Nov 2025 02:24:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eL2M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp" 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_!eL2M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eL2M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!eL2M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!eL2M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!eL2M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eL2M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:531650,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.bowtiedcrocodile.com/i/177829682?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eL2M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!eL2M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!eL2M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!eL2M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972bb599-74d8-4fa8-8b7b-40407ad6b6fd_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Homelabs are a continuous journey with frequent waypoints and rarely have a final stopping point.</p><p>This is my main takeaway from the last year of building out my own personal cloud setup at home. What is time consuming, annoying, and frustrating eventually turns into a great reward when systems are in place. Once you hit a critical threshold of work put into the homelab, everything else suddenly slots into place and what becomes a time sink becomes a positive feedback system, where everything builds on itself to becomes a self sufficient aid to your everyday digital life.</p><p>I started a homelab journey over a year ago when deciding to build out a NAS along with an AI Server. You can see the results of that here: </p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;8cd01824-1669-40de-916d-36d0c1ee9e28&quot;,&quot;caption&quot;:&quot;Recently I&#8217;ve documented on X my journey towards building a NAS and AI Rig and that ended up with me building two computers to support those workflows more optimally. My brand new NAS I built is now running UnRaid with 40TBs of storage and multiple services such as an RDP server, SMB storage, Jellyfin, and more to bring control my into my life with these services all on my own hardware. It has automated backups and SSDs to speed up storage before moving to Disk. My AI server was just a modest upgrade, keeping the 3090 GPU but upgrading all the other 7+ year old equipment, new motherboard, CPU, power supply, RAM, and fan. Both are now working well enough to share out the results.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building A NAS and AI Server - Part 1&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-11-26T23:15:00.844Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!I-tC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/building-a-nas-and-ai-server-part&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:151626997,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:1,&quot;publication_id&quot;:364730,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bwvb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Since then I have added new hardware and software to my deployments and now feel like my homelab is now a net benefit over the amount of time I spent setting everything up. This was a major relief, since those weekend days and nights felt almost pointless at times, often stuck on the command line configuring something that wouldn&#8217;t work, ready to pay the $10 per month for life tithe to the SaaS gods for a comfy day. However I stuck with it, and like most things, the breakthrough does happen and the information crystallizes into actual knowledge, which then lets you execute. That&#8217;s why a homelab is for, making your life better, whether it&#8217;s for entertainment or for data sovereignty.</p><p>I recently realized the power of my setup when I was playing around with my <a href="https://meshtastic.org/">Meshtastic</a> radios and needed a MQTT server to demo thing that functionality out. I realized I can just deploy a docker container on my unRaid box in a few seconds, setup the radio to communicate over my bluetooth to the MQTT container, and then hook up a client on my Mac to check out the traffic. It didn&#8217;t work perfectly, but I was able to take an idea into action in just a few minutes with my network setup easily accommodating. I didn&#8217;t have to sign up for some service or give away my personal info or data for any of this.</p><p>Another example was getting Telegraf setup on my AI server for hardware metrics shown over Grafana. I wanted a nice dashboard I could use to monitor my CPU, RAM, and GPU usage when gaming or running AI inference. I installed Telegraf on my Desktop to ship the data, configured InfluxDB for a time series db, and then visualized with Grafana, all as docker containers to take the data and process it. In a few hours I had full metrics being shipped on my personal devices with all the flexibility Grafana gives to query and display data in beautiful ways. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pyLG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pyLG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png 424w, https://substackcdn.com/image/fetch/$s_!pyLG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png 848w, https://substackcdn.com/image/fetch/$s_!pyLG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png 1272w, https://substackcdn.com/image/fetch/$s_!pyLG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pyLG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png" width="1456" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:729210,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.bowtiedcrocodile.com/i/177829682?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pyLG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png 424w, https://substackcdn.com/image/fetch/$s_!pyLG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png 848w, https://substackcdn.com/image/fetch/$s_!pyLG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png 1272w, https://substackcdn.com/image/fetch/$s_!pyLG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec5f7214-5ba9-422c-baa1-4146ded0662c_4958x1744.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">My Grafana Dashboard for a Windows Desktop</figcaption></figure></div><p>The key to everything here is set it and forget it automation, diligent note taking, a healthy dose of AI troubleshooting, of course docker containers. Once I got these practices down, it was easy to expand the setup more and not stress about maintenance burdens. I don&#8217;t spend a ton of time on the lab now and mostly just use the applications I have, but I can expand capabilities if needed once I find a new idea or niche to explore into. Even when I do spend time on it, it&#8217;s now fun! I have a true self hosted platform that I enjoy tinkering with.</p><p>Homelabs can take many shapes and sizes, so everything I offer here won&#8217;t be perfect for your situation, but I hope you can learn a few things and implement them on your own end, or even inspire you to start your homelab journey.</p><p>Let&#8217;s dive into the key takeaways on how to make our lives easier.</p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/lessons-from-the-homelab">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Framework Computers are Mainstream]]></title><description><![CDATA[Framework Computers bring modularity to personal laptops to combat Apple MacBooks]]></description><link>https://www.bowtiedcrocodile.com/p/framework-computers-are-mainstream</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/framework-computers-are-mainstream</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Thu, 09 Oct 2025 01:33:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MC5p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Since the launch of the M series of Apple Silicon Apple has held an immense advantage on portable laptops due to the integrated structure of their system on a chip &#8212; Apple Silicon. It combines CPUs, GPUs, NPUs, along with System Memory in a unified architecture that enables AI, gaming, and many other general PC tasks at efficient power usages with excellent performance. Apple has gone mostly unchallenged for 4 years, but with the launch of the new AMD <a href="https://www.amd.com/en/partner/articles/ryzen-ai-300-series-processors.html">Ryzen AI</a> line there is a now a new System On A Chip board with large manufacturer availability for the general market and computer manufacturers are already taking advantage.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MC5p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MC5p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!MC5p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!MC5p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!MC5p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MC5p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1661179,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.bowtiedcrocodile.com/i/172439390?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MC5p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!MC5p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!MC5p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!MC5p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17dc175f-537d-4cab-821f-c7a51fb70592_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/framework-computers-are-mainstream">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Running AI Locally With Llama.cpp]]></title><description><![CDATA[From Nothing to Running Local AI and Serving Over the Network to VS Code and AnythingLLM]]></description><link>https://www.bowtiedcrocodile.com/p/running-ai-locally-with-llamacpp</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/running-ai-locally-with-llamacpp</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Sun, 26 Jan 2025 13:53:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Q0Oy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp" 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_!Q0Oy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q0Oy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!Q0Oy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!Q0Oy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!Q0Oy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q0Oy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:457322,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!Q0Oy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!Q0Oy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!Q0Oy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!Q0Oy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e528c02-6e3c-4152-b0ba-fa8f7fb30b35_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you need even more performance out of your Local AI then we need to shift to more powerful AI backends to run our models. More tokens per second means we can get answers faster and iterate sooner, letting us develop our knowledge, code, agents, or whatever else to do more in less time. I&#8217;ve strongly recommended Ollama to everyone here as it has the simplest setup starting from nothing for beginners and runs on Windows, Linux, and Mac easily and you don&#8217;t have to perfectly optimize it for your system, but for our next evolution we are going to use <a href="https://github.com/ggerganov/llama.cpp">Llama.cpp</a> to further enhance our AI performance and also gain access to more models on HuggingFace.</p><p>Llama.cpp is a project to create a faster backend for Facebook&#8217;s Llama based models written from the ground up in C++. It has many configurations and build options to suit a variety of hardware and generally performs inference faster, <strong><a href="https://www.restack.io/p/localai-answer-llama-cpp-vs-ollama-performance-cat-ai">up to 1.8 times</a> the performance</strong>. Additionally, if you are on Mac Llama.cpp supports the MLX framework as a primary goal, so this is ideal for you also for the best performance. While not as simple as Ollama, it offers access to a lot more models than Ollama does due to the HuggingFace community.</p><h3>Models and Quantization</h3><p>When new models are published on HuggingFace they are published with full precision 300GB+ safetensor files, but recent releases like DeepSeek R1 reached up to 600GB! These are not easily useable to the average consumer hardware public due to the size and the cost it would require to run them, so members of the community convert them to formats like GGUFs to make them smaller. The process of converting them to GGUFs allows other consumer backends to understand, like Ollama, llama.cpp, etc... In addition to changing the format they also <a href="https://huggingface.co/docs/optimum/main/en/concept_guides/quantization#quantization">quantize</a> them, meaning they strip away some of the precision of the model to lower the size of the model. This sacrifice of precision makes it so that the model can run on less powerful hardware, but gain the ability run the model on lower RAM as needed. Since most consumers don&#8217;t have server grade GPU clusters, we typically have to use these quantized models to run on our GPUS or Macs. </p><p>Think of this in terms of the music file formats. Music in .<a href="https://en.wikipedia.org/wiki/WAV">WAV</a> are fully uncompressed audio, meaning the highest quality, but as a result gives massive file sizes as they are uncompressed. This is good for audio engineers making music who have high end equipment, but not for the average music listener who might just listen on a bluetooth speaker. Even a conversion to <a href="https://en.wikipedia.org/wiki/FLAC">FLAC</a> saves an immense amount of space on disk without sacrificing the audio quality for the user via compression. We could keep compressing the audio down to .mp3s and most people might not notice the difference but also save GBs of space on their mobile device. This is similar to how quantization is, yet each stage of quantization is much more noticeable than the human ear is to music quality. Some models when quantized spit gibberish at high levels of quantization as that removes the precision needed to answer correctly. The Tensors or &#8220;weights&#8221; of the models are essentially just massive amounts of matrix multiplications, with each cell containing FP32 numbers as shown below.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DsX8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DsX8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png 424w, https://substackcdn.com/image/fetch/$s_!DsX8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png 848w, https://substackcdn.com/image/fetch/$s_!DsX8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png 1272w, https://substackcdn.com/image/fetch/$s_!DsX8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DsX8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png" width="1456" height="186" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:186,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;undefined&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="undefined" title="undefined" srcset="https://substackcdn.com/image/fetch/$s_!DsX8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png 424w, https://substackcdn.com/image/fetch/$s_!DsX8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png 848w, https://substackcdn.com/image/fetch/$s_!DsX8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png 1272w, https://substackcdn.com/image/fetch/$s_!DsX8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a1fb3a-9cd7-41ea-a6bf-2724efc72ea3_2880x367.png 1456w" sizes="100vw"></picture><div></div></div></a><figcaption class="image-caption">By Fresheneesz at the English Wikipedia project, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=3357169</figcaption></figure></div><p>As we quantize down, we start lopping off the precision of this number. When we perform inference on LLMs after sending them our text in chat, it essentially performs an operation chaining together the most likely answer using these matrix multiplications to figure out the &#8220;correct&#8221; response, based upon the weights. So less precise weights = less precise answers, generally speaking. But a good quantization can still result in excellent result for the average consumer, and that&#8217;s why so much effort goes into this and enables Local AI. A less precise model, even running locally, can still yield excellent results to enable whatever you wish to do. As a caveat, there are limits to the amount of quantization you can do when working with different models sizes as you can see in the first graph in this <a href="https://github.com/ggerganov/llama.cpp/pull/1684">post</a>. Basically the smaller the parameters of the models, the less useful it is to quantize to certain amounts. This is essentially diminishing returns in regards to the model&#8217;s trained parameters and the loss of precision tradeoff.</p><p>In regards to Ollama and LLama.cpp, both use the GGUF model format to work with their backend. LLama.cpp can directly use GGUFS, while Ollama has <a href="https://github.com/ollama/ollama/blob/main/docs/import.md#importing-a-gguf-based-model-or-adapter">another step</a> involving a <a href="https://github.com/ollama/ollama/blob/main/docs/modelfile.md">modelfile</a> and the GGUF that needs to be made, so that&#8217;s additional effort needed for someone to do and then upload specifically on Ollama&#8217;s site. The modelfile models after Dockerfiles, and you can see the layers being made as you download a model, so it&#8217;s essentially a layered file system combined with the GGUF. The modelfile encodes things like the default chat template, signatures, config parameters, and other things, so you&#8217;re sort of up to the mercy of the person who writes this model file, though I believe most things can be overridden at runtime, or reconfigured if needed. One key note is this is one way to set the context size of your model via <em>num_ctx</em>. Whoever makes this modelfile can set this parameter, meaning if you need high amounts of context, you must adjust this to get better context. Since there&#8217;s a default context of 2048, you might hit that limit easily by accident and not know!</p><p>This video below explains more of the modelfile process with Ollama.</p><div id="youtube2-aHhQvxwkuuw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;aHhQvxwkuuw&quot;,&quot;startTime&quot;:&quot;5s&quot;,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/aHhQvxwkuuw?start=5s&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>Since Ollama&#8217;s community is smaller then HuggingFace&#8217;s it will often take longer to get the model of your choice available if it&#8217;s new. The difference might be a few days, but if that matters to you then I would suggest to use Llama.cpp more. Additionally, add in quantization steps and it can be hard to get more specific models and their quants in Ollama available to you without getting your hands dirty. Backends like Llama.cpp will often have first dibs on newer models such as the recent DeepSeek R1 due to the massive amount of traffic HF gets and the large amount of users who are happy to quantize and upload models for us. HF also provides tools to do the quantization for you, making the process fast once a new model drops. Huggingface also contains many more models types and varieties than Ollama typically would. Add in the performance gains while trading some of the simplicity and you have a superior backend for hosting models in a more performany manner locally. I highly suggest if you want the best out of your models locally to switch over to a more performant backend such as Llama.cpp (or vLLM, exLlamav2), but that&#8217;s another post one day). Now that the differences between the two have been explained, lets go over setting up Llama.cpp.</p><h3>Running Llama.cpp From Scratch</h3><p>For this example we will be compiling Llama.cpp from scratch as a way to always get the latest features but more importantly understand how and why the software is built. Most of the time when we use a CLI tool, we don&#8217;t necessarily care about the underlying implementation or build process, but AI backends have many complexities when it comes to compiling for different hardware and their supported drivers/frameworks. This, along with the tuning model with config options will affect performance, that&#8217;s why I think it&#8217;s important to build it from scratch to learn much more about the software, otherwise you might get lost once you run into an issue.</p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/running-ai-locally-with-llamacpp">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The 2024 Bit Shift Review]]></title><description><![CDATA[Recapping Everything]]></description><link>https://www.bowtiedcrocodile.com/p/the-2024-bit-shift-review</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/the-2024-bit-shift-review</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Fri, 03 Jan 2025 17:30:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MUJe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>2024 saw the launch of my paid Substack, giving you advice on Productivity, AI, and Programming. If you read any of these articles you are already ahead of your peers who still work on tiny desks, 1 screen, and don&#8217;t know what ChatGPT is. Even reading 1 paid article here would have fully paid for your productivity gains from a yearly subscription by increasing your daily work efficiency. Me personally, I get my critical workload done in 3-6 hours now instead of your typical 8 hour workdays which allows to be higher earning on an hourly basis, and also get to the gym early and then work on Wifi money. Increasing your productivity has massive gains for your entire lifestyle and also creates a flywheel affect, since everything you do now is more efficient, opening more time to again be efficient.</p><p>When I first decided to launch a paid Substack, I was nervous and thought I was not good enough. But I decided to forge ahead and no matter what I knew I&#8217;d learn some things. It turns out I had a really strong reception to my articles talking about productivity enhancements such as below.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MUJe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MUJe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png 424w, https://substackcdn.com/image/fetch/$s_!MUJe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png 848w, https://substackcdn.com/image/fetch/$s_!MUJe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png 1272w, https://substackcdn.com/image/fetch/$s_!MUJe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MUJe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png" width="1182" height="516" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:516,&quot;width&quot;:1182,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:124120,&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_!MUJe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png 424w, https://substackcdn.com/image/fetch/$s_!MUJe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png 848w, https://substackcdn.com/image/fetch/$s_!MUJe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.png 1272w, https://substackcdn.com/image/fetch/$s_!MUJe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9ca169-ec17-4e03-aab3-e309c839fd37_1182x516.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>We covered your building your workspace correctly with desk, chairs, monitors, and more, and then covered spiritual health, shell and terminal setups, and shifted into more AI content such as building your own Coding assistants, hosting Local AI, and Building your own NAS. We also covered extra things like building remote network access, which then combined with my Local AI and NAS setups to get AI and your local self hosted services anywhere in the world, safe and securely.</p><p>I have more content on the way this year that will help you be an even better and faster worker and I ask everyone here to sign up for the paid membership to support me and these articles you make you better. Cheers to 2024 and heres to a great 2025!</p><h2>Article Recaps</h2><p>If you&#8217;re new here or missed earlier articles, here is everything I published in 2024. As we go into 2025, lets refresh what we learned and hit the ground running so we can accomplish all our goals in 2025. Each topic is listed in chronological order if you wish to recap in order of publication.</p><h4>Productivity Series</h4><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0b779af2-6f37-44d1-bc06-e55c45e7a47c&quot;,&quot;caption&quot;:&quot;I went from fulfilling 8 hour days to working 5 hour days by optimizing my software development flow. That decrease in daily working time allows me to focus on going to the gym and applying time to side hustles and WiFi money. I accomplished this by maintaining flow states that allows me to get work done in shorter amounts of time.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building an Optimal Software Development Environment - Part 1: Physical Layout&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-19T23:16:55.439Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca1662b0-e9e0-46d2-9fb9-c20457849ee3_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:142086516,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:12,&quot;comment_count&quot;:12,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;2aaabf9d-9a4d-459e-9350-a73e8e920bcc&quot;,&quot;caption&quot;:&quot;You will not perform at your best if your mental, physical, and spiritual wellbeing are compromised. Active, purposeful management of them unlocks your true potential through their interlinking. We&#8217;ve covered how to setup your office for the ideal working environment to make you more efficient work and now we are going to cover how to make you the best version of yourself.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building an Optimal Software Development Environment - Part 2: Mental, Physical, and Soulful Wellbeing&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-29T21:35:27.136Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-2fd&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:142922923,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:7,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;fdd948f0-417f-415c-a24a-c2c0532f0d15&quot;,&quot;caption&quot;:&quot;If you are not using software to make your life easier then you are wrong. The days of light, minimal computer setups are over. We have a rich ecosystem of software now that can enhance your productivity across multiple devices and operating systems, from browsers, to code, to security, to SaaS, and to digital storage. In this article I will go over some of my favorite browsers and browser extensions that I use to be productive daily so that you can be setup correctly to succeed even more. The faster, more productive you are on your computer directly correlates to less time at work and more time on WiFi money.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building an Optimal Software Development Environment - Part 3: Browser Productivity&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-04-19T02:07:13.120Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-159&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:143402484,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:9,&quot;comment_count&quot;:4,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d4b07460-cdb8-4587-a7af-9ddddf72656b&quot;,&quot;caption&quot;:&quot;Your profession as a software engineer is a craft.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building an Optimal Software Development Environment - Part 4: Terminals&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-10T01:24:47.797Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-71a&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:142888931,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:7,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;1638053f-638e-4ed7-a645-ebca8d02e5a0&quot;,&quot;caption&quot;:&quot;Previously we covered setting up your Mac with Iterm2 and we are going to do the same for Windows. Windows is a more viable development platform than ever thanks to the advent of Windows Subsystem for Linux, which allows for a native linux environment but with the familiarity of Windows User Interface. We can take advantage of WSL and the other shells provided through Windows to build the ultimate Windows Terminal setup that will enhance your work on the system just as we did on Mac.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building an Optimal Software Development Environment - Part 4.5: Windows Terminal&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-05-23T14:43:24.243Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-605&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:144824063,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h4>Local AI Series</h4><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;514921a0-b562-4132-87bc-76a07bb30bab&quot;,&quot;caption&quot;:&quot;I went down a rabbit hole recently after learning that many LLM models can be run on local hardware as long as it is strong enough. The last time I tried this was with Stable Diffusion on my poor 1060 graphics card that took 1 minute to generate an image. I was happy to find out that the latest MacBooks have plenty of support and hardware to run the LLMs locally without being too taxing.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Running AI Locally and Privately for Free&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-04-02T12:15:26.097Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/running-ai-locally-and-privately&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:143140159,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:10,&quot;comment_count&quot;:6,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;03679676-6f6b-4446-b8fb-350bbda8cfac&quot;,&quot;caption&quot;:&quot;AI is an efficiency multiplier for getting work done. If you are unfamiliar with a topic it can fill you in on the known unknowns and let you discover what you don&#8217;t even know. If you do know about a topic then it can extend and enhance your train of thought, offer counter arguments, and predict the work your future work. On any range of the spectrum it is a catalyst for knowledge workers especially when it comes to coders.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building your own Coding Copilot using Local AIs in VS Code&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-04-28T21:33:20.791Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/using-local-ais-in-vs-code&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:143972813,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:8,&quot;comment_count&quot;:2,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;86f8f49e-65d3-4228-9e8e-b0286a94491b&quot;,&quot;caption&quot;:&quot;This article will guide you to choosing the best hardware setup fro you and help you evaluate the tradeoffs that need to be considered. This is a complex, multi variable consideration as AI hardware in itself has many tradeoffs, but adding in your use cases adds more complications. Some people can buy a Mac and be happy. Others will need to retrofit or even build an entire rig to satisfy their need as a power user. We will walk through the trade offs of different builds, and then tie them together with what your use cases are.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Hardware And Software Options for Local AI&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-08-20T23:01:42.484Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd93b27c-7a1e-4215-9ba2-98b8f4348eaa_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/hardware-and-software-options-for&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:143791343,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:2,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;699779e0-1c97-4403-a450-0ad546b22878&quot;,&quot;caption&quot;:&quot;Hey everyone, short one here while I drop some Alpha here for paid subs.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Cost Effective AI Server Build&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-09-13T23:22:56.823Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/cost-effective-ai-server-build&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:148868304,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;af074b1e-b79d-4b9a-9de7-d2808db8ae16&quot;,&quot;caption&quot;:&quot;Recently I&#8217;ve documented on X my journey towards building a NAS and AI Rig and that ended up with me building two computers to support those workflows more optimally. My brand new NAS I built is now running UnRaid with 40TBs of storage and multiple services such as an RDP server, SMB storage, Jellyfin, and more to bring control my into my life with these services all on my own hardware. It has automated backups and SSDs to speed up storage before moving to Disk. My AI server was just a modest upgrade, keeping the 3090 GPU but upgrading all the other 7+ year old equipment, new motherboard, CPU, power supply, RAM, and fan. Both are now working well enough to share out the results.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building A NAS and AI Server - Part 1&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-11-26T23:15:00.844Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/building-a-nas-and-ai-server-part&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:151626997,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><h4>Everything Else</h4><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;50031ee9-5059-427c-ab80-112b7f635a9a&quot;,&quot;caption&quot;:&quot;The Bit Shift will be moving to more paid articles. As part of your payment you will get in-depth articles, code samples, project ideas, and access to the entire archive. Occasional free articles will remain.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Moving to Paid SubStack&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-16T16:43:07.271Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f6ec5c5-dd3a-4607-911e-e083d0a878da_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/moving-to-paid-substack&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:142670348,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;16fa57c7-d01f-4008-a8eb-7a3fb339acb3&quot;,&quot;caption&quot;:&quot;Often you will be away from home but would like to appear as on your home network or access home LAN resources. For this we can use a WireGuard setup which handles the security, even when on untrusted networks. Two routers can handle this for your network setup.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Getting Secure Home Internet Access While Away&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-04-13T14:52:23.209Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/getting-secure-home-internet-access&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:143548653,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;2f9402ae-964d-4e62-af69-00aac79630ae&quot;,&quot;caption&quot;:&quot;Merge Requests are your critical methodology of working well as a group in software projects. They contain everything that is needed in order to push a software project forward and if you want to have a successful project you need a robust and streamlined process. You will make thousands of Merge Requests over your&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Crafting The Ideal Merge Request&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-06-20T12:30:49.881Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/crafting-the-ideal-merge-request&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:145814828,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;13d5a2cf-ccad-4c65-abd7-2f9bf2405a79&quot;,&quot;caption&quot;:&quot;Today we are going to continue our series on Local AI and make it available outside of our home network. This gives us our personal AI models that are privately hosted on our own hardware the ability to work with us at the coffee shop, at the airport, and anywhere else you need to travel outside of your home network. We can continue to focus on our privacy oriented setups that protect us from data mining and intrusion into our personal lives from the larger hosted AI companies while ensuring we have a secure connection to our home network that other people can&#8217;t access.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Using WireGuard to Access Self Hosted Local AI Anywhere, Securely&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:2008611,&quot;name&quot;:&quot;BowTiedCrocodile&quot;,&quot;bio&quot;:&quot;Software Developer with experience in Cloud, Full Stack development, and Web3. Member of the Bow Tied Jungle. Helping you become a better technologist.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bea9989-4621-48a0-9f7e-5cef24168cd6_1080x1080.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-07-18T17:19:18.205Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.bowtiedcrocodile.com/p/using-wireguard-to-access-self-hosted&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:145967930,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Bit Shift&quot;,&quot;publication_logo_url&quot;:&quot;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%2F4bc8deea-d155-45ce-8e95-ad472590d93b_995x995.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/the-2024-bit-shift-review">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Building A NAS and AI Server - Part 1]]></title><description><![CDATA[Upgrades to Help Supplement the Home Lab]]></description><link>https://www.bowtiedcrocodile.com/p/building-a-nas-and-ai-server-part</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/building-a-nas-and-ai-server-part</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Tue, 26 Nov 2024 23:15:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!I-tC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recently I&#8217;ve documented on X my journey towards building a NAS and AI Rig and that ended up with me building two computers to support those workflows more optimally. My brand new NAS I built is now running UnRaid with 40TBs of storage and multiple services such as an RDP server, SMB storage, Jellyfin, and more to bring control my into my life with these services all on my own hardware. It has automated backups and SSDs to speed up storage before moving to Disk. My AI server was just a modest upgrade, keeping the 3090 GPU but upgrading all the other 7+ year old equipment, new motherboard, CPU, power supply, RAM, and fan. Both are now working well enough to share out the results.</p><p>Recently I was able to tie both servers together and I felt a great joy in building my home lab that I wanted to share with everyone here to give people ideas on how local hardware is a great alternative to invest in and avoid privacy invasive SaaS companies and high prices of storage and services. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!I-tC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I-tC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!I-tC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!I-tC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!I-tC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I-tC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg" width="3690" height="3024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3024,&quot;width&quot;:3690,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1459756,&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_!I-tC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!I-tC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!I-tC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!I-tC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa786a4a8-4f69-4776-a174-ee502344d6f0_3690x3024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The first successful boot of the NAS </figcaption></figure></div><h3>Defining the Problem and Constraints</h3><p>Initially the decision I was leaning on was to build a new AI server and also combine a NAS into it. I had a poorman&#8217;s NAS with just a Window Drive network shared over the network residing on my AI Server. It work for some basic file sharing, however this PC had consistency issues. It would often randomly restart and get stuck on the BIOS before needing a manual push button restart. This was immensely annoying since I would often RDP in at random times only to find out I had to restart the PC. Also I noticed as I started getting into AI code and tensor code that build times were pretty bad. I was rocking an intel 6700-K and the age was really showing itself when compiling software. This demotivated me from working on AI as much since a slow compile is a frustrating experience (don&#8217;t tell Rust people this). A golden rule for Servers is that they should always be highly available since you never know when you&#8217;ll need to use them, and you need to have the trust that a service running on them  will always be there when you need it. The PC was also headless, meaning there was no monitor or keyboard attached to it. So any non trivial level of troubleshooting required me to find a monitor and peripherals to attach to it. Since my AI server resided on this hardware it often meant my GPU was unavailable too, causing more issues. Overall it was a bad experience that was getting worse. </p><p>My initial thought on this was to save money and just combine the hardware upgrades into one computer as I had done previously. Pop a new motherboard, RAM, CPU, and be done with it. But after some research I quickly realized this was a mistake. But like most things, being cheap often causes more pain in the future. </p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/building-a-nas-and-ai-server-part">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Cost Effective AI Server Build]]></title><description><![CDATA[Keep costs low while starting out]]></description><link>https://www.bowtiedcrocodile.com/p/cost-effective-ai-server-build</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/cost-effective-ai-server-build</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Fri, 13 Sep 2024 23:22:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yZIS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey everyone, short one here while I drop some Alpha here for paid subs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yZIS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yZIS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!yZIS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!yZIS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!yZIS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yZIS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp" width="728" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A pixel art scene of a person building a computer. The person is seated at a desk with computer components scattered around, such as a motherboard, CPU, graphics card, and cables. The person is carefully installing parts into a computer tower. The environment is a cozy room with a small lamp on the desk, and shelves in the background holding tools and spare parts. The colors are vibrant, and the pixel art style is retro, with detailed shading and classic 8-bit design.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A pixel art scene of a person building a computer. The person is seated at a desk with computer components scattered around, such as a motherboard, CPU, graphics card, and cables. The person is carefully installing parts into a computer tower. The environment is a cozy room with a small lamp on the desk, and shelves in the background holding tools and spare parts. The colors are vibrant, and the pixel art style is retro, with detailed shading and classic 8-bit design." title="A pixel art scene of a person building a computer. The person is seated at a desk with computer components scattered around, such as a motherboard, CPU, graphics card, and cables. The person is carefully installing parts into a computer tower. The environment is a cozy room with a small lamp on the desk, and shelves in the background holding tools and spare parts. The colors are vibrant, and the pixel art style is retro, with detailed shading and classic 8-bit design." srcset="https://substackcdn.com/image/fetch/$s_!yZIS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!yZIS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!yZIS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!yZIS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c4a4dbc-2a55-4149-b4df-b1610393e059_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/cost-effective-ai-server-build">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Hardware And Software Options for Local AI]]></title><description><![CDATA[Figure out what the most cost effective solution is for your situation]]></description><link>https://www.bowtiedcrocodile.com/p/hardware-and-software-options-for</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/hardware-and-software-options-for</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Tue, 20 Aug 2024 23:01:42 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%2Fdd93b27c-7a1e-4215-9ba2-98b8f4348eaa_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This article will guide you to choosing the best hardware setup fro you and help you evaluate the tradeoffs that need to be considered. This is a complex, multi variable consideration as AI hardware in itself has many tradeoffs, but adding in your use cases adds more complications. Some people can buy a Mac and be happy. Others will need to retrofit or even build an entire rig to satisfy their need as a power user. We will walk through the trade offs of different builds, and then tie them together with what your use cases are.</p><h3>Baseline Mindset</h3><p>Lets do a quick run through of my journey on Local AI.</p><p>When I first started out with AI I started exploring with Stable Diffusion around two years ago running AUTOMATIC1111 with my old Nvidia 1060 6GB. It took over 30 seconds just to generate an image on pre SDXL based models. This was the start of my journey on the hardware impacts when utilizing these AI models locally from my own machines. It was a painful and time consuming process but also fun to see a new technology in motion. At the time I was such a novice and didn&#8217;t understand prompting well so I would iterate 20 times for every prompt so I could get a good sampling of pictures to choose from. Now with my 3090 I can use the latest SDXL models and generate images in seconds. I tell this story to highlight how awesome it is to have fast AI, and to have fast AI you need to great hardware and software.</p><p>I dropped off the AI train for a bit, only to come back with summer ChatGPT3 launch rekindling my interests in the topic. This was great, but it wasn&#8217;t local,  there were no privacy guarantees, and OpenAI can&#8217;t be trusted with sensitive data. Once I learned how easy it was to run Ollama on my Mac earlier in 2024 I started running AI on my personal devices and realized the true power aligned hardware and software resulting in blazing fast operations.</p><p>The speed was thanks to Mac&#8217;s hardware and software design for Apple Silicon. Our favorite local AI software Ollama runs with llama.cpp library, which treats Apple&#8217;s Metal API and <a href="https://github.com/ml-explore/mlx">MLX</a> framework as a first class option. MLX is machine learning library that is highly aligned to Apple&#8217;s GPU and CPU hardware capabilities. These benefits return to Ollama by utilizing all the hardware that the Mac can provide under the new M generation chips. This means that the entire RAM and significant processing power are available without needing discrete external GPUs like with AMD, Nvidia, and Intel GPU lines. Suddenly I was running 8GB-13GB sized models and having conversations with AI that rivaled the speed and quality of ChatGPT 3.0 and 3.5 all with a few command line commands. I could now have full chat and also inline code suggestions all on the same device. This is where I realized the power of the local AI but also again hit my limitations.</p><p>My Mac wasn&#8217;t bought for AI, but thankfully I bought the 18GB model M3 model. For small AI models they run from 8-16GB of your RAM. This can unfortunately starve the rest of your Mac for memory if running a larger model. Throw in a Browser with many tabs, a large code repo inside an IDE, plus many other apps, and suddenly you&#8217;ve tied up a lot of system resources and can&#8217;t operate as fast.</p><p>This led me to my current day situation. I retrofitted my old desktop with a new 3090 and even though the RAM and CPU (Intel Core i5-6600K) are years old running Windows, everything with AI was suddenly immediately available and immensely more productive. I can now run Stable Diffusion XL and the latest Llama 3.1 all on this server and not tie up my MacBook&#8217;s RAM, focusing my resources into my Coding environment now. I now have superior models and processing power all an API call away on my server (more <a href="https://www.bowtiedcrocodile.com/p/using-wireguard-to-access-self-hosted">here</a> on that) while saving my Mac most of the hard lifting.</p><p>After all this I&#8217;ve learned a lot of lessons from this slow evolution and I&#8217;m going to share with you some learnings and give you options on how to proceed. This will save you time and money and get you up to speed.</p><h3>Why Does Hardware Matter?</h3>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/hardware-and-software-options-for">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Using WireGuard to Access Self Hosted Local AI Anywhere, Securely]]></title><description><![CDATA[Additionally Reflections on Local AI Over Hosted AI]]></description><link>https://www.bowtiedcrocodile.com/p/using-wireguard-to-access-self-hosted</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/using-wireguard-to-access-self-hosted</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Thu, 18 Jul 2024 17:19:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4Tif!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp" 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_!4Tif!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4Tif!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!4Tif!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!4Tif!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!4Tif!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4Tif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp" width="420" height="420" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:420,&quot;bytes&quot;:310768,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!4Tif!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!4Tif!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!4Tif!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!4Tif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a53c77-cbb7-4d4d-850e-73bdfdecb7a8_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Today we are going to continue our series on Local AI and make it available outside of our home network. This gives us our personal AI models that are privately hosted on our own hardware the ability to work with us at the coffee shop, at the airport, and anywhere else you need to travel outside of your home network. We can continue to focus on our privacy oriented setups that protect us from data mining and intrusion into our personal lives from the larger hosted AI companies while ensuring we have a secure connection to our home network that other people can&#8217;t access.</p><p>This allows us to continue to use AI productively without feeling the need to use other less privacy focused services while we are on the go. Most commonly this happens when using AI on our phones, but this will also work for any devices you have as long as you can use WireGuard. As a bonus this technique can be used on any other self hosted software also to reach it on the go, but for this article we are going to focus on locally hosted AI.</p><h3>Prerequisites</h3><p>This article builds on a few others that need to be done before jumping in here.</p><p>First you need to get Ollama up on your server you have chosen, see <a href="https://www.bowtiedcrocodile.com/p/running-ai-locally-and-privately">Running AI Locally and Privately for Free</a>. Ensure that after you have Ollama setup with the 0.0.0.0 IP address so that it serves on the network and not just on the loopback interface. You can test this by trying to access the Ollama API on a different device with the server&#8217;s IP address and ensure you have a successful connection.</p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/using-wireguard-to-access-self-hosted">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Crafting The Ideal Merge Request]]></title><description><![CDATA[Think of Merge Requests as a nicely wrapped gift to your peers. It should make them happy and not annoyed.]]></description><link>https://www.bowtiedcrocodile.com/p/crafting-the-ideal-merge-request</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/crafting-the-ideal-merge-request</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Thu, 20 Jun 2024 12:30:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!O4Oi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp" 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_!O4Oi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O4Oi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!O4Oi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!O4Oi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!O4Oi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O4Oi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp" width="1456" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:540826,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!O4Oi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!O4Oi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!O4Oi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!O4Oi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd093a5af-63a3-4e50-a832-f823ffcba92d_1792x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Illustration of the code review process</figcaption></figure></div><p>Merge Requests are your critical methodology of working well as a group in software projects. They contain everything that is needed in order to push a software project forward and if you want to have a successful project you need a robust and streamlined process. You will make thousands of Merge Requests over your lifespan and getting the process right for yourself will save you time and frustration along with your teammates.</p><p>The merge process will contain your code which is the most critical asset, however it is not the most critical point of get code merged oddly enough. Why? Merge Requests are social signaling via knowledge sharing. It&#8217;s someone saying I made this code, and I&#8217;d like to combine it with the existing code, and here&#8217;s how I did it. You are putting your code into the mercy of the reviewers of the code repository and only with their approval may you get in. Viewing it in this lens should change how you feel about the process now. It&#8217;s not just about the code, it&#8217;s about the <em>entire</em> presentation of your merge request. If your presentation is terrible and unclear you will get rejected for a variety of reasons. Even if your code is perfect from a technical standpoint many things can stall or even sink your merge. This could be a failure to explain the changes, not filling out required fields in the template, no links to a ticket with business justification, an inability follow the code conventions, or just an inability to format the code correctly. I often have people submit MRs to my projects and they just ignore the entire template, don&#8217;t link tickets, and plenty of other issues. This requires me to take time out of my day to repeat things they are unfamiliar with and hand hold them to get their code in. We can streamline this process so that we spend less time reviewing MRs and also make the burden less on the committer.</p><p>In this article we will discuss what are necessary components for a Merge Request, examples of a good one, and some tips for creating merge templates so that your team can follow. I will also discuss some good practices to set your repo up in Gitlab so that you can incorporate these changes into your development lifecycle. By applying all these techniques we can save everyone on the team more time by getting code merged faster and allowing you to finishing your work faster.</p><h3>Basic of a Merge Request</h3><p>The structure of your merge request is going to heavily depend on the process put in place by your org. The most standard ones days are based around Github and Gitlab styles, but there are also older styles done via Gerrit or TFS. I&#8217;m going to focus on the former since those are much more popular and specifically use Gitlab as my demo vehicle. These use Markdown as the syntax which enables a rich document to share with your team. Most well established companies will have existing established conventions to follow and if you don&#8217;t follow them you will be denied or stuck in MR purgatory. You can see Google&#8217;s process <a href="https://archive.is/cTJTT">here</a> for some inspiration at the Enterprise level. Your hand will be held in this process, so just follow everything the team asks of you as best as you can and you will not have an issue as long as the code is good.</p><p>Many smaller companies or open source projects keep it much looser as a process and that is where we will try to focus on for this. Know that the Merge Request process should seek to provide extreme clarity to the reviewer, share knowledge out, and also make the product better, so focus on that when creating the request. Your MR will be an all encompassing <em>technical</em> document that contains all the following information for the reviewer to make an informed approval.</p><h4>An overall description of the work </h4><p>This tells the high level story of your work. Do not get too technical here as the code should primarily speak for itself if you follow good coding conventions like &#8220;Clean Code&#8221;. I prefer to leave my own comments on the MR itself to guide the reviewer towards clarity as that keeps the context local and therefore easier to understand. Here are some things to focus on in this section:</p><ul><li><p>It will note critical ideas of the story to look for</p><ul><li><p>EX: &#8220;Changing Database access to use environment based credentials instead of hard coded ones&#8221;</p></li><li><p>EX: &#8220;Update the styling on the main menu to not overflow on narrow screens&#8221;</p></li></ul></li><li><p>If a non trivial change, a link to your ticketing system with the business requirements</p></li><li><p>Links to any design documents you made. If you have a complex change set including diagrams and low level designs are a must</p></li><li><p>Action items other team members must do, due to a new process, breaking changes, or testing requirements</p></li><li><p>Links to related MRs and also reference documents used, such as MDN docs, language docs, and other key reference points or blogs</p></li></ul><h4>Proof of working functionality</h4><p>Usually this is a before and after picture or a live site for users to look at and confirm with their own eyes. I&#8217;ve been burned before by something being &#8220;fixed&#8221; but it actually never was. <strong>Trust, but verify always</strong>.</p><ul><li><p>For UI work with would be screenshots or a video showing the fix embedded into the MR doc.</p></li><li><p>For non visual based work, this could be many things:</p><ul><li><p>API work: screenshots of an HTTP request/response showing it works from Postman or the Browser, or .HARs of the process, or JSON responses</p></li><li><p>CI/CD work: A link to a passing pipeline with the fix or new stage</p></li><li><p>Infrastructure work: A link to the new resources created and/or fixed in AWS or your own server environment work. For terraform this could be the generated Terraform plan pasted into the MR.</p></li><li><p>Systems Work: </p><ul><li><p>A example of an Event passing through the system being processed successfully at every stage.</p></li><li><p>An updated IAM policy that fixes a Service</p></li><li><p>For AWS I will post Cloudwatch logs, the SNS message or SQS message that was processed, the new Dynamodb entry, and many other things. Almost every service in AWS has some sort of method of tracking and logs and these will be useful to send to your peers.</p></li></ul></li><li><p>Deployment Environment work: copies of shell scripts ran, screenshots of the updated /bin folder, updated apache config, etc..</p></li><li><p>Database work: Example of a new table being created or modified</p></li></ul></li><li><p>General screenshots or data samples that allow the reviewer to also confirm that the code works as expected. I go screenshot heavy on my PRs as that is my &#8220;Proof of Work&#8221;.</p></li></ul><h4>Test Cases and Steps to Reproduce </h4><p>This should be mostly a list of bullet points. This is my own personal favorite section when doing MRs as is it where I double check my work and ensure I covered all my bases for the requirements. If a business requirement isn&#8217;t included as a test case somehow that is a MR &#8220;code smell&#8221; and you will have any developer worth their salt call you out on this.</p><ul><li><p>This section is really critical for me as I often reference older PRs as a way to retest work and confirm prior assumptions of the system</p></li><li><p>This allows you to get into the mindset of the developer and ensure they have covered every code path</p></li><li><p>This is the committer&#8217;s attempt to also prove they tested their work correctly per the business requirements and also ensure no degradation of the system</p></li><li><p>Will often focus on manual testing and higher level acceptance testing and E2E testing here as unit tests and integration tests are mostly self documenting in the code review</p></li><li><p>I try to include raw data here as needed as, often I need a specific JSON structure to test something and having it handy will save me and others time.</p></li></ul><h4>Merge Request Checklist</h4><p>This section will include many of the code review workflow processes to help committer ensure they are following the rules of the repo. Often it will be a checklist you can click off on while creating your MR, but keep in mind MRs are living documents and not everything can be accomplished immediately. It takes time to run tests, have the documentation team write their updates, have the significant stakeholder sign off such as security team members or product managers approve.</p><p>Some things will be simple such as:</p><ul><li><p>Formatted the code per repo styles</p></li><li><p>Updated library version (if required)</p></li><li><p>Pipeline passes successfully</p></li><li><p>Follow up E2E story created</p></li><li><p>Dependencies are up to date</p></li><li><p>Added appropriate unit tests</p></li></ul><p>Outside of this there will also be specifics on how your organization and specific repo operates. This is where other teams or stakeholders who need to sign off will include their particular needs. This also depends on the type of development work being done. An application developer workload will be different from what a security or networking engineer works on, so adjust the process accordingly. I do fullstack dev so I have to think of the many issues up and down the stack and ensure that the MR process covers those cases. Monorepos will often have significant amount of checks and templates to prevent regression and ensure quality, where as a more targeted repo such as a frontend repo will have less.</p><h4>Merge Request Assignees</h4><p>Who you assign a MR to is important. If you have a unified team that works together on most things then you can just assign it to everyone or have a sensible default. Often most repos will have a default and you can just do that, plus add any additional key stakeholders if needed.</p><p>Often there are large teams that do silo&#8217;d work that we don&#8217;t want to annoy. Be tactical here if you have discretion and don&#8217;t add everyone. People&#8217;s review styles are all different and I know some engineers will nit me to death over silly things, so I often exclude those people as it just makes the process tedious. You should ensure to have a technical expert to review your code and often this person will be the default. If you&#8217;re merging code after two juniors sign off you might get some questions from management if your code breaks. Keep in mind MRs are historical records once merged and this can be used against you if something goes wrong, so be careful LGTM comments. </p><p>Code Reviews are not a punishment and if you have good teammates they will point out flaws that should be happily fixed. Keep a professional tone always as everyone can see how you act. MRs should be collaborative, not combative on a healthy and well functioning team. If you experience significant pushback you most likely have not cleared a design with the team or your approach is flawed. Try to fight those battles before you write code and not after to save you time.</p><h3>Real World Example</h3><p>To make things more real lets look at a real MR on Gitlab&#8217;s <a href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/155204#109f2149aa47139a5bf9cd1a3cc9ead881acd19a">repo</a>. Ignore all the labels and extra fluff and the automated processes, let&#8217;s just focus on the core document.</p><p>You can see they clearly give a description of the issue, link to other MRs for context, and describe why they did things a certain way. There are screenshots for proof of work and also code samples on how to validate the feature works as expected. They assigned only two reviewers who both signed off and appear to be the knowledge experts. </p><p>This is pretty simple as far as MR docs go, but the code change matches that, which is a good indication. You should scale your MR doc to the level of complexity and changes that are required in order to ease the minds of the reviewers. A 50+ file change of a complex changeset will require a lot more careful review than a single line change, so make the life easy for your reviewers and give them the clarity they need in the MR. There is also a <a href="https://docs.gitlab.com/ee/development/code_review.html#acceptance-checklist">link</a> to a code quality checklist for the committer to review.</p><p>Overall this simple but clean example is a good way to get started if you don&#8217;t have a process. I would investigate other public Git repos such as Microsoft if you need more inspiration besides this example.</p><h3>A Sample MR Template</h3><p>Below is a sample markdown file you can add to your repo under .gitlab/merge_request_templates folder that you can force upon users. Gitlab explains how this process works <a href="https://docs.gitlab.com/ee/user/project/description_templates.html#create-a-merge-request-template">here</a>. I highly encourage this as it makes is so your MRs are consistent in formatting and also that you don&#8217;t have to recreate this template by hand on every MR.</p><pre><code>## Summary
Provide a brief description of the features or fixes included in this merge request. Explain the motivation behind these changes and how they impact the project.

## Testing Instructions
Detail the steps required to test the changes introduced in this merge request. Include any relevant scripts, commands, or links to resources needed to perform the testing.

### Automated Tests
- [ ] Ensure all existing automated tests pass
- [ ] Add new automated tests for all new features and bug fixes

### Manual Testing
- [ ] Describe any manual testing steps if applicable

## TODOs
Here's a checklist of common code review checks to ensure quality and consistency in the codebase:

- [ ] Code follows the coding standards and style guides of the project
- [ ] All dependencies are properly managed and up to date
- [ ] Security implications have been considered
- [ ] Code is properly commented and documentation updated
- [ ] All new and modified functionality has been thoroughly tested
- [ ] Performance implications have been considered

## Assignments
Assign team members to specific tasks or roles within this merge request. Tag each assigned team member.

- **Code Review:** @username1
- **Testing:** @username2
- **Documentation:** @username3

## Additional Notes
Include any other relevant information or context that reviewers might need. This could be related to deployment considerations, potential conflicts with other branches, or areas where you would specifically like feedback.

## Screenshots
If applicable, add screenshots to help explain your changes and showcase the UI modifications.

---

Please review the above checklist and provide your feedback. Thank you!</code></pre><p>You can also assign default reviewers by adding the text to the template above:</p><pre><code>/assign_reviewer @user1 @user2 @user3</code></pre><p>This is particularly great if you work in a mono repo and have different types of PRs depending on the workload and only want to assign to certain people. You can see more commands to add into your MRs <a href="https://docs.gitlab.com/ee/user/project/quick_actions.html#issues-merge-requests-and-epics">here</a>.</p><h4>Other Tips</h4><p>Finally here are some additional guidelines to setup in your repo to make MRs more manageable. Your git host should have equivalent solutions and I suggest you worth with your team to identify where the pain points in the review process are.</p><p>Are people sending unformatted code? Make the build fail and block the merge. </p><p>Are people&#8217;s code out of date? Require their MR to be merged or rebase to the latest master before merge.</p><p>Here are some more rapid fire ones:</p><ul><li><p>Require pipeline to pass to Merge</p><ul><li><p>Codify expectations of code into the build pipeline. </p><ul><li><p>Almost every language has a de facto CLI tool to format code that can be configured to the team style </p></li></ul></li><li><p>Fail builds fast if the MR isn&#8217;t acceptable. Can fail on formatting, build, unit tests, and more.</p></li></ul></li><li><p>Require <a href="https://docs.gitlab.com/ee/user/project/merge_requests/approvals/">approval minimums</a> from mid level or higher devs</p><ul><li><p>Ensures that juniors have atleast one person watching them</p></li></ul></li><li><p>Enforce <a href="https://docs.gitlab.com/ee/user/project/description_templates.html#set-a-default-template-for-merge-requests-and-issues">default templates</a> on MRs</p><ul><li><p>This helps external team members too</p></li></ul></li><li><p>Enforce default merge style on MRs </p><ul><li><p>I prefer <a href="https://docs.gitlab.com/ee/user/project/merge_requests/squash_and_merge.html#set-default-squash-options-for-a-merge-request">squash merge</a> for clean history</p></li></ul></li><li><p>Enforce <a href="https://docs.gitlab.com/ee/user/project/merge_requests/methods/index.html#fast-forward-merge">Fast Forward Merge</a> with required Squash</p><ul><li><p>This removes merge commits and makes the history easier to understand</p></li><li><p>Squash ensures that many small commits do not pollute the history</p></li><li><p>You can do a <a href="https://docs.gitlab.com/ee/user/project/merge_requests/methods/index.html#rebasing-in-semi-linear-merge-methods">Rebase</a> focused pull to update code. This can be operated in the Gitlab UI also without the CLI to save time.</p></li></ul></li><li><p>Use Draft status to clearly indicate work in progress</p><ul><li><p>I often do this as an <em>optional</em> code review for people </p></li></ul></li><li><p>Close MRs that need rework to clear the queue to reviewers</p><ul><li><p>Sometimes our initial approach isn&#8217;t the best. I like to close MRs that require significant rework to unclutter the MR timeline. This is more of a personal preference.</p></li></ul></li><li><p>If working in a large codebase with many people use <a href="https://docs.gitlab.com/ee/user/project/codeowners/">Code Owners</a> to ensure no stealth edits of your code.</p></li><li><p>Any extended back and forth on a code review can be moved to a quick call. This is often less painful then commenting and waiting 30 minutes every time for a response.</p><ul><li><p>Just ensure the resolution is summarized in a followup comment</p></li></ul></li><li><p>Don&#8217;t be afraid to modify your merge template, it&#8217;s version controlled and experimentation should be encouraged! Find the best process for your team.</p></li><li><p>Require more approvals for Merges that lower <a href="https://docs.gitlab.com/ee/ci/testing/code_coverage.html#coverage-check-approval-rule">Code Coverage</a></p></li></ul><h3>Summary</h3><p>The key takeaway of this article is that your MR&#8217;s need to be clear and concise with a focus on sharing knowledge to your team without bogging them down. The less painful this process is will result in faster iterations for your software project. Work together as a software team to build sensible defaults into the MR process and automate as much as you can so that people don&#8217;t have to be broken records fixing easy mistakes. By following the advice in this post you can make your life and every else&#8217;s life better when it comes time to merge code. If you&#8217;re submitting multiple MRs a week this is a must and you will reward yourself over time by building a good process for the team.</p><p></p><h3></h3>]]></content:encoded></item><item><title><![CDATA[Building an Optimal Software Development Environment - Part 4.5: Windows Terminal]]></title><description><![CDATA[Windows Excels at Multi Shell Use With Windows Terminal]]></description><link>https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-605</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-605</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Thu, 23 May 2024 14:43:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KICr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp" 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_!KICr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KICr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!KICr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!KICr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!KICr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KICr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp" width="430" height="430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:430,&quot;bytes&quot;:324262,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!KICr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!KICr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!KICr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!KICr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5aa8d1-a6e1-49a7-b3cb-025fd6bf7015_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Previously we covered setting up your Mac with Iterm2 and we are going to do the same for Windows. Windows is a more viable development platform than ever thanks to the advent of Windows Subsystem for Linux, which allows for a native linux environment but with the familiarity of Windows User Interface.  We can take advantage of WSL and the other shells provided through Windows to build the ultimate Windows Terminal setup that will enhance your work on the system just as we did on Mac.</p><p>You might wonder why someone who switch to Mac would even care about setting up a Windows terminal, but the reality is I spend more time on my work laptop than my personal one, so that means my Windows setup needs to be even better based upon the ratio of time I spend at work. The better my work setup is, the faster I can accomplish the tasks for the day and then turn my attention to my personal work. </p><p>Additionally Windows and Linux based systems are the two most popular deployment environments for software which makes it a perfect OS for cross platform work. Since WSL enables a total and complete shell with a full linux Kernel but doesn&#8217;t lock you down to Linux based UIs, you get massive amounts of software compatibility suddenly with a great user experience. Even with my qualms of Windows UI going downhill I still find it better and more familiar than most Linux based interfaces. Working in Windows and then dipping into the Terminal to run things like wget, curl, jq, grep and untar to look at and process data is a common occurrence for me and having those tools easily available to me makes my job much easier.  More serious tools are also available and better in Linux like terraform, aws cli, and others. File system access between the two is easy (though can be slow cross mounts) which enables fast collaboration for the two environments to swap data between. You can see a more detailed explains of the two terminals <a href="https://github.com/microsoft/terminal?tab=readme-ov-file#terminal--console-overview">here</a>.</p><p>Enough convincing, let&#8217;s get to setting up a Terminal on Windows that enables this!</p><h2>Windows Terminal</h2><p>For our terminal of choice we are going to use <a href="https://en.wikipedia.org/wiki/Windows_Terminal">Windows Terminal</a>. It is a serious project from Microsoft to have an excellent Terminal that can finally challenge Linux based ones. The built in Console for Windows is trash and offers minimal advanced usage compared to a default terminal from Mac. The original console host has little customization options for colors and themes, no tab support, unideal text buffer resizing, and just poor performance in general. There are many reasons why Window&#8217;s console is so limited in functionality but the main reason is legacy compatibility. The console needs to work the same going back to at least Windows NT , so in terms of upgrades there are not many.</p><p>As for why Windows Terminal you can see Microsoft&#8217;s <a href="https://learn.microsoft.com/en-us/windows/terminal/">own words</a> on that. But if you&#8217;re familiar with any advanced terminals you get what you expect. Custom fonts with ligatures, themes, and backgrounds. Tab support with multiple panes, UTF-8 support with GPU rendered text for faster performance, and multiple profiles that you can set to different shells and customize them accordingly. </p><p>To get started you can download from the&#8230;. <a href="https://apps.microsoft.com/detail/9n0dx20hk701">Windows Store</a>. Yes this is terrible but it&#8217;s a UWP app so you will want if you want automatic updates you have to go through the store or compile from source on their <a href="https://github.com/microsoft/terminal/releases">github</a> repo. I download from the Store since it&#8217;s easy and it is for the work PC but if you&#8217;re turbo go ahead and compile from source. After install it will launch for you and you will be in the terminal.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Bf8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Bf8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.png 424w, https://substackcdn.com/image/fetch/$s_!0Bf8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.png 848w, https://substackcdn.com/image/fetch/$s_!0Bf8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.png 1272w, https://substackcdn.com/image/fetch/$s_!0Bf8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Bf8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.png" width="1456" height="911" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:911,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:37877,&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_!0Bf8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.png 424w, https://substackcdn.com/image/fetch/$s_!0Bf8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.png 848w, https://substackcdn.com/image/fetch/$s_!0Bf8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.png 1272w, https://substackcdn.com/image/fetch/$s_!0Bf8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3bbfc9-c9d7-49ae-b484-fa380a65c2fc_1496x936.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">Windows Terminal Sample Load</figcaption></figure></div><p>Depending on your existing system setup you may be launched into a different shell than the one you see here. I have Powershell Core installed which is the ideal default shell for me. Using the Arrow dropdown next to the new tab icon you can select a different shell for now. Sometimes I actually need to use cmd.exe and regular Powershell so this is a great feature if you work in varying shell environments. Some older tech companies still have legacy processes that rely on these older shells and this will help you out and get you off using the default console host and keep your sanity. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V5vk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V5vk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.png 424w, https://substackcdn.com/image/fetch/$s_!V5vk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.png 848w, https://substackcdn.com/image/fetch/$s_!V5vk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.png 1272w, https://substackcdn.com/image/fetch/$s_!V5vk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V5vk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.png" width="1368" height="772" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:772,&quot;width&quot;:1368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:356957,&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_!V5vk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.png 424w, https://substackcdn.com/image/fetch/$s_!V5vk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.png 848w, https://substackcdn.com/image/fetch/$s_!V5vk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.png 1272w, https://substackcdn.com/image/fetch/$s_!V5vk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8d46dc1-7ee8-48ac-acdc-e91dfd8b680d_1368x772.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">List of Shells available in Windows Terminal</figcaption></figure></div><p>If you have WSL installed you will also see an option for every distro you have here. I don&#8217;t need all these shells of course, so if you click on Settings in the drop down you can select the profile and then scroll to the bottom and select &#8220;Hide Profile from Dropdown&#8221;. Additionally I like to setup an Admin profile for my Windows Shells. You can do this easily in the Profile section of Settings Menu, scrolling down to &#8220;Add a new profile&#8221;, and then duplicating the desired shell, and then enabling Admin launcher in the profile settings and also renaming the profile to have Admin in it. Our end result is the following:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g3od!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g3od!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.png 424w, https://substackcdn.com/image/fetch/$s_!g3od!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.png 848w, https://substackcdn.com/image/fetch/$s_!g3od!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.png 1272w, https://substackcdn.com/image/fetch/$s_!g3od!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g3od!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.png" width="1456" height="590" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:590,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:252948,&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_!g3od!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.png 424w, https://substackcdn.com/image/fetch/$s_!g3od!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.png 848w, https://substackcdn.com/image/fetch/$s_!g3od!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.png 1272w, https://substackcdn.com/image/fetch/$s_!g3od!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88c5ddf5-7208-4013-a0bb-fcb09b454a8e_1574x638.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">WSL shell inside Windows along with Admin Powershell</figcaption></figure></div><p>To bring it all together, we installed Windows Terminal, have access to a profile per shell type, a shell for Admin access, and a shell for our Linux distro! Already we have an immense productivity by hosting all these shells (and operating systems!) under one app within the Terminal. Often I will have one of each opened up and swap between them as needed. I will use Powershell for Windows operations and basic file system navigation and scripts and WSL for items and tools that are better are native Linux. </p><p>We can continue to add profiles as needed if we have different workloads, and we can also modify the launch command if we have a specific switch or command line param we wish to pass to the shell. For WSL this could mean launching a different user and to a different directory instead of the default one by customizing the cmd line command. To do so, clone the linux based profile you want and edit the &#8220;Command Line Section&#8221; as below.</p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-605">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Building an Optimal Software Development Environment - Part 4: Terminals]]></title><description><![CDATA[The terminal is the critical portal to operating the command line succesfully]]></description><link>https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-71a</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-71a</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Fri, 10 May 2024 01:24:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!j-ok!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp" 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_!j-ok!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j-ok!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!j-ok!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!j-ok!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!j-ok!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j-ok!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp" width="366" height="366" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:366,&quot;bytes&quot;:220228,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!j-ok!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!j-ok!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!j-ok!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!j-ok!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b19f89b-3730-4d45-9f3c-62443d21a771_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Your profession as a software engineer is a craft. </p><p>A craft needs a deliberate methodology and operation to build and create along the entire path to a completed work. For physical crafters they use a workshop and toolbox along with materials that aligns with their expected workloads to work intelligently and efficiently in a process that ensures quality results.  </p><p>The digital equivalent for a software developer are the Personal Computer and its applications, terminal, and shell inside the PC. These tools need align with your daily work so that you can get more done, correctly, in less time. When you configure your software workshop correctly it will enhance your productivity significantly by allowing faster operational movements, quicker search and retrieval, data manipulation, and powerful file and string operations.</p><p>Our goal is to optimize these tools such that you reap the efficiency gains every day, compounding into years of better productivity. This creates more time for you to accomplish what really matters in your life, whether that is time for the family, your own business, or promotions at work.</p><p>This article will cover the setup of your terminal, it&#8217;s appearance, and some useful shortcuts. Next article we will move onto your shell, arguably the most important tool a software developer uses outside of their IDE. It is your entry point and main interface to your PC and must be fully operational with every tool necessary for the job. The Terminal is your entry point to using the shell and the CLI and needs to be setup correctly.</p><h2>Terminal Choice</h2><p>Your terminal is the portal to the command line interface where you will primarily use your chosen shell to interact with the operating system. It handles text I/O into the shell, control keys, renders text back to you, supports multiple tabs and profiles, keeps you aware of the current process, and much more. Choosing a terminal is like choosing your lab or workshop for the day, each comes with their differences and strengths depending on the workload you wish to attempt.</p><p>On Mac the default Terminal is good for basic use cases. It support profiles, color schemes, fonts, and handles keyboard input well. However we can do even more with a replacement terminal. I use ITerm2 and that&#8217;s what I will cover in the guide but keep an eye out for cross app features to utilize. It also supports tmux if that matters to you for use with SSH sessions. You can see some of the killer features <a href="https://iterm2.com/documentation-highlights.html">here</a>. If you are a non mac user you should try <a href="https://github.com/alacritty/alacritty">Alacritty</a>, and on Windows Microsoft&#8217;s <a href="https://learn.microsoft.com/en-us/windows/terminal/">Terminal</a> is an excellent modern tool and killed ConEmu for me.</p><p>To start with ITerm2, lets take a look at what I have as a frame of reference.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rmHp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c5c207-1669-488b-9476-57cd4536a785_1618x1132.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rmHp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c5c207-1669-488b-9476-57cd4536a785_1618x1132.png 424w, https://substackcdn.com/image/fetch/$s_!rmHp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c5c207-1669-488b-9476-57cd4536a785_1618x1132.png 848w, https://substackcdn.com/image/fetch/$s_!rmHp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c5c207-1669-488b-9476-57cd4536a785_1618x1132.png 1272w, https://substackcdn.com/image/fetch/$s_!rmHp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c5c207-1669-488b-9476-57cd4536a785_1618x1132.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rmHp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c5c207-1669-488b-9476-57cd4536a785_1618x1132.png" width="1456" height="1019" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8c5c207-1669-488b-9476-57cd4536a785_1618x1132.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1019,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:830926,&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_!rmHp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c5c207-1669-488b-9476-57cd4536a785_1618x1132.png 424w, https://substackcdn.com/image/fetch/$s_!rmHp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c5c207-1669-488b-9476-57cd4536a785_1618x1132.png 848w, https://substackcdn.com/image/fetch/$s_!rmHp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c5c207-1669-488b-9476-57cd4536a785_1618x1132.png 1272w, https://substackcdn.com/image/fetch/$s_!rmHp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c5c207-1669-488b-9476-57cd4536a785_1618x1132.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>ITerm supports multiple tabs in a window, new tab with same profile (&#8984;+ d), new terminal window creation (&#8984;+ n), along with tab swap (&#8984; + arrow key). I can also split into two windows on the fly via drag and drop or with shortcuts. You can also use &#8984; + a Number, where the number corresponds to the tab. If I hit CTRL + ~ I get a quake style dropdown terminal no matter the context.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;85d88627-fea9-4a11-8a12-a2d6834df5e6&quot;,&quot;duration&quot;:null}"></div><p>This is great for when I need to log back into AWS SSO quickly, or run a quick CLI command and then escape back out to my main workload. Often I have  terminals working on a specific context and this hot terminal helps not pollute my working terminals such as SSH sessions, git operations, and OS management. This dropdown terminal also supports tabs, so if you want some longer running processes like a system resource monitor like asitop you can keep it running in there. Since you can split panes vertically and horizontally you have a lot of information density using tabs and split panes.</p><p>Let&#8217;s rapid fire through some config options I like to build a max aesthetic terminal. Remember your workspace should bring you joy and make you happy, so customize away. </p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-71a">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Building your own Coding Copilot using Local AIs in VS Code]]></title><description><![CDATA[Get local chat and inline suggestions from multiple Local AIs to enhance your abilities]]></description><link>https://www.bowtiedcrocodile.com/p/using-local-ais-in-vs-code</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/using-local-ais-in-vs-code</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Sun, 28 Apr 2024 21:33:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OIHH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp" 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_!OIHH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OIHH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!OIHH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!OIHH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!OIHH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OIHH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp" width="384" height="384" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:384,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A pixel art style illustration depicting the use of AI over a network. The scene includes several retro-style computers, connected by glowing, stylized network cables to a central server, which is represented with AI-themed imagery like a glowing brain icon or neural networks. The color palette is vibrant and typical of pixel art, with clear, blocky details to emphasize the retro computing theme.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A pixel art style illustration depicting the use of AI over a network. The scene includes several retro-style computers, connected by glowing, stylized network cables to a central server, which is represented with AI-themed imagery like a glowing brain icon or neural networks. The color palette is vibrant and typical of pixel art, with clear, blocky details to emphasize the retro computing theme." title="A pixel art style illustration depicting the use of AI over a network. The scene includes several retro-style computers, connected by glowing, stylized network cables to a central server, which is represented with AI-themed imagery like a glowing brain icon or neural networks. The color palette is vibrant and typical of pixel art, with clear, blocky details to emphasize the retro computing theme." srcset="https://substackcdn.com/image/fetch/$s_!OIHH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!OIHH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!OIHH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!OIHH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fe7c3a0-61a8-4b04-9fdd-b4a1401e3516_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>AI is an efficiency multiplier for getting work done. If you are unfamiliar with a topic it can fill you in on the known unknowns and let you discover what you don&#8217;t even know. If you do know about a topic then it can extend and enhance your train of thought, offer counter arguments, and predict the work your future work. On any range of the spectrum it is a catalyst for knowledge workers especially when it comes to coders.</p><p>In our previous Local AI article I showed how easy it is to run Ollama and get up and running within minutes with Large Language Models. Now we are going to harness those models to enhance our ability to code locally. By running the models ourself we can ensure that none of our data and code leaves the network. We can use GPT like chat interfaces with sensitive data such as passwords, internal resource names, and not leak out implementation design out to the rest of the world. No longer do we have to self censor and hand fix data before we send it off to an untrusted backend. We can keep our data out of the hands of OpenAI and other companies who might not have the best intentions and privacy policies, or might train their AI on our work. We can preserve our privacy.</p><p>For this to work we are going to use two different models so lets pull them before we get started. Keep in mind llama3 will be semi-broken in Continue until we apply a bug fix later on in this article.</p><pre><code>ollama pull llama3
ollama pull starcoder:3b</code></pre><h2>Using VS Code with Local AI</h2><p>Within your VS Code we are going to install the Open Source extension <a href="https://marketplace.visualstudio.com/items?itemName=Continue.continue">Continue</a>. I have been using Continue recently on a small python project and it has helped me get up to speed much faster as I&#8217;m not a regular python dev. Please don&#8217;t take the python code seriously, it&#8217;s pre-pre-alpha. Also note that Continue works with Jetbrains products too, so follow that setup if you don&#8217;t want to miss out in your favorite IDE.</p><p>Continue as an extension adds inline suggestions with tab completion, a chat interface with context, and allows you to use remote AI, such as ChatGPT or Claude or more importantly local AI that we run. </p><h3>Feature Demo</h3><p>As far as using the extension I used the chat interface to help plan out the structure of the project, for library suggestions, and also to apply change it suggest directly into my code. Often the hardest part of a project for me is just starting and getting over decision overload. By letting the AI make some initial decisions I can worry more about implementation than getting bogged down on starter code boiler plate. One of the killer features is that it indexes your entire codebase for context, and you can also feed it specific lines of code and ask questions on it, and apply those changes inline. See a small demo below where I ask about a specific class and what it does. </p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;fb63a966-4ee6-43e7-9c3d-fc71ce6dbec3&quot;,&quot;duration&quot;:null}"></div><p>I can also ask it about specific functions or ask more general questions with @ Codebase tag. If the chat interface notices any code that can be created it will allow me to copy it, apply it, or ignore it. When applied it is as a diff where I can accept or reject the suggestion. You can see below as I asked AI to generate some code for me. It&#8217;s not perfect of course as I had to make some indentation adjustments, but overall that was much quicker than me writing the whole thing out. It&#8217;s a pretty contrived example for showing everyone, but other times I have found this useful just as part of my workflow without thinking about it.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;5142ab90-be71-4554-9f0c-7c4fa9fa9342&quot;,&quot;duration&quot;:null}"></div><p>Let&#8217;s reflect that this was all generated via my nvidia 3090 graphics card running an 8 billion parameter model from Facebook. There are many better models that can help you but this keeps us private and secure from prying eyes and we can always run stronger models.</p><p>Additionally, the inline code completion is also powerful from Starcoder2. I had to write a 3 branch if/else statement processing command line input of single file path, multiple file paths, and a directory of files. The inline suggestions from starcoder2:7b kept nailing every suggestion as I kept updating the next line to follow the flow of the program. Of course this code could be refactored better to have less duplication but progressive iteration is how most great software was made, 1 step at a time here.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kg_y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f31c16-2179-4146-8f75-39625337a37e_1876x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kg_y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f31c16-2179-4146-8f75-39625337a37e_1876x1122.png 424w, https://substackcdn.com/image/fetch/$s_!Kg_y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f31c16-2179-4146-8f75-39625337a37e_1876x1122.png 848w, https://substackcdn.com/image/fetch/$s_!Kg_y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f31c16-2179-4146-8f75-39625337a37e_1876x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!Kg_y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f31c16-2179-4146-8f75-39625337a37e_1876x1122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kg_y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f31c16-2179-4146-8f75-39625337a37e_1876x1122.png" width="1456" height="871" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09f31c16-2179-4146-8f75-39625337a37e_1876x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:871,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:347674,&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_!Kg_y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f31c16-2179-4146-8f75-39625337a37e_1876x1122.png 424w, https://substackcdn.com/image/fetch/$s_!Kg_y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f31c16-2179-4146-8f75-39625337a37e_1876x1122.png 848w, https://substackcdn.com/image/fetch/$s_!Kg_y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f31c16-2179-4146-8f75-39625337a37e_1876x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!Kg_y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09f31c16-2179-4146-8f75-39625337a37e_1876x1122.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">Almost every line here was an accepted suggestion from Starcoder2</figcaption></figure></div><p>So lets actually walkthrough how to configure this locally for you.</p><h2>Configuration</h2><p>After you have Continue installed into VS Code it will ask you setup an AI backend. If you wish to go any online provider such as ChatGPT or Claude, then follow the instructions for that and you are done. If you are hosting Ollama on the same computer as VS Code, follow the flow for Ollama and follow the llama3 fix later. However for me I am going to use my server on my local network with Ollama, which requires a little more work. I will cover serving Ollama on network further down, but for now just follow the Ollama flow also. Open the extension on the right side panel where Continue suggested you put it. Then click on the settings icon in the bottom right to open up the JSON config file. We can now configure any additional AIs that we need.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fcao!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F535bb6bb-dc7c-4fea-b870-449235744984_780x750.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fcao!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F535bb6bb-dc7c-4fea-b870-449235744984_780x750.png 424w, https://substackcdn.com/image/fetch/$s_!fcao!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F535bb6bb-dc7c-4fea-b870-449235744984_780x750.png 848w, https://substackcdn.com/image/fetch/$s_!fcao!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F535bb6bb-dc7c-4fea-b870-449235744984_780x750.png 1272w, https://substackcdn.com/image/fetch/$s_!fcao!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F535bb6bb-dc7c-4fea-b870-449235744984_780x750.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fcao!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F535bb6bb-dc7c-4fea-b870-449235744984_780x750.png" width="780" height="750" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/535bb6bb-dc7c-4fea-b870-449235744984_780x750.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:750,&quot;width&quot;:780,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43912,&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_!fcao!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F535bb6bb-dc7c-4fea-b870-449235744984_780x750.png 424w, https://substackcdn.com/image/fetch/$s_!fcao!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F535bb6bb-dc7c-4fea-b870-449235744984_780x750.png 848w, https://substackcdn.com/image/fetch/$s_!fcao!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F535bb6bb-dc7c-4fea-b870-449235744984_780x750.png 1272w, https://substackcdn.com/image/fetch/$s_!fcao!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F535bb6bb-dc7c-4fea-b870-449235744984_780x750.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">1. Open Sidebar. 2. Open config.json</figcaption></figure></div><p>We are going to add our own Ollama based AIs here. Since we are using llama3 we need a specific entry as we have to fix a bug in it to get it fully working. In the config.json go to &#8220;models&#8221; element and add a new entry like below. If you wish to keep other AIs, just append this new item in list. See below.</p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/using-local-ais-in-vs-code">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Building an Optimal Software Development Environment - Part 3: Browser Productivity]]></title><description><![CDATA[The browser is your portal to the wealth of the internet - treat it well]]></description><link>https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-159</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-159</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Fri, 19 Apr 2024 02:07:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PonF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp" 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_!PonF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PonF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!PonF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!PonF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!PonF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PonF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp" width="498" height="498" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:498,&quot;bytes&quot;:388710,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!PonF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!PonF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!PonF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!PonF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3140a3a3-bc8b-4efa-bb79-8f7531d41847_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you are not using software to make your life easier then you are wrong. The days of light, minimal computer setups are over. We have a rich ecosystem of software now that can enhance your productivity across multiple devices and operating systems, from browsers, to code, to security, to SaaS, and to digital storage. In this article I will go over some of my favorite browsers and browser extensions that I use to be productive daily so that you can be setup correctly to succeed even more. The faster, more productive you are on your computer directly correlates to less time at work and more time on WiFi money.</p><p>The first thing I do when setting up any computer is to get my Browser, Adblock, and Passwords in order. Once I do that I can operate at an efficient no matter what device I&#8217;m working on. This will let you browse the internet without annoyances and gives you the access you need immediately. These are important to get correct right from the start as it is the base layer of computer and knowledge work. If you&#8217;re still using browser based password managers and subjecting yourself to Ads you&#8217;re not gonna make it. An old product manager of mine never used an ad blocker and every time they shared their screen it was embarrassing seeing the targeted ads he was sent. No one want&#8217;s to see your underwear ads, so let build up your browsing levels. </p><p>Let&#8217;s get setup. </p><h3>Browser Philosophy</h3><p>The application you will spent the <strong>most</strong> amount of time in is the internet browser. Therefore it makes sense to spend time optimizing it. With the right choice of browsers, some extensions, and proper ad blocking you can speed up your daily browsing and reduce your annoyance with ads while preserving your privacy and security.</p><p>The standard recommendation for a web browser from me is <a href="https://brave.com/">Brave Browser</a>. It takes all the good parts of Chrome based browsers, the speed and compatibility, and combines it with a privacy focused organization supporting it. Most importantly it isn&#8217;t run by Google, who will do anything and everything they can to get their hands on your data (see their <a href="https://www.the-sun.com/money/11052560/google-incognito-mode-lawsuits-after-settlement/">5 Billion dollar lawsuit</a> loss they on Incognito mode). It&#8217;s convenient in a way that Google, a company that makes it money via internet advertising, also shepherds the means to which you can access the internet. Talk about double dipping. This is why I never recommend using Chrome browsers, you can&#8217;t trust your privacy with Google.</p><p>To make the simple point why Brave is better and more private than Chrome, Brave ships with a built in ad blocker. Chrome in the meantime is going to start <a href="https://cybernews.com/privacy/google-to-weaken-chrome-ad-blockers-push-for-security/">limiting adblockers</a> to stop disrupting their business. Advertisements annoy me and we as people should do everything we can to remove annoyances in life.</p><p>Brave supports every major OS and mobile devices, so you can ensure a consistent experience between all devices. I&#8217;ve used it on my phone, personal Mac and Windows machines, and my work machines for close to 7 years now. Since Brave works on so many platforms you also get their adblock experience on those platforms easily. It will blocks ad that are often native to the platform you are on, such as YouTube, and can also disable tracking methods from Social media sites if you don&#8217;t use them.</p><p>Some additional features Brave ships with:</p><ul><li><p>Vertical Tabs!</p></li><li><p>Background audio play on Mobile via <a href="https://brave.com/playlist/">Playlist</a></p></li><li><p>Auto <a href="https://support.brave.com/hc/en-us/articles/360045031392-What-is-Speedreader">Speed Reader </a>mode for articles</p></li><li><p>Built in VPN (use your own though) and Tor</p></li><li><p>IPFS support</p></li><li><p>Built in Crypto Wallet (use your own though)</p></li><li><p>Chrome extension compatibility</p></li><li><p>Disable AMP based pages</p></li><li><p>Ethereum Name Service support</p></li><li><p>Customizable privacy features</p></li><li><p>Speed Reader Mode</p></li><li><p>Popup Blocker</p></li></ul><p>There&#8217;s plenty more but I don&#8217;t want to be an advertiser for Brave, just know I&#8217;ve been a really happy customer with them. However Brave has set some defaults that personally I like to change to get a smoother experience. For example, Brave has a &#8220;rewards&#8221; program called BAT that replaces 3rd party Ads with their own, more privacy focused Ads and also pays you for it. You can disable this completely like I do and use the AdBlocker to its full extent. </p><p>To start with my personal config settings, go into the Settings icon in the top right menu icon, then follow below.</p><ul><li><p>Appearance Tab</p><ul><li><p>Enable Vertical Tabs</p></li><li><p>Disable Brave News, Brave Rewards, Brave Wallet, VPN Button</p></li><li><p>Always show bookmarks </p><ul><li><p>Save your most frequent sites into bookmark bar for faster access</p></li></ul></li><li><p>Enable Wide Address Bar</p></li><li><p>Enable Full URLs (this makes you more secure)</p></li></ul></li><li><p>Shields Tab</p><ul><li><p>Trackers &amp; ads blocking &#8594; Aggressive</p></li><li><p>Block Cookies &#8594; Only cross-site</p></li><li><p>Enable Auto Redirect -AMP pages, tracking urls</p></li><li><p>You can also disable specific social media embeddings on sites</p></li></ul></li><li><p>Privacy and Security</p><ul><li><p>Disable Allow p3a</p></li><li><p>Disable send daily usage to Brace</p></li><li><p>Disable Auto sending of Diagnostic reports</p></li><li><p>Block Third Party Cookies</p></li><li><p>Enable &#8220;Do Not Track&#8221;</p></li><li><p>Upgrade connections to HTTPS &#8594; Strict</p></li></ul></li><li><p>Web3</p><ul><li><p>Don&#8217;t use their wallet! Always use hardware wallet</p></li><li><p>Enable IPFS if you wish (this can track your IP if using public nodes)</p></li><li><p>Enable ENS domains if you wish</p></li></ul></li><li><p>Leo AI</p><ul><li><p>Disable</p></li><li><p>Disable Show Leo in the context menu on websites (this seems to be brand new and also auto enabled)</p></li></ul></li><li><p>Sync</p><ul><li><p>Every time I used Sync it failed for me, so don&#8217;t use. We will use a different service for bookmark syncing</p></li></ul></li><li><p>Search Engine</p><ul><li><p>Brave search isn&#8217;t great, especially for coding. Currently using Google, Bing,  ChatGPT, and Perplexity.</p></li><li><p>Disable improve search suggestions</p></li></ul></li><li><p>Extensions</p><ul><li><p>Disable all Google Things, Hangouts</p></li><li><p>Enable Web Torrent if you want that</p></li><li><p>Disable WideVine, a closed course extension by Google for Video DRM</p><ul><li><p>We will sacrifice another browser to only use WideVine for video watching</p></li></ul></li></ul></li><li><p>System</p><ul><li><p>Enable Memory Saver and Energy Saver</p></li></ul></li></ul><p>This gets you a reasonably private and secure Browser while not breaking too many websites. By no means will you be the Jason Bourne of browser tracking evasion, but it&#8217;s good enough for regular daily use. Counterintuitively the more aggressive you try to preserve privacy in the settings it actually makes it easier to fingerprint (track) you, so try to not go overboard. Check <a href="https://www.amiunique.org/">Am I Unique</a> and adjust as needed to blend in with the crowd. Privacy is a tradeoff with being inconvenienced, so I try to strike a middle ground as much as possible. If you have an immense need for more privacy check out <a href="https://www.privacytools.io/">Privacy Tools</a> for more inspiration.</p><p>A quick few notes on some useful things I do in the browser for additional productivity.</p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-159">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Getting Secure Home Internet Access While Away]]></title><description><![CDATA[Often you will be away from home but would like to appear as on your home network or access home LAN resources.]]></description><link>https://www.bowtiedcrocodile.com/p/getting-secure-home-internet-access</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/getting-secure-home-internet-access</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Sat, 13 Apr 2024 14:52:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DIYA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp" 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_!DIYA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DIYA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!DIYA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!DIYA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!DIYA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DIYA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp" width="432" height="432" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:432,&quot;bytes&quot;:273724,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!DIYA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!DIYA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!DIYA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!DIYA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ad5bb15-a8c8-4563-824b-c4ef83ccb70c_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Often you will be away from home but would like to appear as on your home network or access home LAN resources. For this we can use a WireGuard setup which handles the security, even when on untrusted networks. Two routers can handle this for your network setup.</p><p>First, a home router that supports Adguard, a WireGuard server, and all running OpenWRT. I bought the GL.iNet Flint 2 router for home: <a href="https://www.gl-inet.com/products/gl-mt6000/">https://www.gl-inet.com/products/gl-mt6000/</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.bowtiedcrocodile.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">The Bit Shift 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>Next, a portable router that has a config and cert to your home WireGuard server. This allows your device you want to connect no visibility over the private connections you are about to make. I used the Beryl AX for a portable router: <a href="https://www.gl-inet.com/products/gl-mt3000/">https://www.gl-inet.com/products/gl-mt3000/</a></p><p>Assuming you have a static IP (if not, enable DDNS and use those configs), in the home router create a WireGuard server and generate your WireGuard client config files. Create one for each device, including your portable router, and save on the device that needs them. On Mobile download the WireGuard client and on PC save the configs and upload them to the portable router once connected. Then enable the client and you'll be on your home router! In WireGuard server you can enable things like LAN access to get access to your local Samba Servers, DLNA servers, Linux servers, and more if you wish. Just ensure you keep your access keys secure or you'll have a breach. You can see more step by step instructions <a href="https://docs.gl-inet.com/router/en/3/tutorials/wireguard_server/#:~:text=You%20can%20simply%20use%20the%20default%20parameters%20of,WireGuard%20Server%20be%20able%20to%20access%20your%20LAN.">here</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JnDp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JnDp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JnDp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JnDp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JnDp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JnDp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg" width="679" height="203" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:203,&quot;width&quot;:679,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!JnDp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JnDp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JnDp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JnDp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66340566-2603-41ef-b09c-15d4804f3e2c_679x203.jpeg 1456w" sizes="100vw"></picture><div></div></div></a><figcaption class="image-caption">Enable Remote Access LAN at your discretion</figcaption></figure></div><p>Now on public wifi or in a hotel room you can securely access your home network, servers, files, and more. This is great when on untrusted wifi and even works if you need mobile cell phone access to your home network.</p><p>Was able to test while out of the country and confirmed no issue and good speed to my home internet. I used this to work remote out of the country with no issue. Since the router contains the WireGuard info, my work PC had no idea that it was on a different network from a WiFi point of view (there are other tracking means, so don't think this is 100% effective). Great way to get around networking and VPN restrictions on your devices as the portable router handles all the connections, with the bonus of any other WiFi devices piggybacking on the portable router also.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.bowtiedcrocodile.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">The Bit Shift 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><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.bowtiedcrocodile.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">The Bit Shift 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><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.bowtiedcrocodile.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">The Bit Shift 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 class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.bowtiedcrocodile.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.bowtiedcrocodile.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p><em>This free article was cross posted on <a href="https://x.com/BowTiedCrocodil/status/1779159682206007400">X</a> for an engagement experiment.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.bowtiedcrocodile.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">The Bit Shift 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>]]></content:encoded></item><item><title><![CDATA[Running AI Locally and Privately for Free]]></title><description><![CDATA[No need to sacrifice your privacy in order to take advantage of AI and LLMs]]></description><link>https://www.bowtiedcrocodile.com/p/running-ai-locally-and-privately</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/running-ai-locally-and-privately</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Tue, 02 Apr 2024 12:15:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!n7hr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I went down a rabbit hole recently after learning that many LLM models can be run on local hardware as long as it is strong enough. The last time I tried this was with Stable Diffusion on my poor 1060 graphics card that took 1 minute to generate an image. I was happy to find out that the latest MacBooks have plenty of support and hardware to run the LLMs locally without being too taxing. </p><p>The biggest issue with AI tools such as ChatGPT are the lack of guarantees around data privacy. You have no say in whether AI will be trained on your prompts and inputs unless you are a higher end customer who pays for the benefit. OpenAI has shown to be a questionable steward for the AI movement as a &#8220;nonprofit&#8221; company and we should always question the motives of Big Tech with their censorship of models. Thankfully open source LLMs have improved significantly due to efforts of many contributors on the internet. One such model that can be used for coding specific work is <strong>OpenCodeInterpreter</strong> which has some benchmarks that have it competing with ChatGPT4.0 in coding scenarios. You can see more info on their site <a href="https://opencodeinterpreter.github.io/">here</a>.</p><p>For context my hardware is an M3 Pro MacBook with 18GB unified RAM. You&#8217;ll need to adjust what size models you use depending on your hardware as there are smaller and bigger models to choose from and your RAM will influence that.</p><p>We are going to use Ollama, which helps download and run models locally and offers additional functionality such as API endpoints, code libraries, base prompt retraining, and OpenAI compatibility. The software is reminiscent of using Docker in many ways as you can easily download multiple models and run them at will all with a few simple commands.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n7hr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n7hr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!n7hr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!n7hr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!n7hr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n7hr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp" width="1456" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:320774,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!n7hr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!n7hr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!n7hr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!n7hr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0da82b-0de2-4300-b0e8-3a8f401c14d4_1792x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Executive Summary</h2><ol><li><p>Download <a href="https://ollama.com/">ollama</a></p></li><li><p>In terminal run:<code> ollama run pxlksr/opencodeinterpreter-ds:6.7b-Q4_K_M</code></p></li><li><p>You now have a local, private chatbot in the terminal</p></li><li><p>See <a href="https://github.com/ollama/ollama/tree/main?tab=readme-ov-file#community-integrations">integrations</a> you can now use to get a native chat UI and more</p></li></ol><h2>Demo and Install</h2><p>To run the models locally you will need to install Ollama which you can find a download link here: <a href="https://ollama.com/">https://ollama.com/</a>. I&#8217;m using this on Mac and ran into no issues in the process, but if you&#8217;re on Windows just note the support is recent for it and still in preview.</p><p>After installation you can verify it worked by running <code>ollama -v</code> and confirm the application can be found.</p><p>Now you can execute <code>ollama run llama2</code> in the terminal and you will be kicked into the chat prompt within the terminal. I asked it to generate all prime numbers up to 100 in Go and it successfully output the program, which I ran locally in my terminal with no issue. You can see the performance below in real time.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;a150a509-458d-4466-9963-7ac5763a9713&quot;,&quot;duration&quot;:null}"></div><p>Here is the code that was generated:</p><pre><code>package main

import "fmt"

func main() {
    for i := 2; i &lt; 100; i++ {
        if !isPrime(i) {
            continue
        }
        fmt.Println(i)
    }
}

func isPrime(n int) bool {
    if n &lt; 2 {
        return false
    }
    for i := 2; i * i &lt;= n; i++ {
        if n % i == 0 {
            return false
        }
    }
    return true
}</code></pre><div><hr></div><p>One thing to emphasize is that this was all done locally! No external API calls, no privacy breaches,  no personal data leaks, and can run with censorship free models all done on the hardware you own with open source code and models!</p><p>While the terminal prompt is useful, we also have access to an API endpoint too.</p><pre><code>curl http://localhost:11434/api/generate -d '{
  "model": "llama2",
  "prompt": "Write me code for the classic fizz buzz problem",
  "stream": false
}'</code></pre><p>If we pipe the response to jq we get:</p><pre><code>{
  "model": "llama2",
  "created_at": "2024-04-01T00:48:41.657866Z",
  "response": "Of course! Here is some sample Python code that prints out the numbers from 1 to 100, replacing multiples of 3 with \"Fizz\" and multiples of 5 with \"Buzz\":\n```\nfor num in range(1, 101):\n    if num % 3 == 0:\n        print(\"Fizz\")\n    elif num % 5 == 0:\n        print(\"Buzz\")\n    else:\n        print(num)\n```\nLet me know if you have any questions or need further clarification!",
  "done": true,
  "context": [...],
  "total_duration": 4301712292,
  "load_duration": 2555167,
  "prompt_eval_count": 16,
  "prompt_eval_duration": 268586000,
  "eval_count": 124,
  "eval_duration": 4029886000
}</code></pre><p>A better look at the code:</p><pre><code>for num in range(1, 101):
    if num % 3 == 0:     
        print(\"Fizz\")
    elif num % 5 == 0:       
        print(\"Buzz\")  
    else:   # some versions of fizz buzz sup
        print(num)</code></pre><p>You can see more of the API capabilities here for integration <a href="https://github.com/ollama/ollama/blob/main/docs/api.md">here</a>. When using the API use the keep_alive parameter to avoid the model shutting down between queries since by default it is only 5 minutes. Querying the model <strong>doesn&#8217;t</strong> seem to reuse the current model in a terminal session even if its the same model, so you will see longer response times up to 15 seconds due to your CPU and RAM being taken up already. If you kill the terminal model you should have faster API responses, though I have seen it still take around 10 seconds, but also be as short as 2 seconds. I&#8217;m not sure if this is an API only quirk as using the terminal interface has always been very fast for me.</p><p>They also have a python and javascript library for non http based IPC. Ollama also has <a href="https://github.com/ollama/ollama/blob/main/docs/openai.md">partial support</a> for OpenAI&#8217;s API format, meaning you can sub your local model&#8217;s endpoint for any OpenAI based integration.</p><h2>Using the Coding Models</h2><p>Now that we have a model running we can switch to more targeted and trained models for coding. </p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/running-ai-locally-and-privately">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Building an Optimal Software Development Environment - Part 2: Mental, Physical, and Soulful Wellbeing]]></title><description><![CDATA[Ensure your mind and body and spirit are in the right state to perform]]></description><link>https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-2fd</link><guid isPermaLink="false">https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-2fd</guid><dc:creator><![CDATA[BowTiedCrocodile]]></dc:creator><pubDate>Fri, 29 Mar 2024 21:35:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BozE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You will not perform at your best if your mental, physical, and spiritual wellbeing are compromised. Active, purposeful management of them unlocks your true potential through their interlinking. We&#8217;ve covered how to setup your office for the ideal working environment to make you more efficient work and now we are going to cover how to make you the best version of yourself.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BozE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BozE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!BozE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!BozE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!BozE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BozE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp" width="462" height="462" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:462,&quot;bytes&quot;:236518,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!BozE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!BozE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!BozE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!BozE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d3b00b0-e07a-465e-898b-d31c820019dd_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Physical Management</h2><p>If you&#8217;ve ever been sick as an adult you know you&#8217;ve said the following, &#8221;I would do anything to be healthy again&#8221;. Inside this statement rings the true inner feelings of what a gift it is to be fully healthy and able bodied person. But why do we tolerate good enough healthiness, and not perfect health? I&#8217;m absolutely not innocent in this area and I know other people are not either. Even recovering from sickness at 80% health, you are not at the same capabilities you have at full health!</p><p>In fact I&#8217;d argue the average person isn&#8217;t even 80% healthy on average. With the general population being overweight and more office workers constantly inside their house all day it&#8217;s not a surprise people are neglecting their physical wellness. I didn&#8217;t take it seriously either in my early 20s and felt like garbage every day. Overweight, not attractive, drinking often, no dating game, even a slight limp while walking due to tight hips and back, just aimlessly going through life. But once I discovered there is so much more to life I got serious and am now healthier in my late 20s than as a younger 20 year old! It&#8217;s amazing how the consistent application of apathy towards your health can hurt you even when you are relatively young. Imagine if you were consistant in the other direction how healthy you would be!</p><p>So what did I do to turn my physical health around? I tried intermittent fasting and cardio and it worked to get the weight off, but I was still &#8220;skinny fat&#8221;. It was a half measure. I got word back from my doctor that my blood test results were not great, elevated liver enzymes, non optimal cholesterol,  and high triglycerides. I didn&#8217;t do much after, but I did get lucky from following <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;BowTied Bull&quot;,&quot;id&quot;:33966487,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a1e8ff33-89be-4b18-ae7c-6141a8a4e7aa_154x140.png&quot;,&quot;uuid&quot;:&quot;66e78e38-f5a0-4961-bc90-9e2fb3e85088&quot;}" data-component-name="MentionToDOM"></span> (WSP)  and thankfully <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;BowTiedOx&quot;,&quot;id&quot;:33982809,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a254b54e-cb1a-4d25-95a7-b2c1f5ac85b0_400x400.jpeg&quot;,&quot;uuid&quot;:&quot;3095f5a3-85b7-4af4-9b22-dfe1c6e87a9a&quot;}" data-component-name="MentionToDOM"></span> &#8216;s publication came around and changed everything for me. </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:36462920,&quot;url&quot;:&quot;https://www.bowtiedox.io/p/3-day-a-week-upperlower-split-by&quot;,&quot;publication_id&quot;:361904,&quot;publication_name&quot;:&quot;Strong As An Ox&quot;,&quot;publication_logo_url&quot;:&quot;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%2F2c7b13c1-6a2d-4ccc-a086-00c839406692_400x400.png&quot;,&quot;title&quot;:&quot;3 Day A Week Upper/Lower Split By BowTiedOx&quot;,&quot;truncated_body_text&quot;:&quot;Introduction Welcome and hello! What I have put together is a simple 3 Day a Week Upper/Lower Split made for those that are familiar with lifting, and looking to maximize the most muscle growth with the least amount of time in the gym. This program is simple, efficient, and will absolutely pack on size. This is perfect for the busy professional, student&#8230;&quot;,&quot;date&quot;:&quot;2021-05-16T02:09:52.113Z&quot;,&quot;like_count&quot;:175,&quot;comment_count&quot;:73,&quot;bylines&quot;:[{&quot;id&quot;:33982809,&quot;name&quot;:&quot;BowTiedOx&quot;,&quot;handle&quot;:&quot;bowtiedox&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a254b54e-cb1a-4d25-95a7-b2c1f5ac85b0_400x400.jpeg&quot;,&quot;bio&quot;:&quot;Writer of the Number 1 Health &amp; Wellness Substack \&quot;Strong As An Ox\&quot;&quot;,&quot;profile_set_up_at&quot;:&quot;2021-05-12T03:07:56.653Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:284219,&quot;user_id&quot;:33982809,&quot;publication_id&quot;:361904,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:361904,&quot;name&quot;:&quot;Strong As An Ox&quot;,&quot;subdomain&quot;:&quot;bowtiedox&quot;,&quot;custom_domain&quot;:&quot;www.bowtiedox.io&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Number 1 Ranked Health &amp; Wellness Substack: Newsletter covers fitness, health, and mindset, all grounded in the fundamentals of physiology.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/2c7b13c1-6a2d-4ccc-a086-00c839406692_400x400.png&quot;,&quot;author_id&quot;:33982809,&quot;theme_var_background_pop&quot;:&quot;#009B50&quot;,&quot;created_at&quot;:&quot;2021-05-15T22:16:32.140Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;BowTiedOx&quot;,&quot;founding_plan_name&quot;:&quot;12 Weeks 1on1 Coaching &quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}},{&quot;id&quot;:1511581,&quot;user_id&quot;:33982809,&quot;publication_id&quot;:396303,&quot;role&quot;:&quot;contributor&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:396303,&quot;name&quot;:&quot;BowTiedHeifer&#8217;s Newsletter&quot;,&quot;subdomain&quot;:&quot;bowtiedheifer&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Women's Health, Fitness &amp; More&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/9888849d-a996-4a7e-aca4-93033ec113cd_400x400.png&quot;,&quot;author_id&quot;:38834213,&quot;theme_var_background_pop&quot;:&quot;#99A2F1&quot;,&quot;created_at&quot;:&quot;2021-06-29T00:11:05.640Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;BowTiedHeifer&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;paused&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;twitter_screen_name&quot;:&quot;BowTiedOx&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:1000}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://www.bowtiedox.io/p/3-day-a-week-upperlower-split-by?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!Hyrz!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7b13c1-6a2d-4ccc-a086-00c839406692_400x400.png"><span class="embedded-post-publication-name">Strong As An Ox</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">3 Day A Week Upper/Lower Split By BowTiedOx</div></div><div class="embedded-post-body">Introduction Welcome and hello! What I have put together is a simple 3 Day a Week Upper/Lower Split made for those that are familiar with lifting, and looking to maximize the most muscle growth with the least amount of time in the gym. This program is simple, efficient, and will absolutely pack on size. This is perfect for the busy professional, student&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">5 years ago &#183; 175 likes &#183; 73 comments &#183; BowTiedOx</div></a></div><p>I decided to embark on his 3 day a week full body workout plan and commit myself to lifting weights and the rewards have been continuous to this day. I studied and implemented to the program, ate better, and tried more walking and cardio. I turned in the cleanest bill of health from my doctor the next time I saw him a year later and felt more alive than I&#8217;ve ever felt. If I had to point out the <em>single</em> most important moment in my life the last 5 years it was that first time in the Gym trying to figure out all the lifts I needed to do from Ox&#8217;s program. If you don&#8217;t have that zeal for life everyday something is almost certainly wrong and you need to make major changes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BjgM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BjgM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.png 424w, https://substackcdn.com/image/fetch/$s_!BjgM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.png 848w, https://substackcdn.com/image/fetch/$s_!BjgM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.png 1272w, https://substackcdn.com/image/fetch/$s_!BjgM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BjgM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.png" width="1187" height="385" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:385,&quot;width&quot;:1187,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:90519,&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_!BjgM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.png 424w, https://substackcdn.com/image/fetch/$s_!BjgM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.png 848w, https://substackcdn.com/image/fetch/$s_!BjgM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.png 1272w, https://substackcdn.com/image/fetch/$s_!BjgM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb953c3c3-c7a1-4438-91ca-98306df76c7d_1187x385.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>When I say this changed everything, it really did. I had a moment about 6+ months after lifting when I visibly saw some significant muscle growth and did a double take in the mirror and knew I was on the right path. I kept at the program and everything else in my life suddenly <em>aligned</em> with purpose. My confidence and execution level in everything exploded and suddenly me, a quiet introvert, was growing more strong willed and charismatic than ever. I&#8217;m not going to go on about my personal story but I want to drill the point home that being healthy is almost a drug in itself and it creates strength and confidence everywhere else in your life. You will see exceptional gains in life going this route.</p><p>The direct rewards are also tangible toward my career, with programmer specific issues like &#8220;Imposter Syndrome&#8221; going away completely, and multiple raises and promotions happening within this period. Public speaking became much easier and I knew I could accomplish whatever was thrown at me. It gave me the confidence to go out to the marketplace and get an even better job with superior pay all while working remote. I also non-coincidently earned my first wifi money during this period. I believe moments of self actualization like this combo well with other endeavors. Don&#8217;t be surprised when you&#8217;re in the thick of the lifting program you want to make more money outside work.</p><p>Not only do you get the physical benefits of strength and longer lifespan, but you gain the ability of immense confidence in your skill set and know you can go toe to toe with anyone out there. I can&#8217;t imagine how life would be if I didn&#8217;t do this, but it would be too depressing to even try to imagine.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!taGA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!taGA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!taGA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!taGA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!taGA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!taGA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp" width="448" height="448" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:448,&quot;bytes&quot;:443882,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&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_!taGA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!taGA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!taGA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!taGA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28f00f0e-ea53-4235-9c64-5b57a988f547_1024x1024.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Physical Optimization</h3><p>Now that we&#8217;ve covered the idea of actually being physically fit and in shape, we can cover more specific optimization for the software worker.</p>
      <p>
          <a href="https://www.bowtiedcrocodile.com/p/building-an-optimal-software-development-2fd">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>